多模态融合算法应用:CT + 临床文本数据 + pyradiomics提取到的图像特征

多模态融合算法应用 · CT +临床文本数据 + pyradiomics提取图像特征

  • 单模态建模
    • 临床数据建模
    • pyradiomics提取图像特征建模
    • CT建模
  • 多模态建模
    • 前融合
      • 为什么能直接合并在一起?
    • 后融合
    • Med-CLIP:深度学习 + 可解释性

 


单模态建模

临床数据建模

临床文本数据:
在这里插入图片描述

  1. Group: 目标分类标签,表示样本属于哪一组(0或1)。
  2. imageName: 图像名称,表示每个样本对应的图像的名称。
  3. age: 年龄,表示样本的年龄。
  4. RMAX(mm): 某一特征的数值,单位为毫米。
  5. thicken(mm): 另一特征的数值,单位为毫米。
  6. fat: 体脂率,表示样本的体脂含量。
  7. gender(1=man,2=woman): 性别编码,1表示男性,2表示女性。
  • 第1行

    • Group: 1(正类)
    • imageName: M299(对应哪个病)
    • age: 61
    • RMAX(mm): 49.7
    • thicken(mm): 21.4
    • fat: 1(有体脂)
    • gender: 1(男性)
  • 第2行

    • Group: 0(负类)
    • imageName: L168(对应哪个病)
    • age: 62
    • RMAX(mm): 44.4
    • thicken(mm): 20.3
    • fat: 0(无体脂)
    • gender: 1(男性)
  • 第3行

    • Group: 0(负类)
    • imageName: L264(对应哪个病)
    • age: 49
    • RMAX(mm): 72.2
    • thicken(mm): 22.3
    • fat: 0(无体脂)
    • gender: 2(女性)

这张图展示了数据集的前几行样本及其特征,包括年龄、RMAX值、thicken值、体脂率和性别。

样本比(数据平衡):

  • 0 类 122

  • 1 类 106

# 导入常用库
import sys  # 系统特定参数和函数
import pandas as pd  # 数据处理和分析库
import os  # 操作系统接口模块
import random  # 生成随机数的模块
import shutil  # 文件操作模块
import sklearn  # 机器学习库
import scipy  # 科学计算库
import numpy as np  # 数组和矩阵处理库
import matplotlib.pyplot as plt  # 数据可视化库
from sklearn.linear_model import LassoCV  # 导入LassoCV回归模型
from sklearn.preprocessing import StandardScaler  # 导入标准化工具
import seaborn as sns  # 数据可视化库clinic_df = pd.read_csv("clinic_data.csv")  # 读取临床数据CSV文件
new_clinic_df = clinic_df.drop('imageName', axis=1)  # 删除无用的'imageName'列
selected_columns1 = new_clinic_df.columns  # 获取数据框的列名from pycaret.classification import *  # 导入PyCaret分类模块
s1 = ClassificationExperiment()  # 创建分类实验对象
s1.setup(data = new_clinic_df, target = 'Group', session_id=123, fix_imbalance_method=False, normalize=True)  
# 设置分类实验的初始参数:使用new_clinic_df数据框,目标列为'Group',设置随机种子为123,不进行数据平衡处理,对数据进行标准化
best1 = s1.compare_models()  # 比较不同的分类模型,选择表现最好的模型
s1.evaluate_model(best1)  # 评估最优模型的性能
s1.plot_model(best1, 'auc')  # 绘制最优模型的ROC曲线并显示AUC值
s1.predict_model(best1)  # 使用最优模型对数据进行预测

预测结果:模型的准确率 (Accuracy) 为 68.12%。

尝试的模型有:

  1. Logistic Regression (LR):逻辑回归
  2. K Nearest Neighbors (KNN):K近邻
  3. Naive Bayes (NB):朴素贝叶斯
  4. Decision Tree (DT):决策树
  5. Random Forest (RF):随机森林
  6. Gradient Boosting Classifier (GB):梯度提升分类器
  7. Support Vector Machine (SVM):支持向量机
  8. Light Gradient Boosting Machine (LightGBM):轻量梯度提升机
  9. Extreme Gradient Boosting (XGBoost):极限梯度提升
  10. CatBoost Classifier (CatBoost):CatBoost分类器
  11. Extra Trees Classifier (ET):极端随机树
  12. AdaBoost Classifier (ADA):AdaBoost分类器
  13. Linear Discriminant Analysis (LDA):线性判别分析
  14. Quadratic Discriminant Analysis (QDA):二次判别分析

 


pyradiomics提取图像特征建模

pyradiomics提取图像特征,有近50种。
在这里插入图片描述

import sys 
import pandas as pd
import os
import random
import shutil
import sklearn 
import scipy
import numpy as np
import radiomics  # 这个库专门用来提取特征
from  radiomics import featureextractor
from sklearn.linear_model import LassoCV  # 导入Lasso工具包LassoCV
from sklearn.preprocessing import StandardScaler  # 标准化工具包StandardScalerfeature_df = pd.read_csv("radiomics_feature_data.csv")  # 读取放射学特征数据的CSV文件
new_feature_df = feature_df.drop("imageName", axis=1)  # 删除无用的'imageName'列
from pycaret.classification import *  # 导入PyCaret分类模块s2 = ClassificationExperiment()  # 创建分类实验对象
s2.setup(data = new_feature_df, target = 'Group', session_id=123, fix_imbalance_method=False, normalize=True, feature_selection = True, feature_selection_method='classic', n_features_to_select=0.2)  
# 设置分类实验的初始参数:使用new_feature_df数据框,目标列为'Group',设置随机种子为123,不进行数据平衡处理,对数据进行标准化,
# 使用特征选择,特征选择方法为'classic',选择20%的特征(机器学习不合适太多特征,需要选择一些主要信息的特征)selected_columns = s2.dataset_transformed.columns  # 获取转换后数据集的列名(代表选择的特征有哪些)
best2 = s2.compare_models()  # 比较不同的分类模型,选择表现最好的模型
s2.predict_model(best2)      # 评估最优模型的性能

预测结果:模型的准确率 (Accuracy) 为 67.33%。

比临床数据预测的 68.12% 低一些。

从所有特征选了20%特征,具体是哪些:

['A_wavelet-LHL_glszm_SmallAreaEmphasis','A_wavelet-HHH_glszm_SizeZoneNonUniformityNormalized','A_wavelet-LLL_glszm_GrayLevelNonUniformityNormalized','A_wavelet-LHH_glcm_InverseVariance','A_original_glszm_SizeZoneNonUniformityNormalize','A_original_ngtdm_Strength','A_wavelet-LHH_glszm_GrayLevelNonUniformity','A_log-sigma-5-0-mm-3D_firstorder_90Percentile','A_wavelet-HLL_glcm_MCC', 'A_log-sigma-4-0-mm-3D_ngtdm_Contrast']

CT建模

 


多模态建模

前融合

在这里插入图片描述

把临床文本数据(删除imageName了,5个)和 pyradiomics提取到的图像特征(20%,9个)

columns = ['Group', 'age', 'RMAX(mm)', 'thicken(mm)', 'fat','gender(1=man,2=woman)','A_wavelet-LHL_glszm_SmallAreaEmphasis','A_wavelet-HHH_glszm_SizeZoneNonUniformityNormalized','A_wavelet-LLL_glszm_GrayLevelNonUniformityNormalized','A_wavelet-LHH_glcm_InverseVariance','A_original_glszm_SizeZoneNonUniformityNormalized','A_original_ngtdm_Strength','A_wavelet-LHH_glszm_GrayLevelNonUniformity','A_log-sigma-5-0-mm-3D_firstorder_90Percentile','A_wavelet-HLL_glcm_MCC', 'A_log-sigma-4-0-mm-3D_ngtdm_Contrast']

在这里插入图片描述

merge_df = pd.read_csv("merge.csv")  # 读取合并数据的CSV文件
columns = ['Group', 'age', 'RMAX(mm)', 'thicken(mm)', 'fat','gender(1=man,2=woman)', 'A_wavelet-LHL_glszm_SmallAreaEmphasis','A_wavelet-HHH_glszm_SizeZoneNonUniformityNormalized','A_wavelet-LLL_glszm_GrayLevelNonUniformityNormalized','A_wavelet-LHH_glcm_InverseVariance','A_original_glszm_SizeZoneNonUniformityNormalized','A_original_ngtdm_Strength','A_wavelet-LHH_glszm_GrayLevelNonUniformity','A_log-sigma-5-0-mm-3D_firstorder_90Percentile','A_wavelet-HLL_glcm_MCC', 'A_log-sigma-4-0-mm-3D_ngtdm_Contrast']  
# 指定需要的列,包含目标列和若干特征列new_merge_df = merge_df[columns]  # 从数据框中选择指定的列
from pycaret.classification import *  # 导入PyCaret分类模块s3 = ClassificationExperiment()  # 创建分类实验对象
s3.setup(data = new_merge_df, target = 'Group', session_id=123, fix_imbalance_method=False, normalize=True)  
# 设置分类实验的初始参数:使用new_merge_df数据框,目标列为'Group',设置随机种子为123,不进行数据平衡处理,对数据进行标准化best3 = s3.compare_models()  # 比较不同的分类模型,选择表现最好的模型
s3.predict_model(best3)  # 使用最优模型对数据进行预测

前融合预测结果:71.01%。

  • pyradiomics提取图像(20%)特征建模:67.33%

  • 临床数据建模:68.12%

如果想进一步优化,可以多选一些特征,这个只选了20%。

为什么能直接合并在一起?

临床数据

(Group’, ‘age’, ‘RMAX(mm)’, ‘thicken(mm)’, ‘fat’,
‘gender(1=man,2=woman)’)

和pyradiomics提取图像特征

(Group、‘A_wavelet-LHL_glszm_SmallAreaEmphasis’,
‘A_wavelet-HHH_glszm_SizeZoneNonUniformityNormalized’,
‘A_wavelet-LLL_glszm_GrayLevelNonUniformityNormalized’,
‘A_wavelet-LHH_glcm_InverseVariance’,
‘A_original_glszm_SizeZoneNonUniformityNormalized’,
‘A_original_ngtdm_Strength’,
‘A_wavelet-LHH_glszm_GrayLevelNonUniformity’,
‘A_log-sigma-5-0-mm-3D_firstorder_90Percentile’,
‘A_wavelet-HLL_glcm_MCC’, ‘A_log-sigma-4-0-mm-3D_ngtdm_Contrast’)

为什么能直接合并在一起?

临床数据和从图像中提取的放射学特征可以直接合并在一起是因为它们都描述了同一组样本的不同方面。

后融合

在这里插入图片描述

Med-CLIP:深度学习 + 可解释性

不止 pyradiomics 能提取图像特征,深度学习方法更好,但深度学习方法提取的特征没有可解释性。

从高维空间提取的特征,最后压缩成一行给你,完全看不懂到底是什么。

那使用多模态大模型方式更好。

虽然也是临床数据(年龄、性别、疾病标签等)+ 患者图像数据进行预测,但大模型会给你详细的解释 — 之所以说 yyy 病,是因为 xxx 特征,是真能解释清楚。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1472566.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

【讨论C++多态】

讨论C多态 多态概念定义及实现 虚函数虚函数重写 final和override重载、重写和重定义抽象类纯虚函数接口继承和实现继承 多态的原理虚函数表打印单继承虚函数表动态绑定和静态绑定多继承虚函数表 多态 概念 多态即完成某个行为,不同对象会产生不同的状态。 定义及实…

基于Qt实现的PDF阅读、编辑工具

记录一下实现pdf工具功能 语言:c、qt IDE:vs2017 环境:win10 一、功能演示: 二、功能介绍: 1.基于saribbon主体界面框架,该框架主要是为了实现类似word导航项 2.加载PDF放大缩小以及预览功能 3.pdf页面跳转…

【MySQL】事务实现原理

目录 事务 如何使用 ACID 原子性(Atomicity) 原子性实现原理 持久性(Durability) 持久性实现原理 隔离性 隔离级别 读未提交 读已提交 可重复读 串行化 隔离级别原理 锁 共享锁&独占锁 意向锁 索引记录锁 间隙锁 临键锁 插入意向锁 自增锁 MVCC 实现…

Node.js 核心知识点 - Koa 框架

一、Koa 基本概念 官网:Koa - next generation web framework for node.js 1、Koa 是什么? Koa 是一个基于 Node.js 的轻量级 web 框架,由 Express 团队创造。Koa 的设计理念是使用现代的 JavaScript 特性(如 async/await&#x…

【Spring cloud】 认识微服务

文章目录 🍃前言🌴单体架构🎋集群和分布式架构🌲微服务架构🎍微服务带来的挑战⭕总结 🍃前言 本篇文章将从架构的演变过程来简单介绍一下微服务,大致分为一下几个部分 单体架构集群和分布式架…

九芯电子手把手教你选购电动车防盗语音报警器芯片

电动车,也叫电瓶车,加装的防盗器声音非常大,能使电动车防盗报警器变得更智能化,功能多样化。本文将介绍在选购电动车防盗语音报警芯片,应该考虑哪些因素,以确保所选产品既满足安全需求,又具备物…

深度学习-数学基础(四)

深度学习数学基础 数学基础线性代数-标量和向量线性代数-向量运算向量加和向量内积向量夹角余弦值 线性代数-矩阵矩阵加法矩阵乘法矩阵点乘矩阵计算的其他内容 人工智能-矩阵的操作矩阵转置(transpose)矩阵与向量的转化 线性代数-张量(tensor…

CFS三层内网渗透——第二层内网打点并拿下第三层内网(三)

目录 八哥cms的后台历史漏洞 配置socks代理 ​以我的kali为例,手动添加 socks配置好了,直接sqlmap跑 ​登录进后台 蚁剑配置socks代理 ​ 测试连接 ​编辑 成功上线 上传正向后门 生成正向后门 上传后门 ​内网信息收集 ​进入目标二内网机器&#xf…

phpcms 升级php8.3.8

windows 2008 server 不支持php8.3.8,需升级为windows 2012 1.下载php8.3.8 PHP8.3.9 For Windows: Binaries and sources Releases 2.配置php.ini (1.)在php目录下找到php.ini-development文件,把它复制一份,改名为php.ini (2.)修改php安装目录 根…

昇思MindSpore学习笔记4-02生成式--DCGAN生成漫画头像

摘要: 记录了昇思MindSpore AI框架使用70171张动漫头像图片训练一个DCGAN神经网络生成式对抗网络,并用来生成漫画头像的过程、步骤。包括环境准备、下载数据集、加载数据和预处理、构造网络、模型训练等。 一、概念 深度卷积对抗生成网络DCGAN Deep C…

Runway Gen-3 实测,这就是 AI 视频生成的 No.1!视频高清化EvTexture 安装配置使用!

Runway Gen-3 实测,这就是 AI 视频生成的 No.1!视频高清化EvTexture 安装配置使用! 由于 Runway 作为一个具体的工具或平台,其详细信息在搜索结果中没有提供,我将基于假设 Runway 是一个支持人工智能和机器学习模型的创意工具,提供一个关于使用技巧和类似开源项目的文稿总…

视频字幕提取在线工具有哪些?总结5个字幕提取工具

平时在沉浸式追剧的时候,我们常常都会被影视剧中的各种金句爆梗而逗得开怀大笑~而真正要用到时候却总是一片头脑空白。其实要记住它们最好的办法便是将其提取留档下来,每次有需要的时候打开就能一下子回顾到~ 今天就来带大家盘一盘视频字幕提取的软件好…

动态规划入门,从简单递归到记忆化搜索到动态规划

动态规划入门&#xff0c;从简单递归到记忆化搜索到动态规划 打家劫舍 class Solution {private int nums[];public int rob(int[] nums) {this.nums nums;return dfs(nums.length - 1);}public int dfs(int i){if (i < 0){return 0;}int res Math.max(dfs(i - 1), dfs(i…

【分布式数据仓库Hive】Hive的安装配置及测试

目录 一、数据库MySQL安装 1. 检查操作系统是否有MySQL安装残留 2. 删除残留的MySQL安装&#xff08;使用yum&#xff09; 3. 安装MySQL依赖包、客户端和服务器 4. MySQL登录账户root设置密码 5. 启动MySQL服务 6. 登录MySQL&#xff0c;进入数据库操作提示符 7. 授权H…

SpringBoot 启动流程六

SpringBoot启动流程六 这句话是创建一个上下文对象 就是最终返回的那个上下文 我们这个creatApplicationContext方法 是调用的这个方法 传入一个类型 我们通过打断点的方式 就可以看到context里面的东西 加载容器对象 当我们把依赖改成starter-web时 这个容器对象会进行…

深度解析Java世界中的对象镜像:浅拷贝与深拷贝的奥秘与应用

在Java编程的浩瀚宇宙中&#xff0c;对象拷贝是一项既基础又至关重要的技术。它直接关系到程序的性能、资源管理及数据安全性。然而&#xff0c;提及对象拷贝&#xff0c;不得不深入探讨其两大核心类型&#xff1a;浅拷贝&#xff08;Shallow Copy&#xff09;与深拷贝&#xf…

等保2.0标准相比之前的有哪些重大变化?

在数字化的浪潮中&#xff0c;网络安全如同一艘坚固的航船&#xff0c;承载着国家与民族的希望&#xff0c;驶向信息化的彼岸。等级保护制度&#xff08;等保&#xff09;作为中国网络安全的守护神&#xff0c;经过岁月的洗礼与智慧的积淀&#xff0c;迎来了等保2.0的时代&…

Android仿天眼查人物关系图

效果图预览 绘制思路 这里使用了中学解析几何知识 XPoint OPointX OPointXcosθ&#xff1b; YPoint OPointY OPointYsinθ&#xff1b; canvas.drawText(lists.get(i).getName(), XPoint (float) Math.cos(pere * i 5) * radius[i % radius.length] - 30, YPoint (fl…

C语言 | Leetcode C语言题解之第213题打家劫舍II

题目&#xff1a; 题解&#xff1a; int robRange(int* nums, int start, int end) {int first nums[start], second fmax(nums[start], nums[start 1]);for (int i start 2; i < end; i) {int temp second;second fmax(first nums[i], second);first temp;}retur…

昇思25天学习打卡营第9天|保存与加载

保存与加载 在训练网络模型的过程中&#xff0c;保存中间和最后结果可以用来微调和后续的模型推理与部署。 # 首先定义一个模型 def network():model nn.SequentialCell(nn.Flatten(),nn.Dense(28*28, 512),nn.ReLU(),nn.Dense(512, 512),nn.ReLU(),nn.Dense(512, 10))retur…