2023年全国研究生数学建模竞赛华为杯E题出血性脑卒中临床智能诊疗建模求解全过程文档及程序

2023年全国研究生数学建模竞赛华为杯

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

原题再现:

  一、 背景介绍
  出血性脑卒中指非外伤性脑实质内血管破裂引起的脑出血,占全部脑卒中发病率的10-15%。其病因复杂,通常因脑动脉瘤破裂、脑动脉异常等因素,导致血液从破裂的血管涌入脑组织,从而造成脑部机械性损伤,并引发一系列复杂的生理病理反应。出血性脑卒中起病急、进展快,预后较差,急性期内病死率高达45-50%,约80%的患者会遗留较严重的神经功能障碍,为社会及患者家庭带来沉重的健康和经济负担。因此,发掘出血性脑卒中的发病风险,整合影像学特征、患者临床信息及临床诊疗方案,精准预测患者预后,并据此优化临床决策具有重要的临床意义。
  出血性脑卒中后,血肿范围扩大是预后不良的重要危险因素之一。在出血发生后的短时间内,血肿范围可能因脑组织受损、炎症反应等因素逐渐扩大,导致颅内压迅速增加,从而引发神经功能进一步恶化,甚至危及患者生命。因此,监测和控制血肿的扩张是临床关注的重点之一。此外,血肿周围的水肿作为脑出血后继发性损伤的标志,在近年来引起了临床广泛关注。血肿周围的水肿可能导致脑组织受压,进而影响神经元功能,使脑组织进一步受损,进而加重患者神经功能损伤。综上所述,针对出血性脑卒中后的两个重要关键事件,即血肿扩张和血肿周围水肿的发生及发展,进行早期识别和预测对于改善患者预后、提升其生活质量具有重要意义。
  医学影像技术的飞速进步,为无创动态监测出血性脑卒中后脑组织损伤和演变提供了有力手段。近年来,迅速发展并广泛应用于医学领域的人工智能技术,为海量影像数据的深度挖掘和智能分析带来了全新机遇。期望能够基于本赛题提供的影像信息,联合患者个人信息、治疗方案和预后等数据,构建智能诊疗模型,明确导致出血性脑卒中预后不良的危险因素,实现精准个性化的疗效评估和预后预测。相信在不久的将来,相关研究成果及科学依据将能够进一步应用于临床实践,为改善出血性脑卒中患者预后作出贡献。
在这里插入图片描述

  二、 数据集介绍及建模目标
  赛题提供了160例(100例训练数据集+60例独立测试数据集)出血性脑卒中患者的个人史、疾病史、发病及治疗相关信息、多次重复的影像学检查(CT平扫)结果及患者预后评估,该部分信息可在“表1-患者列表及临床信息”中查询。如图1为脑出血患者CT平扫,红色为血肿区域,黄色为水肿区域。赛题提供影像学检查数据,包括各个时间点血肿/水肿的体积、位置、形状特征及灰度分布等信息。体积及位置信息可在“表2-患者影像信息血肿及水肿的体积及位置”中查询。形状及灰度分布信息可在“表3-患者影像信息血肿及水肿的形状及灰度分布”中查询。
  赛题目标:通过对真实临床数据的分析,研究出血性脑卒中患者血肿扩张风险、血肿周围水肿发生及演进规律,最终结合临床和影像信息,预测出血性脑卒中患者的临床预后。
  目标变量:
   发病48小时内是否发生血肿扩张:1是;0否。
   发病后90天 mRS:0-6,有序等级变量。其中mRS是评估卒中后患者功能状态的重要工具,详见附件2相关概念。
  临床信息:相关信息在“表1-患者列表及临床信息”中获取。
   ID:患者ID。
   训练数据集:sub001至sub100,共计100例。包含:患者信息、首次及所有随访影像数据及90天mRS。
   测试数据集1:sub101至sub130,共计30例。包含:患者信息、首次影像数据。不包含:随访影像数据及90天mRS。
   测试数据集2:sub131至sub160,共计30例。包含:患者信息、首次及所有随访影像数据。不包含:90天mRS。
   入院首次影像检查流水号:一个14位数字编码。前8位代表年月日,后6位为顺序编号(注意:不是时分秒)。流水号是影像检查的唯一编码,具体影像检查时间点可通过对应流水号在“附表1-检索表格-流水号vs时间”中检索。
   年龄: 岁
   性别:男/女
   脑出血前mRS评分:0-6,有序等级变量
   高血压病史:1是0否
   卒中病史:1是0否
   糖尿病史:1是0否
   房颤史:1是0否
   冠心病史:1是0否
   吸烟史:1是0否
   饮酒史:1是0否
  发病相关特征,共计2字段。
   血压:收缩压/舒张压。单位: 毫米汞柱
   发病到首次影像检查时间间隔:单位:小时
  治疗相关特征,共计7字段。
   脑室引流:1是0否
   止血治疗:1是0否
   降颅压治疗:1是0否
   降压治疗:1是0否
   镇静、镇痛治疗:1是0否
   止吐护胃:1是0否
   营养神经:1是0否
  影像相关特征,共计84字段/时间点。
   血肿及水肿的体积和位置信息在“表2-患者影像信息血肿及水肿的体积及位置”中获取,包含了:每个时间点血肿(Hemo)总体积及水肿(ED)总体积及不同位置的占比。体积占比定义:血肿/水肿在该位置的体积占总体积大小的比例,取值范围为:0-1。如:0代表该区域没有发生血肿/水肿,1则代表该患者所有血肿/水肿均发生在该区域,可通过占比换算出该位置绝对体积。本赛题采用通用模板,区分左右侧大脑前动脉(ACA_L, ACA_R),左右侧大脑中动脉(MCA_L,MCA_R),左右侧大脑后动脉(PCA_L,PCA_R),左右侧脑桥/延髓(Pons_Medulla_L,Pons_Medulla_R),左右侧小脑(Cerebellum_L,Cerebellum_R)共十个不同位置,具体位置和参考文献见附件2-相关概念。综上,总体积:2个字段(单位:10-3ml),位置:20个字段。在每个时间点,体积及位置特征共计22个字段。
   血肿及水肿的形状及灰度分布在“表3-患者影像信息血肿及水肿的形状及灰度分布”的两个不同标签页存放,可通过流水号检索对应数据。每个时间点血肿及水肿的形状及灰度特征,反映目标区域内体素信号强度的分布(17个字段)及三维形状的描述(14个字段),因此,在每个时间点,血肿及水肿的形状+灰度分布特征共62字段。
  注:重复影像数据根据临床真实情况提供,重复时间个体间可能存在差异。

  三、请建模回答如下问题
  1 血肿扩张风险相关因素探索建模。
  a) 请根据“表1”(字段:入院首次影像检查流水号,发病到首次影像检查时间间隔),“表2”(字段:各时间点流水号及对应的HM_volume),判断患者sub001至sub100发病后48小时内是否发生血肿扩张事件。
  结果填写规范:1是0否,填写位置:“表4”C字段(是否发生血肿扩张)。
  如发生血肿扩张事件,请同时记录血肿扩张发生时间。
  结果填写规范:如10.33小时,填写位置:“表4”D字段(血肿扩张时间)。
   是否发生血肿扩张可根据血肿体积前后变化,具体定义为:后续检查比首次检查绝对体积增加≥6 mL或相对体积增加≥33%。
  注:可通过流水号至“附表1-检索表格-流水号vs时间”中查询相应影像检查时间点,结合发病到首次影像时间间隔和后续影像检查时间间隔,判断当前影像检查是否在发病48小时内。
  b) 请以是否发生血肿扩张事件为目标变量,基于“表1” 前100例患者(sub001至sub100)的个人史,疾病史,发病相关(字段E至W)、“表2”中其影像检查结果(字段C至X)及“表3”其影像检查结果(字段C至AG,注:只可包含对应患者首次影像检查记录)等变量,构建模型预测所有患者(sub001至sub160)发生血肿扩张的概率。
  注:该问只可纳入患者首次影像检查信息。
  结果填写规范:记录预测事件发生概率(取值范围0-1,小数点后保留4位数);填写位置:“表4”E字段(血肿扩张预测概率)。

  2 血肿周围水肿的发生及进展建模,并探索治疗干预和水肿进展的关联关系。
  a) 请根据“表2”前100个患者(sub001至sub100)的水肿体积(ED_volume)和重复检查时间点,构建一条全体患者水肿体积随时间进展曲线(x轴:发病至影像检查时间,y轴:水肿体积,y=f(x)),计算前100个患者(sub001至sub100)真实值和所拟合曲线之间存在的残差。
  结果填写规范:记录残差,填写位置“表4”F字段(残差(全体))。
  b) 请探索患者水肿体积随时间进展模式的个体差异,构建不同人群(分亚组:3-5个)的水肿体积随时间进展曲线,并计算前100个患者(sub001至sub100)真实值和曲线间的残差。
  结果填写规范:记录残差,填写位置“表4”G字段(残差(亚组)),同时将所属亚组填写在H段(所属亚组)。
  c) 请分析不同治疗方法(“表1”字段Q至W)对水肿体积进展模式的影响。
  d) 请分析血肿体积、水肿体积及治疗方法(“表1”字段Q至W)三者之间的关系。

  3 出血性脑卒中患者预后预测及关键因素探索。
  a) 请根据前100个患者(sub001至sub100)个人史、疾病史、发病相关(“表1”字段E至W)及首次影像结果(表2,表3中相关字段)构建预测模型,预测患者(sub001至sub160)90天mRS评分。
  注:该问只可纳入患者首次影像检查信息。
  结果填写规范:记录预测mRS结果,0-6,有序等级变量。填写位置“表4”I字段(预测mRS(基于首次影像))。
  b) 根据前100个患者(sub001至sub100)所有已知临床、治疗(表1字段E到W)、表2及表3的影像(首次+随访)结果,预测所有含随访影像检查的患者(sub001至sub100,sub131至sub160)90天mRS评分。
  结果填写规范:记录预测mRS结果,0-6,有序等级变量。填写位置“表4”J字段(预测mRS)。
  c) 请分析出血性脑卒中患者的预后(90天mRS)和个人史、疾病史、治疗方法及影像特征(包括血肿/水肿体积、血肿/水肿位置、信号强度特征、形状特征)等关联关系,为临床相关决策提出建议。

整体求解过程概述(摘要)

  根据国家卫健委最新发布的有关脑卒中的统计数据显示,全球脑卒中患者人数超过 1亿,我国脑卒中患者的人数超过 2800 万,其发病率逐年增长且趋于年轻化,严重危害了我国人民的生命健康,为社会和患者带来沉重的经济压力。出血性脑卒中的发病率仅次于缺血性脑卒中,在脑卒中各亚型中位居第二。出血性脑卒中是由于非外伤性脑部血管破裂引起的颅内出血,从而导致脑部机械性损伤,并引发一系列脑部异常反应。因此,结合患者临床信息及影像学特征来研究出血性脑卒中的发病概率、演进规律,从而最终精准预测患者的临床预后,这对出血性脑卒中的临床研究具有重要的意义。
  针对问题一,对第一小问,对数据进行预处理,根据影像检查流水号建立多表之间的关联性。首先,依据血肿扩张原则:血肿体积比首次影像检查的绝对血肿体积增加>=6mL或者相对体积增加>=33%,用python遍历分析前100患者在48小时内是否发生血肿扩张。接着,对第二小问,表中数据进行整合,同时进行数据预处理和归一化,通过因子分析法对数据进行降维,提取主要特征变量,构建基于逻辑回归模型和随机森林的预测概率模型,通过评价指标及对比分析可得,最终选取了准确率较高的随机森林模型来预测160位患者血肿扩张的概率。
  针对问题二,通过数据预处理筛选出前100位患者的多次影像检查时间点及对应水肿体积的数据。对第一小问,选取局部加权回归LOESS(Epanechnikov内核、Cauchy内核)、七阶多项式、二元高斯拟合四种方式对前100位患者数据散点图进行拟合,通过RMSE、R𝟐、Adjusted_𝑹𝟐三个评价指标进行分析,最终选取二元高斯拟合患者水肿体积随时间进展曲线并计算残差;对第二小问,通过DBSCAN聚类和k-means聚类各分为四个亚组,选取一元高斯对各亚组进行曲线拟合并计算两种聚类方式对应的残差,最终选取k-means聚类的分亚组方式,通过可视化验证了分亚组分析的有效性;对第三小问,构建单个治疗方案与水肿体积进展一对一的分析模型,再利用线性混合效应模型定量分析多个治疗方案与水肿体积进展的一对多的模型,通过均方差、标准误差、显著性水平进行分析;对第四小问,利用皮尔逊(Pearson)对血肿体积和水肿体积的相关性进行分析,再利用线性混合效应模型对治疗方案与血肿体积进展进行分析,最后对治疗方案、水肿体积、血肿体积的关联性两两进行分析得出结论。
  针对问题三,对第一小问,首先对数据进行预处理和标准化,使用灰度关联分析、随机森林算法、极致梯度提升模型对变量进行筛选操作,对三种算法筛选出的变量两两取交再取并,筛选得到21个变量,并进行独立性检验,其次,以患者的21个变量为自变量,患者的90天mRS评分为因变量,构建了基于BP神经网络、梯度提升树(GBDT)、极致梯度提升(XGBoost)的预测模型,发现极致梯度提升算法模型预测的mRS评分更加接近于真实值,模型准确率更高。对第二小问,将患者的最后一次随访信息的有关变量进行数据整合,后续进行与第一小问相同的操作,筛选出 28 个特征变量,最终发现在考虑患者随访影像信息的条件下,BP神经网络对患者的mRS评分预测最为准确。对于第三小问,在前两问特征筛选的基础上,通过Pearson分析发现,患者的个人史等影像特征变量与mRS评分存在不同程度的相关性,对筛选得到的28个特征变量进行分析,最终分为四类关系,并对脑卒中患者的临床给出建议。

模型假设:

  在分析和建模过程中,根据出血性脑卒中临床数据做出以下假设:
  假设1:假设附件中提供的所有患者的影像数据全部真实有效;
  假设2:假设经预处理的数据可作为构建相关模型的数据集,所剔除的异常值数据对模型的影响忽略不计;
  假设3:假设探究水肿体积随时间进展时,其血肿体积变化、个人史,疾病史,治疗方案对其变化的影响可忽略不计;
  假设4:假设各变量之间存在一定的非线性关系;
  假设5:假设附件提供的160位患者数据能全面描述各变量之间的关系。

问题分析(太长了,这里就放一部分):

  针对问题一,根据要求构建血肿扩张判定模型,从“表 1”中提取患者入院首次影像检查流水号、发病到首次影像检查时间间隔两个字段,从“表 2”提取患者各时间点流水号以及在该随访时间的血肿体积HM_volume多个字段,并且使用“附表1”来查询每个流水号所对应影像检查时间。分析发病48小时内患者sub001至sub100血肿体积的变化情况,当后续每次随访时通过影像检查血肿体积,若此时血肿体积比首次影像检查的绝对血肿体积增加>=6mL 或者相对体积增加>=33%,则可以判断为该患者在48小时内发生血肿扩张,并记录该患者的血肿扩张时间,否则,标记为未发生血肿扩张。构建血肿扩张预测概率模型,根据题目要求,基于“表1”、“表2”、“表3”的特征变量,以相关特征变量为输入特征,是否发生血肿扩张事件为目标变量,构建模型预测160 个患者发生血肿扩张的概率。首先根据要求筛选表中特征变量(例如年龄、性别等),对数据进行归一化预处理,通过因子分析提取主要成分,通过构建逻辑回归和随机森林回归模型预测所有患者血肿扩张现象,通过评价指标进行分析比较,选取结果较好的随机森林为预测模型,结果以概率形式输出。
  针对问题二,通过数据预处理将前100位患者的多次影像检查时刻对应的时间与水肿体积的数据筛选出来,其中,自变量是影像检查时刻,因变量是水肿体积(ED_volume𝑖)。接着,绘制100 位患者数据的散点图,分别选取局部加权回归 LOESS(Epanechnikov 内核、 Cauchy内核)、七阶多项式、二元高斯拟合四种方式进行曲线拟合,通过RMSE、𝑅2、Adjusted_𝑅2三个评价指标进行评价。
  通过数据预处理将前100位患者的多次影像检查时刻对应的时间与水肿体积的数据筛选出来,其中,自变量是影像检查时刻,因变量是水肿体积(ED_volume𝑖)。接着,通过DBSCAN聚类和k-means聚类各分为四个亚组,选取2(a)问拟合效果最优的高斯曲线对各亚组进行拟合,通过RMSE、𝑅2、Adjusted_𝑅2三个评价指标对两种聚类方法的各亚组进行评价。最后,通过对比2(a)问前100位患者的残差与利用DBSCAN聚类和k-means聚类得到的残差进行对比分析及可视化,选取效果最佳的分亚组聚类方式对患者水肿体积随时间进展进行拟合分析。构建单个治疗方案与水肿体积进展一对一的分析模型,再利用线性混合效应模型定量分析治疗方案与水肿体积进展的一对多的模型,最后通过均方差、标准误差、显著性水平
进行评价与分析。
  针对问题三,首先根据题目要求,将表1中提取前100个患者(sub001至sub100)个人史、疾病史、发病相关等字段(即E~W),表2、表3提取有关首次影响结果的相关字段进行整合,对整合后的104个特征变量进行数据预处理(空值、异常值等筛选),并对其进行标准化处理。随后对预处理后的数据使用灰色关联分析、随机森林算法、极致梯度提升(XGBoost)算法进行特征变量的筛选,最后对三种算法筛选出的特征变量进行两两交集后取并集,筛选得到21个变量,并对这21个特征变量进行独立性检验,验证了各个变量间有较强的独立性,有利于模型的构建。
  随后根据题目要求,在前100位患者中,以提取到的21个重要的特征变量为自变量,患者的90天mRS评分为因变量,构建了基于首次影像患者的90天mRS评分模型。由于预测患者的90天mRS评分为一个分类问题,我们在基于分类模型的基础上,选取了BP神经网络算法、梯度提升树(GBDT)算法、极致梯度提升(XGBoost)三种算法进行构建模型,预测所有患者在90天的mRS评分。最后,经过对比模型和客观评价指标综合分析可得,XGBoost模型的性能指标在预测患者mRS评分上更为准确。

模型的建立与求解整体论文缩略图

在这里插入图片描述
在这里插入图片描述

全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可

程序代码:

部分程序代码如下:
from datetime import datetime, timedelta
import pandas as pd


class Constants:
    FIRST_CHECK_TIME = '入院首次检查时间点'
    FIRST_CHECK_NUM = '入院首次检查流水号'
    SECOND_CHECK_TIME = '随访1时间点'
    SECOND_CHECK_NUM = '随访1流水号'
    THIRD_CHECK_TIME = '随访2时间点'
    THIRD_CHECK_NUM = '随访2流水号'
    FOURTH_CHECK_TIME = '随访3时间点'
    FOURTH_CHECK_NUM = '随访3流水号'
    FIFTH_CHECK_TIME = '随访4时间点'
    FIFTH_CHECK_NUM = '随访4流水号'
    SIXTH_CHECK_TIME = '随访5时间点'
    SIXTH_CHECK_NUM = '随访5流水号'
    SEVENTH_CHECK_TIME = '随访6时间点'
    SEVENTH_CHECK_NUM = '随访6流水号'
    EIGHTH_CHECK_TIME = '随访7时间点'
    EIGHTH_CHECK_NUM = '随访7流水号'
    NINTH_CHECK_TIME = '随访8时间点'
    NINTH_CHECK_NUM = '随访8流水号'
    TENTH_CHECK_TIME = '随访9时间点'
    TENTH_CHECK_NUM = '随访9流水号'
    ELEVENTH_CHECK_TIME = '随访10时间点'
    ELEVENTH_CHECK_NUM = '随访10流水号'
    TWELFTH_CHECK_TIME = '随访11时间点'
    TWELFTH_CHECK_NUM = '随访11流水号'
    THIRTEENTH_CHECK_TIME = '随访12时间点'
    THIRTEENTH_CHECK_NUM = '随访12流水号'
    FOURTEENTH_CHECK_TIME = '随访13时间点'
    FOURTEENTH_CHECK_NUM = '随访13流水号'
    CONSTANTS_LIST = [
        FIRST_CHECK_TIME,
        FIRST_CHECK_NUM,
        SECOND_CHECK_TIME,
        SECOND_CHECK_NUM,
        THIRD_CHECK_TIME,
        THIRD_CHECK_NUM,
        FOURTH_CHECK_TIME,
        FOURTH_CHECK_NUM,
        FIFTH_CHECK_TIME,
        FIFTH_CHECK_NUM,
        SIXTH_CHECK_TIME,
        SIXTH_CHECK_NUM,
        SEVENTH_CHECK_TIME,
        SEVENTH_CHECK_NUM,
        EIGHTH_CHECK_TIME,
        EIGHTH_CHECK_NUM,
        NINTH_CHECK_TIME,
          NINTH_CHECK_NUM,
        TENTH_CHECK_TIME,
        TENTH_CHECK_NUM,
        ELEVENTH_CHECK_TIME,
        ELEVENTH_CHECK_NUM,
        TWELFTH_CHECK_TIME,
        TWELFTH_CHECK_NUM,
        THIRTEENTH_CHECK_TIME,
        THIRTEENTH_CHECK_NUM,
        FOURTEENTH_CHECK_TIME,
        FOURTEENTH_CHECK_NUM
    ]


data_info = pd.read_excel('表1-患者列表及临床信息.xlsx')
data_v = pd.read_excel('表2-患者影像信息血肿及水肿的体积及位置.xlsx')
data_v = data_v.filter(regex='ID|HM_volume|流水号')
data_v = data_v.replace(float('nan'), '空值')

data_time_info = pd.read_excel('附表1-检索表格-流水号vs时间.xlsx').filter(regex='时间点|流水号')
id_list = []
number_list = []
hm_volume_list = []
time_to_fb_diff_list = []
# # 检查时间点和流水号处理
for index, row in data_time_info.iterrows():
    num_to_hm_df = data_v.iloc[index]
    columns = data_v.columns
    num_to_hm_dict = {}
    fb_time_to_first_diff = data_info.loc[index]['发病到首次影像检查时间间隔']
    first_check_time = row[Constants.FIRST_CHECK_TIME]
    first_check_time = datetime.strptime(str(first_check_time), "%Y-%m-%d %H:%M:%S")
    hm_volume_blag = False
    for i in range(0, len(columns) - 1, 2):
        number = row[i + 1]
        hm = num_to_hm_df[columns[i + 2]]
        num_to_hm_dict[number] = hm
        if i == 0:
            time_to_fb_diff = fb_time_to_first_diff
        else:
            cur_time = row[i]
            print(cur_time)
            if str(cur_time).__contains__(':'):
                cur_time = datetime.strptime(str(cur_time), "%Y-%m-%d %H:%M:%S")
                time_to_fb_diff = round((cur_time - first_check_time).total_seconds() / 3600 + fb_time_to_first_diff, 1)
            else:
                if str(hm) == '空值':
                    hm_volume_blag = True
        if hm_volume_blag:
            break
        number_list.append(number)
        id_list.append(num_to_hm_df['ID'])
        hm_volume_list.append(hm)
        time_to_fb_diff_list.append(time_to_fb_diff)
        print(num_to_hm_df['ID'], number, hm, time_to_fb_diff, time_to_fb_diff)
print(len(id_list), len(number_list), len(hm_volume_list), len(time_to_fb_diff_list))
df = pd.DataFrame({'ID': id_list, '流水号': number_list, 'HM_volume': hm_volume_list, '距离发病时间': time_to_fb_diff_list})
df.to_csv('data_HM_volume.csv', index=None)
import pandas as pd
import numpy as np
from sklearn.linear_model import LinearRegression, Ridge, Lasso, RANSACRegressor
from sklearn.preprocessing import PolynomialFeatures


def cal_percent(first_HM_volume, predicted_HM_volume):
    for i in range(len(predicted_HM_volume)):
        if ((predicted_HM_volume[i] - first_HM_volume) / first_HM_volume) * 100 > 33.3:
            return i


id_list = []
is_greater_than_33_3_list = []
surpass_33_time = []
data_all = pd.read_csv('data_HM_volume.csv')


def cal_res(data):
    for group_id, group_data in data.groupby('ID'):
        print(group_data)
        known_time = group_data['距离发病时间'].to_numpy().reshape(-1, 1)
        known_HM_volume = group_data['HM_volume'].astype(float).to_numpy()
        first_HM_volume = float(group_data.iloc[0]['HM_volume'])
        # 多项式特征转换
        poly_features = PolynomialFeatures(degree=3)
        x_poly = poly_features.fit_transform(known_time)
        regression_model = LinearRegression()
        regression_model.fit(x_poly, known_HM_volume)
        predicted_time = np.arange(group_data.iloc[0]['距离发病时间'], 47, 0.1).reshape(-1, 1)  # 生成48个小时内每个0.1小时的时间,转换为二维数组
        x_test_poly = poly_features.transform(predicted_time)

        predicted_HM_volume = regression_model.predict(x_test_poly)
        HM_threshold = max(predicted_HM_volume)
        # 计算百分比增长率
        percentage_growth = ((HM_threshold - first_HM_volume) / first_HM_volume) * 100

        # 判断是否大于33.3%
        if percentage_growth > 33.3:
            is_greater_than_33_3 = 1
            index = cal_percent(first_HM_volume, predicted_HM_volume)
            surpass_33_time.append(predicted_time[index][0])
            print(group_data.iloc[0]['ID'], first_HM_volume, HM_threshold, percentage_growth, is_greater_than_33_3,
                  predicted_time[index][0])

        else:
            is_greater_than_33_3 = 0
            surpass_33_time.append('')

        id_list.append(group_data.iloc[0]['ID'])
        is_greater_than_33_3_list.append(is_greater_than_33_3)
    df = pd.DataFrame({'ID': id_list, '是否发生血肿扩张': is_greater_than_33_3_list, '血肿扩张时间': surpass_33_time})
    return df


if __name__ == '__main__':
  print(data_all[541:])

    # df_1 = cal_res(data_all[:450])

    df_2 = cal_res(data_all[541:])
    print(df_2)
    # df_1.to_csv('是否发生血肿扩张及扩张时间_100.csv', index=None)
    df_2.to_csv('是否发生血肿扩张及扩张时间_131.csv', index=None)
全部论文请见下方“ 只会建模 QQ名片” 点击QQ名片即可
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值