出血性脑卒中临床智能诊疗建模

出血性脑卒中是一种常见但危险的脑血管疾病,其治疗和管理需要及时而准确的诊断以及有效的预测模型。本研究旨在通过分析入院患者的临床数据和影像学特征,建立数学模型,评估患者的血肿扩张风险、血肿周围水肿进展以及长期预后。

针对问题一,是关于血肿扩张的计算以及概率预测问题。第一个小问要求计算患者是否发生血肿扩张以及扩张时间。根据所给数据,首先计算出患者的发病时间,再在发病时间48小时后的时间里根据血肿体积的相对体积变化或者绝对体积变化,确定患者是否在发病48小时内发生了血肿扩张。用血肿扩张最后的影像时间减去发病时间得到血肿扩张的时间。第二个小问要求根据所给的数据预测所有的160名患者血肿扩张的概率。由于样本过于不平衡,我们首先对样本使用SMOTE进行过采样。我们使用了五个可用于本题的模型分别是XGBoost 、MLP 、LightGBM、SVC、LR, 使用了准确率、召回率、精确度、F1以及AUC指标对模型进行了评估,并绘制出了ROC曲线,结果显示XGBoost模型效果最好。最后我们使用XGBoost模型对全部血肿扩张概率进行了预测。

针对问题二,首先根据流水号将每位病人每次每次检查的水肿体积数据提取出,并且计算出对应的时间横轴,然后使用分段形式的多段式拟合方法来拟合,根据不同阶数和不同分段点数来拟合出较为合理的模型,然后得出残差。先用主成分分析方法对整理完的患者数据进行处理,然后再利用手肘法对其分析聚类个数,得到聚类个数之后使用K- Means算法将所有患者进行分类,得到不同的亚组,再整合完分类之后的病人数据与上小题得到的模型进行拟合预测,从而得到残差。将所有参与多次检查的病人水肿体积变化整理成一个矩阵,判断每位患者水肿体积情况是否恶化,再与每位患者接受的治疗方式进行灰色关联分析,得到治疗方式的对显著性顺序。对于第四小问,采用多元线性回归模型,完成基于治疗方法完成与否的分布统计的数据探索后,建立不同治疗方法对于患者血肿体积与水肿体积影响的关系模型,得出治疗方法中的脑室引流和降颅压治疗对平均血肿体积具有显著的正相关关系,而降颅压治疗对平均水肿体积也有显著的正相关关系的结论。

针对问题三,我们利用方差筛选法和互信息法结合、距离相关系数法和递归特征消除法结合,然后利用这两种方法对所有患者的个人史、疾病史、发病相关及影像结果进行特征筛选,然后将得到的主要特征分别带入随机森林算法、支持向量机算法、XGBoost 算法、LightGBM算法中,并且我们使用网格搜索以及随机搜索来对其进行超参数调优,结合交叉验证训练从而得到十六个不同的模型,再根据指标挑选出拟合度高的模型,然后通过集成学习投票的方式对mRS评分等级进行预测。为解决第三小问,将任务划分为三个子问题:个人史、疾病史和治疗方法对于预后的关联性分析、不同位置的血肿与水肿体积对于预后的关联性分析和信号强度特征与形状特征对于预后的关联性分析。针

对各子问题的变量特征,分别采用 Fisher 精确检验、Levene 检验、有序 Logistics 回归模型和单因素方差分析来探究患者的预后(90天mRS) 和个人史、疾病史、治疗方法及影像特征的关联关系。最后根据建立的模型得到了各变量间的关联关系,并参考相关临床诊疗方案和案例,对出血性脑卒中患者预后提出了有关疾病史重要性和影像特征价值等针对性建议。

本文的研究不仅可以为医疗决策提供新的见解,还可以为临床实践和未来的出血性脑卒中研究提供宝贵的数据和方法学范例。同时也让将有助于改善出血性脑卒中患者的治疗和管理方案,提高他们的康复前景和生活质量。

关键词: XGBoost, 随机森林, 分段多项式拟合, 主成分分析, K- Means聚类, 灰色关联,多元线性回归,递归特征消除法,支持向量机,网格搜索,Fisher精确检验, Levene 检验, 单因素方差分析

一、问题重述

1.1 问题背景

脑卒中,又叫做脑中风,是一种常见的脑血管疾病,通常是因为脑部血液供应中断或者血管破裂造成的,我国是脑卒中高发国家之一。脑卒中中的出血性脑卒中占据了病例的10%-15%,其致死率和致残率非常高。出血性脑卒中通常是由脑动脉瘤破裂或脑动脉异常等因素引起,患者通常会有发病急、病情危重、免疫力特别低,以及肢体活动功能上的障碍等症状。不仅对患者的健康造成了巨大的威胁,而且对患者家庭的生活和经济造成了很大的负担。[1]

为了帮助医生更好的制定治疗方案,减轻患者的痛苦,提高患者的生活质量,精准预测出出血性脑卒中患者的病情发展至关重要。得益于医学影像技术和人工智能的快速发展,为实现预测出血性脑中卒病情预测提供了新的可能。[2]

本文的研究目的是基于提供的真实临床数据,探索出出血性脑中卒患者的血肿扩展风险,水肿发生和进展规律以及治疗干预水肿进展的关联因素,出血性脑卒中患者的预后预测以及关键因素。

本文将利用了一些人工智能的方法,对真实的临床数据进行了分析预测,旨在帮助医生更精确地评估出出血性脑卒中患者的风险以及预后,继而改善患者的治疗和康复。我们希望本文的工作能够为未来的临床决策提供重要的决策支持,并为出血性脑卒中的研究以及治疗方案提供有用的科学依据。

1.2 问题提出

问题一:血肿扩张风险建模

a) 根据所提供的相关数据,在前100例出血性脑卒中患者(sub001至sub100)中,判断是否发生了血肿扩张,定义标准为后续检查相对体积增加≥33%或绝对体积增加≥6mL,如果发生血肿扩张事件的话,记录下血肿扩张的时间。

b) 基于前100例患者的个人史、疾病史、发病治疗相关信息以及首次影像检查结果,构建模型以预测所有患者是否会发生血肿扩张事件。

问题二:血肿周围水肿发生及进展建模

a) 利用前100例患者的水肿体积和重复检查时间点数据,构建全体患者水肿体积随时间的进展曲线,最后需要计算前100例患者的真实值与拟合曲线之间的残差。

b) 探索不同患者群体(3-5个亚组)的水肿体积随时间的个体差异,构建每个亚组的水肿体积进展曲线,并计算前100例患者的真实值与各曲线之间的残差,同时提供亚组的标识。

c) 从所给定的数据中,分析不同治疗方法对水肿体积进展模式的影响。

d) 建模分析出分析血肿体积、水肿体积和治疗方法之间的关系。

问题三:出血性脑卒中患者预后预测及因素分析

a) 基于前100例患者的个人史、疾病史、发病相关信息以及首次影像结果,建立模型来预测所有患者的90天mRS评分。

b) 利用前100例患者的临床、治疗、首次影像以及随访影像结果,预测所有含有随访数据的患者(sub001至sub100,sub131至sub160)的90天mRS评分。

c) 分析出血性脑卒中患者的预后(90天mRS评分) 与个人史、疾病史、治疗方法和影像特征之间的关联,并提出一些临床决策的建议。

二、问题分析

问题一:

问题一主要是根据已知的数据计算是否发生血肿扩展,再根据是否发生血肿扩展的计算结果以及相关影响因素建立数学模型预测数据表中的所有患者发生血肿扩张的概率。由题目可知,血肿扩张是根据血肿体积的变化量决定的。如果后续的血肿体积比首次检查的血肿体积相对体积不小于33%或者体积增加的量不小于6毫升,则认定为发生血肿扩张。血肿扩张判定公式如下:

|---|
| |

|----------------------------------------------------------------------------|
| |

|----------------------------------------------------------------------------|
| |

|---|---|
| |
| | |

其中1代表患者发生了血肿扩张,反之,0代表患者没有发生血肿扩张。HM volume.48h 表示发病后48小时内的一次HM volume值, HM volume,初始表示首次影像检查的HM volume值。△HMvolume表示发病后48小时内的一次HM volume值比首次影像检查的HM volume值的增量。

针对第一个小问,首先需要进行数据表的数据合并,再根据题目所给的血肿扩展的定义计算判断患者是否发生了血肿扩张,由附件表格1中对应的时间计算确定当前的检查是在发病48小时内,最后输出是否发生了血肿扩张以及发生的时间。针对第二个小问。

针对第二个小问,需要根据3个表的相关数据建立一个预测模型,预测出所有患者发生血肿扩张的概率。首先需要进行数据清洗,处理好缺失值和异常值,对分类变量进行独热编码,对连续变量进行归一化处理。在处理好数据之后,我们发现样本非常不平衡,所以用SMOTE 进行过采样在进行模型的训练。预测模型非常多,选择LGBM、XGB、SVC、MLP和LR常见的预测模型进行实验对比,以准确率、召回率、精确度、F1分数、AUC 作为评价指标。选择表现最好的模型进行训练,最后预测出结果。

问题二:

针对第一小问,整合所有患者水肿体积与时间进展的散点图之后,发现数据较为复杂,采用分段多项式拟合的方法,对散点图进行拟合,并且调整不同的分段点数和多项式拟合阶数来测试不同的参数带来的拟合效果,然后挑选出最好的一个来进行预测,并计算出所需的残差值。

针对第二小问,使用主成分分析法来进一步处理数据之后,然后通过手肘法来确定聚类个数,知晓聚类个数之后,使用K- Means算法对所有患者进行聚类分析,然后分成不同的亚组,利用第一小问得到的模型来分别对每个亚组进行预测计算残差值。

针对第三小问,计算出当前检查出的水肿体积与前一次检查水肿体积的差异值,可以得到患者水肿体积变化的情况,然后根据患者水肿体积的变化情况来对其身体状况进行统计,然后根据结果与患者接受的治疗方法进行灰色关联分析得到最后的治疗方式的显著性作用排序。

针对第四小问,需要参照表1和表2的数据建立相关性分析模型,探究不同的治疗方法对于患者脑部血肿体积与水肿体积之间的关系。对此,可以在先对数据分布做出统计后,绘制出相应的图表,得到数据探索的初步方向。再结合多元线性回归模型,更严谨地得到治疗方法对于血肿体积和水肿体积的回归方程以及各治疗方法自变量的显著性结果。

问题三:

针对第一、二小问,可以看出这是一个高维的复杂分类预测问题,使用传统的机器学习算法需要我们进一步对数据优化,首先采用不同的特征筛选方法对数据集进行处理,然后将划分出的主要特征作为变量,采用经典的随机森林算法、支持向量机算法、XGBoost算法、LightGBM 算法来作为主要算法,然后使用随机搜索和网格搜索作为超参数调优的策略,最终训练出主要的几个模型,预测并对分类结果进行投票,从而得到最终的结果。

针对第三小问,需要划分为多个子问题,以便于高效准确地解决。对于各子问题,需要做大量的数据处理,包括变量的提取、二元数据类型的转换以及对血压、年龄等连续变量的分类。之后采用多种检验方法对特征不同的数据进行检验,包括对大量的分布统计数据进行单因素方差分析。最后根据90mRs的有序性建立有序 Logistics回归模型,分析出患者预后与个人史、疾病史、治疗方法和影像特征之间的相关性,参照相关临床的诊疗信息为今后医生在脑卒中临床决策提出针对性建议。

三、模型假设与符号说明

3.1 模型基本假设

(1) 提供的所有数据均为真实有效,符合实际情况。

(2) 所有患者的mRS评分等级只受到出血性脑卒中的影响。

(3) 默认除了提供的数据之外的因素不会影响患者病情。

(4) 在使用有序 Logistics回归模型中,预后是具有从低到高程度的有序性。

(5) 在使用梯度提升树模型(XGBoost和LightGBM)假设特征是独立同分布的,这是它们能够逐步构建树的基础。

3.2 符号说明

表1 符号说明

|-------|----------------|----------|
| 序号 | 符号 | 含义 |
| 1 | NP | 正常血压 |
| 2 | NH | 正常高压 |
| 3 | H1 | 轻度高血压 |
| 4 | H2 | 中度高血压 |
| 5 | x | 归一化矩阵 |
| 6 | ACC | 准确率 |
| 7 | R | 召回率 |
| 8 | P | 精确率 |
| 9 | y_i(x) | 多项式拟合第i段 |
| 10 | RSS | 最小化残差平方和 |
| 11 | Yr | 降维数据点 |
| 12 | DBI | 簇间距离之比 |
| 13 | CH | 类内的紧密度 |
| 14 15 | I(X;Y) H(X|Y) | 互信息 条件熵 |

四、数据预处理

4.1 数据清洗

数据采集之后,往往会出现各种问题,比如缺失值、异常值等。这时候就需要进行数据清洗,将不符合要求的数据剔除或者进行填充。具体来说,数据清洗包括以下几个方面:

在给定的数据集中,往往会出现很多数据上的问题,比如缺失值、异常值等。所有,我们首先需要做的就是数据清洗,将错误的数据去除或者就行填充。数据清洗包括如下两个方面:

(1) 处理缺失值

使用 python中的 pandas库对所有数据进行分析,并没有发现缺失值,因此不用处理缺失值。

(2) 处理异常值

附件1中患者 sub074的首次影像的流水号为20180719000630,但是在表2中的首次影像流水号则为 20180719000020, 而在表 2 中 sub074的随访1流水号才为20180719000630,所以最正确的做法是将件1中患者sub074的首次影像的流水号改正为20180719000020

4.2 数据转换

(1) 独热编码

独热编码,又被称为一位有效编码,是一种用来对一组N个状态进行编码的方法。它利用N位状态寄存器,每个状态都有自己独立的寄存器位,并且在任何给定时刻,只有一位是有效的,即只有一位的值为1,而其他位都为0。这种编码方法通常用于表示参数,使用0和1来表示不同的状态。在机器学习领域,也引入了" one- hot 向量"的概念,它是一个在任意维度的向量中,只有一个维度的值为1,而其他维度的值都为0。将分类数据转换成 one- hot向量的过程通常被称为 one- hot编码。在统计学中,虚拟变量也代表了类似的概念。

我们可以将性别这一指标进行独热编码。在机器学习中,特征之间的距离或相似度计算对于回归、分类、聚类等算法至关重要。通常,我们使用欧式空间的相似度计算或余弦相似性来衡量特征之间的相似程度。然而,对于离散特征,常规的计算方法存在一些限制,因为它们基于欧式空间的假设。为了解决这个问题,我们可以使用独热编码将离散特征的取值映射到欧式空间中的点。这种编码方式使得离散特征之间的距离计算更加合理,从而有助于更准确地进行分类和其他机器学习任务。160例患者男女比例饼图如下所示:

这几个模型采样后的训练集和测试集 Receiver Operating Characteristic(ROC)曲线以及对比如下几个图所示:

发生血肿扩张以及发生时间的分布图如下所示:

应用XGBoost模型对本小问的数据进行分析预测。预测所有患者的血肿扩张的概率见答案文件所示。所有患者发生血肿扩张的概率分布如下图所示:

从分析结果可知,通过使用XGBoost模型,我们可以根据患者的个人史、疾病史、发病及治疗相关史和影像检查结果预测出患者发生血肿扩张的概率。对XGBoost模型的准确率进行了检测,该模型准确率高,可以应用于临床实践,为医者和患者提供准确的血肿扩张预测,从而可以在发生血肿扩张前进行干预,减轻医生的工作量以及患者的痛苦。

代码

xres, yres= sm. fit _ resample( train. values, label)

xtrain _ res, xvalid _ res, ytrain _ res, yvalid _ re s = train _ test _ split( xres, yres,

random _ state=400, test _ size=0.2)

def plot _ roc( models, names, dataset _ type=' train'):

plt. figure( figsize=(10,8), dpi=80, facecolor='w')

plt. xlim((-0.01, 1.02))

plt. ylim((-0.01,1.02))

plt. xticks( np. arange(0,1.1,0.1))

plt. yticks( np. arange(0,1.1,0.1))

line _ colors =['m']

if dataset _ type ==' test':

for model, name, color in zip( models, names, line _ colors):

ytest _ prob= model. predict _ proba( xvalid _ res)[:, 1]

fpr, tpr,_= roc _ curve( yvalid _ res, ytest _ prob)

plt. plot( fpr, tpr, color= color, lw=2, label=f'{ name}', linewidth=3)

else:

for model, name, color in zip( models, names, line _ colors):

ytrain _ prob= model. predict _ proba( xtrain _ res)[:,1]

fpr, tpr,_= roc _ curve( ytrain _ res, ytrain _ prob)

plt. plot( fpr, tpr, color= color, lw=2, label=f'{ name}', linewidth=3)

plt. legend( loc=' upper left', fontsize=15)

plt. rcParams[' font. sans- serif']=[' Microsoft YaHei']

plt. xlabel("假阳率", fontsize=18, fontweight=' bold')

plt. ylabel("召回率", fontsize=18, fontweight=' bold')

plt. tick _ params( labelsize=23)

plt. title('受试者工作特征曲线', fontsize=20, fontweight=' bold')

plt. savefig(f'问题1\\ roc _ auc({ dataset _ type}). png', dpi=500)

plt. show()

plot _ roc([ model[4]], ['LR'],' test')

plot _ roc([ model[4]], ['LR'], ' train')

读取数据

data= pd. read excel('水肿体积随时间. xlsx') # X= data['时间进程']

Y= data['水肿体积']

绘制散点图

plt. figure( dpi=600)

plt. scatter( data["时间进程'], data['水肿体积'],s=5)

添加标题和轴标签

plt. title(' Scatter Plot')

plt. xlabel('X')

plt. ylabel('Y')

plt. xlim(0,400)

显示图形

plt. show()

import numpy as np

import matplotlib. pyplot as plt

输入数据

x=x

y=Y

combined = list( zip(x,y))

combined sorted= sorted( combined, key= lambda tup: tup[0])

获取排序后的 x 和 y

x=[tup[0] for tup in combined sorted]

y=[tup[1] for tup in combined sorted]

分段点的位置

breakpoints = np. arange(0, len(x), 10)

分段拟合

coefficients=[]

for i in range( len( breakpoints)-1):

segment x=x[ breakpoints[i]: breakpoints[i+1]]

segment y=y[ breakpoints[i]: breakpoints[i+1]]

低阶多项式拟合

p= np. polyfit( segment x, segment y,4)

将每个分段的拟合系数存储在数组中

相关推荐
冬天的枫树6 分钟前
人工智能原理实验一:知识的表示与推理实验
c++·人工智能
BH0425090921 分钟前
深度学习基础(2024-10-30更新到tensor相关)
人工智能·深度学习
QQ_77813297421 分钟前
关于深度学习方向学习的一些建议
人工智能·深度学习·学习
哦哦~92139 分钟前
Fluent和深度学习算法驱动的流体力学计算与应用
人工智能·深度学习·学习·算法
板子小哥1 小时前
LuatOS学习指南:开启物联网开发之旅
运维·服务器·开发语言·人工智能·物联网·junit·lua
子午2 小时前
【果蔬识别】Python+卷积神经网络算法+深度学习+人工智能+机器学习+TensorFlow+计算机课设项目+算法模型
人工智能·python·深度学习
coldstarry2 小时前
sheng的学习笔记-AI基础-激活函数
深度学习·机器学习
z千鑫2 小时前
【AI开源项目】Botpress - 开源智能聊天机器人平台及其部署方案
人工智能·python·机器人·开源·自动化·oneapi
DisonTangor2 小时前
Flux 开源替代,他来了——Liberflux
人工智能·ai作画·开源
爱思德学术-IAAST2 小时前
中欧科学家论坛暨第六届人工智能与先进制造国际会议(AIAM 2024)在德国法兰克福成功举办,两百余名中外科学家共襄盛举
人工智能·学习·制造·学习方法·学术