Python预测二型糖尿病:逻辑回归、XGBoost、CNN、随机森林及BP神经网络融合加权线性回归细化变量及PCA降维创新

全文链接:https://tecdat.cn/?p=43572

原文出处:拓端数据部落公众号

分析师:Yue Lan

封面

在当今慢性病防控领域,二型糖尿病的早期预测成为提升公共健康水平的关键一环。随着医疗数据采集技术的进步,基础信息、生活习惯、心电图以及血液蛋白等多源数据的整合应用,为疾病预测提供了新的可能。
我们团队在为医疗健康机构提供咨询服务时发现,单一数据源往往难以全面捕捉疾病风险特征。比如仅靠生活习惯数据,预测准确率常停留在 70% 左右;而加入心电图等生理信号后,模型性能能显著提升。基于这个实际需求,我们开展了多模态数据融合预测二型糖尿病的研究。
研究通过三个递进式任务展开:先用基础信息和生活习惯数据构建预测模型,再加入处理后的心电图数据提升性能,最后融入血液蛋白数据实现发病时间预测。过程中解决了数据缺失、噪声干扰、特征冗余等实际问题,提出的加权线性回归细化变量和类间 PCA 降维等方法,有效提升了模型的准确性和稳定性。


相关的专题项目数据代码文件已分享在交流社群,阅读原文进群和 600 + 行业人士共同交流和成长。

技术路线流程图

数据与方法

数据来源

研究整合了四类数据:基础信息(年龄、性别等)、生活习惯(吸烟、饮酒等)、12 导联心电图(ECG)以及血液蛋白(NMR)数据,总样本量 4000 例,含健康人群和二型糖尿病患者。

关键方法

  1. 数据预处理
  • 缺失值处理:对吸烟相关等缺失率高的变量,用加权线性回归融合后细化原离散变量值;对 NMR 数据,用随机森林基于其他数据预测填补缺失值。

  • 降噪处理:对心电图数据,依次用巴特沃斯滤波器去除基线漂移和肌电干扰,用 IIR 陷波滤波器去除工频干扰,最后用离散小波变换处理残留噪声。

  • 降维处理:对分类后的变量进行类间 PCA 降维,减少特征冗余。

  1. 模型构建
  • 逻辑回归:用于二分类任务,公式为 P=1/(1+e^-(w0 + w1x1 +…+ wnxn)),其中 P 为患病概率,w 为权重。

  • XGBoost:集成学习模型,通过多棵决策树集成提升性能。

  • 卷积神经网络(CNN):用于提取心电图图像特征,含卷积层、池化层和全连接层。

  • 随机森林:由多棵决策树组成,用于预测 NMR 缺失值。

  • BP 神经网络:用于预测发病时间,通过前向传播和反向传播优化参数。

实现过程与结果

子任务 1:基础信息与生活习惯数据预测

处理生活习惯数据时,以吸烟情况为例,提取重度吸烟者样本,用加权线性回归融合相关变量:

 
  1.  
    # 加权线性回归融合吸烟相关变量
  2.  
    import numpy as np
  3.  
    from sklearn.linear_model import LinearRegression
  4.  
     
  5.  
    # 准备数据,x为吸烟相关变量,y为目标变量
  6.  
    x = np.array([[10, 2, 30, 5], [15, 3, 25, 4], [8, 1, 35, 6]]) # 示例数据
  7.  
    y = np.array([0.2, 0.5, 0.1])
  8.  
    weights = np.array([0.3, 0.4, 0.3]) # 权重
  9.  
     
  10.  
    # 加权处理
  11.  
    x_weighted = x * weights[:, np.newaxis]
  12.  
    model = LinearRegression()
  13.  
    model.fit(x_weighted, y)
  14.  
    fused_feature = model.predict(x_weighted) # 融合后的特征
 
 

融合后与原吸烟史变量结合,细化离散值。经 PCA 降维后,分别用逻辑回归和 XGBoost 建模,结果显示逻辑回归性能更优,AUROC 为 0.782。

子任务 2:加入心电图数据预测

对心电图数据进行降噪处理,处理前后对比图如下:
原始心电图:

去除基线漂移后:

去除工频干扰后:

去除肌电干扰后:

小波去噪后:

用 CNN 提取特征后与其他数据融合,代码片段如下:

 
  1.  
    # CNN提取心电图特征
  2.  
    from tensorflow.keras.models import Sequential
  3.  
    from tensorflow.keras.layers import Conv2D, MaxPooling2D, Flatten
  4.  
     
  5.  
    # 构建模型
  6.  
    model = Sequential()
  7.  
    model.add(Conv2D(16, (3, 3), activation='relu', input_shape=(224, 224, 1)))
  8.  
    model.add(MaxPooling2D((2, 2)))
  9.  
    model.add(Conv2D(32, (3, 3), activation='relu'))
  10.  
    model.add(MaxPooling2D((2, 2)))
  11.  
    model.add(Flatten())
  12.  
     
  13.  
    # 提取特征
  14.  
    features = model.predict(ecg_images) # ecg_images为处理后的心电图图像
 
 

融合后用 XGBoost 建模,AUROC 达 0.97,准确率 0.94,优于逻辑回归。


相关文章

相关文章

Python糖尿病数据分析:深度学习、逻辑回归、K近邻、决策树、随机森林、支持向量机及模型优化训练评估选择
全文链接:https://tecdat.cn/?p=39864


子任务 3:加入 NMR 数据预测发病时间

用随机森林填补 NMR 缺失值后,经 PCA 降维,与其他数据融合,用 BP 神经网络预测发病年龄。模型训练损失和测试损失曲线如下:
训练损失曲线:

测试损失曲线:

发病年龄分布:

结果显示,模型 R² 为 0.68,PCC 为 0.79,能较好预测发病时间。

创新点

  1. 对缺失率高的变量,用加权线性回归融合后细化原离散值,而非直接剔除,保留更多信息。

  2. 对分类后的变量进行类间 PCA 降维,针对性处理不同类型数据,提升降维效果。

  3. 综合多种滤波方法处理心电图噪声,提升数据质量。

  4. 用随机森林基于已有数据预测 NMR 缺失值,解决高缺失率问题。

应用价值

研究提出的多模态数据融合方法,能有效提升二型糖尿病预测准确性,为早期干预提供科学依据。模型可集成到医疗信息系统,辅助医生进行风险评估,具有实际应用意义。

封面

 

分析师

在此对 Yue Lan 对本文所作的贡献表示诚挚感谢,她在广东财经大学完成了数据科学与大数据技术专业的学习,专注数据科学领域。擅长 Python、R 语言、SQL,在数据处理、机器学习、深度学习等方面具备扎实的专业能力。Yue Lan 在数据整合分析、算法模型构建及结果解读方面拥有丰富的实践经验,能够精准把握多模态医疗数据的处理要点,为本文的研究思路优化和技术实现提供了重要支持,有效提升了研究的科学性与实用性。

posted @ 2025-08-27 10:23  拓端tecdat  阅读(13)  评论(0)    收藏  举报