机器学习在脑卒中预测中的应用:不平衡数据集处理方法详解
目录
引言
- 脑卒中的全球影响
- 机器学习在医疗预测中的挑战
- 类别不平衡问题的核心痛点
数据预处理与特征选择
- 数据来源与清洗
- 缺失值处理方法
- 类别特征编码
- 特征选择技术
处理类别不平衡的四大方法
- SMOTE(合成少数类过采样技术)
- 加权投票集成分类器
- DNN结合Focal Loss
- PCA-Kmeans聚类与DNN-Focal Loss的混合方法
实验设计与结果分析
- 数据集描述与实验设置
- 不同方法的性能对比
- 关键指标解读(F1分数、AUC、准确率)
代码示例
- 数据预处理与特征工程
- SMOTE实现
- 加权投票分类器构建
- DNN与Focal Loss模型训练
- PCA-Kmeans与DNN的混合方法
结论与未来方向
- 方法优缺点总结
- 实际应用建议
- 研究展望
1. 引言
1.1 脑卒中的全球影响
脑卒中是全球第二大死亡原因,占所有死亡病例的11.8%(GBD 2013)。早期预测中风风险对降低死亡率至关重要,而机器学习技术为此提供了新思路。然而,医疗数据集通常存在严重的类别不平衡问题,即中风病例(少数类)远少于非中风病例(多数类),导致模型倾向于忽略少数类,预测性能下降。
1.2 类别不平衡问题的核心痛点
- 多数类主导:传统模型(如逻辑回归、SVM)在训练时会偏向多数类。
- 评估指标误导性:仅依赖准确率会掩盖模型对少数类的预测失败。
- 数据稀缺性:少数类样本不足,难以捕捉关键特征。
本文基于Kaggle的脑卒中数据集,系统比较了四种解决类别不平衡的方法,并通过实验验证其有效性。
2. 数据预处理与特征选择
2.1 数据介绍
特征名称 | 描述 | 取值范围 | 作用 |
---|---|---|---|
Patient ID | 患者的唯一标识符,用于区分不同的个体。 | 1到5110(整数) | 主要用于数据管理和分析,但在建模时通常会被移除,因为它对预测中风没有直接帮助。 |
Gender(性别) | 患者的性别。 | Male(男性)、Female(女性)、Other(其他) | 性别可能与中风的风险相关,例如某些研究表明男性中风的风险可能高于女性。 |
Age(年龄) | 患者的年龄。 | 0.08岁到82岁 | 年龄是中风的重要风险因素之一,通常中风在老年人中更为常见。 |
Hypertension(高血压) | 患者是否患有高血压。 | Yes(是)、No(否) | 高血压是中风的主要风险因素之一,与中风的发生有很强的相关性。 |
Heart Disease(心脏病) | 患者是否患有心脏病。 | Yes(是)、No(否) | 心脏病可能增加中风的风险,因为心脏问题可能导致血液流动异常。 |
Ever Married(是否曾经结婚) | 患者是否曾经结婚。 | Yes(是)、No(否) | 婚姻状况可能与生活方式和健康行为相关,间接影响中风风险。 |
Work Type(工作类型) | 患者的工作类型。 | Self-employed(自雇)、Private(私营企业员工)、Government(政府雇员) | 工作类型可能与生活方式相关,间接影响健康。 |
Residence Type(居住类型) | 患者的居住类型。 | Urban(城市)、Rural(农村) | 居住环境可能与生活方式和健康资源相关,间接影响中风风险。 |
Avg-Glucose Level(平均血糖水平) | 患者的平均血糖水平。 | 55到272 | 高血糖是中风的风险因素之一。 |
BMI(体质指数) | 患者的体质指数。 | 10到98 | BMI与肥胖相关,肥胖是中风的潜在风险因素。 |
Smoking Status(吸烟状态) | 患者的吸烟状态。 | Unknown(未知)、Never(从不吸烟)、Formerly(曾经吸烟)、Smoked(吸烟) | 吸烟是中风的重要风险因素。 |
Stroke(目标变量) | 表示患者是否中风。 | 1(中风)、0(未中风) | 这是需要预测的目标变量。 |
2.2 数据来源与清洗
数据集包含5110个样本,11个特征(如年龄、血糖水平、BMI等),目标变量为是否中风。清洗步骤包括:
- 移除异常值(如BMI > 60、年龄 < 25、性别为“其他”的样本)。
- 处理缺失值(仅BMI存在缺失)。
import pandas as pd
# 加载数据
df = pd.read_csv("stroke_dataset.csv")
# 移除异常值
df = df[(df['BMI'] <= 60) & (df['Age'] >= 25) & (df['Gender'] != 'Other')]
# 处理缺失值(简单填补:用中位数填充BMI)
df['BMI'].fillna(df['BMI'].median(), inplace=True)
2.3 缺失值处理方法对比
论文对比了两种方法:
- 简单填补:用中位数、众数等填充。
- 回归填补:基于其他特征训练回归模型预测缺失值。