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

news2024/11/19 18:45:00

多模态融合算法应用 · 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  # 标准化工具包StandardScaler

feature_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.coloradmin.cn/o/1896343.html

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

相关文章

中国移动中国联通中国电信数字化转型营销销售讲师培训老师讲授AIGC大模型人工智能5G云算力网络云网终端AIGC人工智能宽带政企物联网专线 IDC智慧城市

唐兴通 数字化商业创新顾问、新媒体营销专家、数字化销售增长教练、沃顿商学院演讲嘉宾。全球创新增长战略大家EM罗杰斯(创新的扩散)、杰弗里摩尔(跨越鸿沟)、亨利切萨布鲁夫(开放式创新)在中国合作者。《…

本安防爆手机:危险环境下的安全通信解决方案

在石油化工、煤矿、天然气等危险环境中,通信安全是保障工作人员生命安全和生产顺利进行的关键。防爆智能手机作为专为这些环境设计的通信工具,提供了全方位的安全通信解决方案。 防爆设计与材料: 防爆智能手机采用特殊的防爆结构和材料&…

DolphinDB 蝉联 Gartner 中国实时数据管理代表厂商

报!DolphinDB 又上榜啦!!! 上月,全球知名信息技术研究公司 Gartner 发布了 Hype Cycle for Data, Analytics and AI in China, 2024 报告,以技术成熟度曲线(Hype Cycle)和优先级矩阵…

【图卷积网络】GCN基础原理简单python实现

基础原理讲解 应用路径 卷积网络最经典的就是CNN,其 可以提取图片中的有效信息,而生活中存在大量拓扑结构的数据。图卷积网络主要特点就是在于其输入数据是图结构数据,即 G ( V , E ) G(V,E) G(V,E),其中V是节点,E是…

Java集成openai,ollama,千帆,通义千问实现文本聊天

Java集成openai,ollama,千帆,通义千问实现文本聊天 本文所使用的环境如下 Win10 JDK17 SpringBoot3.2.4 集成Open AI pom文件 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmln…

Emacs有什么优点,用Emacs写程序真的比IDE更方便吗?

Emacs 是一个功能强大的文本编辑器&#xff0c;它在开发者和程序员中非常受欢迎&#xff0c;主要优点包括&#xff1a; 可定制性&#xff1a;Emacs 允许用户通过 Lisp 编程语言来自定义编辑器的行为和界面&#xff0c;几乎可以修改任何方面。扩展性&#xff1a;拥有大量的扩展…

【博士每天一篇文献-综述】Threats, Attacks, and Defenses in Machine Unlearning A Survey

1 介绍 年份&#xff1a;2024 作者&#xff1a;刘子耀&#xff0c;陈晨&#xff0c;南洋理工大学 期刊&#xff1a; 未发表 引用量&#xff1a;6 Liu Z, Ye H, Chen C, et al. Threats, attacks, and defenses in machine unlearning: A survey[J]. arXiv preprint arXiv:2403…

idea导入Maven项目

导入Maven项目 方式1&#xff1a;使用Maven面板&#xff0c;快速导入项目 打开IDEA&#xff0c;选择右侧Maven面板&#xff0c;点击 号&#xff0c;选中对应项目的pom.xml文件&#xff0c;双击即可 说明&#xff1a;如果没有Maven面板&#xff0c;选择 View > Appearance…

马拉松报名小程序的设计

管理员账户功能包括&#xff1a;系统首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;赛事信息管理&#xff0c;赛事报名管理&#xff0c;活动商城管理&#xff0c;留言板管理&#xff0c;系统管理 微信端账号功能包括&#xff1a;系统首页&#xff0c;赛事信息&…

AI Agent框架(LLM Agent):LLM驱动的智能体如何引领行业变革,应用探索与未来展望

AI Agent框架&#xff08;LLM Agent&#xff09;&#xff1a;LLM驱动的智能实体如何引领行业变革&#xff0c;应用探索与未来展望 1. AI Agent&#xff08;LLM Agent&#xff09;介绍 1.1. 术语 Agent&#xff1a;“代理” 通常是指有意行动的表现。在哲学领域&#xff0c;Ag…

通证经济重塑经济格局

在数字化转型的全球浪潮中&#xff0c;通证经济模式犹如一股新兴力量&#xff0c;以其独特的价值传递与共享机制&#xff0c;重塑着经济格局&#xff0c;引领我们步入数字经济的新纪元。 通证&#xff0c;作为这一模式的核心&#xff0c;不仅是权利与权益的数字化凭证&#xf…

ETCD 基本介绍与常见命令的使用

转载请标明出处&#xff1a;https://blog.csdn.net/donkor_/article/details/140171610 文章目录 一、基本介绍1.1 参考1.2 什么是ETCD1.3 ETCD的特点1.4 ETCD的主要功能1.5 ETCD的整体架构1.6 什么时候用ETCD&#xff0c;什么时候用redis 二、安装三、使用3.1 etcdctl3.2 常用…

【动态规划】动态规划一

动态规划一 1.第 N 个泰波那契数2.面试题 08.01. 三步问题3.使用最小花费爬楼梯4.解码方法 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.…

快手矩阵管理系统:开启短视频营销的智能时代

在短视频内容营销的浪潮中&#xff0c;快手矩阵管理系统以其独特的优势和功能&#xff0c;成为品牌和个人创作者不可或缺的工具。本文将详细解析快手矩阵管理系统的核心功能&#xff0c;探讨它如何帮助用户高效管理多平台、多账号的内容发布和互动。 快手矩阵管理系统概述 快…

14. Revit API: Selection(选择器)

前言 这篇写选择器&#xff0c;经过前面好些篇的讲解&#xff0c;总算把前置内容都写完了。 我们来回忆下都在哪里提到过… 算了&#xff0c;直接进入正文。 一、Selection 命名空间 选择器位于Autodesk.Revit.UI.Selection命名空间下&#xff0c;关系到交互嘛&#xff0c;所…

PostMan Error:Maximum response size reached

一、问题描述 用postman本地测试&#xff0c;restful api接口导出文件&#xff0c;文件大小为190M&#xff0c;服务没问题&#xff0c;总是在导出时&#xff0c;抛出&#xff1a;Error:Maximum response size reached。开始以为是服务相应文件过大或者相应时间超时导致的。其实…

数字流的秩

题目链接 数字流的秩 题目描述 注意点 x < 50000 解答思路 可以使用二叉搜索树存储出现的次数以及数字的出现次数&#xff0c;方便后续统计数字x的秩关键在于构建树的过程&#xff0c;如果树中已经有值为x的节点&#xff0c;需要将该节点对应的数字出现次数加1&#xf…

14-8 小型语言模型的兴起

过去几年&#xff0c;我们看到人工智能能力呈爆炸式增长&#xff0c;其中很大一部分是由大型语言模型 (LLM) 的进步推动的。GPT-3 等模型包含 1750 亿个参数&#xff0c;已经展示了生成类似人类的文本、回答问题、总结文档等能力。然而&#xff0c;虽然 LLM 的能力令人印象深刻…

Redis深度解析:核心数据类型与键操作全攻略

文章目录 前言redis数据类型string1. 设置单个字符串数据2.设置多个字符串类型的数据3.字符串拼接值4.根据键获取字符串的值5.根据多个键获取多个值6.自增自减7.获取字符串的长度8.比特流操作key操作a.查找键b.设置键值的过期时间c.查看键的有效期d.设置key的有效期e.判断键是否…

免杀笔记 ---> PE

本来是想先把Shellcode Loader给更新了的&#xff0c;但是涉及到一些PE相关的知识&#xff0c;所以就先把PE给更了&#xff0c;后面再把Shellcode Loader 给补上。 声明&#xff1a;本文章内容来自于B站小甲鱼 1.PE的结构 首先我们要讲一个PE文件&#xff0c;就得知道它的结构…