据WHO统计,2016年,约有1790万人死于心血管疾病,占全球死亡总数的31%。其中,85%死于心脏病和中风。心脏病已经成为威胁生命的最主要疾病之一。

本案例使用K近邻分类器对心脏病患者进行分类预测。所采用的数据集是心脏病患者数据集,该数据集共有14个字段,303条数据,记录了患者的基本信息及其各项血液指标的情况。

本案例通过数据可视化、数据字段统计、数据标准化以及构建K近邻分类模型实现了较为良好分类预测性能。

爱数科案例 | 心脏病患者分类建模与分析_k近邻

1. 读取心脏病患者数据集

首先,读取数据集,该数据集是UCI上的心脏病患者数据集,其中包含了 303 条患者信息,每一名患者有 13 个字段记录其基本信息(年龄、性别等)和身体健康信息(心率、血糖等),此外有一个类变量记录其是否患有心脏病。详细的字段信息可见 此处。

类别字段target有两个取值,代表预测类别,1 = 患病,2 = 不患病。

爱数科案例 | 心脏病患者分类建模与分析_k近邻_02

2. 各字段基本统计信息

读取数据表后,对各个数据字段统计基本信息,包括样本数量、均值、标准差、最大最小值和上下四分位数等。

可以看出,读取的数据表均为数值型字段。从这里可以发现,各字段的样本数均为 303 ,说明无缺失值;此外。许多字段如sex、cp、fbs、restecg、exang、slope、ca和thal,其上下四分位数、中位数和最大最小值的取值有很大的重复,结合数据集详情页的统计信息,说明其为离散型数值字段;其余字段如age、trestbps等为连续型变量,在后期可以进行标准化处理。

爱数科案例 | 心脏病患者分类建模与分析_数据集_03

3. 年龄分布直方图

选取age字段画出直方图。可以看出,大多数患者年龄在38岁以上,说明心脏病的主要患病人群是中老年人。

爱数科案例 | 心脏病患者分类建模与分析_字段_04

4. 性别分布柱状图

选取sex字段画出柱状图,并且依据target字段进行分组。

sex=1表示男性患者,即柱状图中的右半部分,sex=0为女性患者,在左半部分。能看出,男性数量在该数据集中比女性高。

根据target分组能看出,女性患病比例较男性高出许多

爱数科案例 | 心脏病患者分类建模与分析_k近邻_05

5. 患心脏病比例饼状图

选取target字段画出饼图,可以看出,该数据集中患有心脏病的人群比例较高,但两个类别的样本数量相差不大。

爱数科案例 | 心脏病患者分类建模与分析_k近邻_06

6. 训练/测试集划分

对数据集进行划分,设置划分比例为训练集 : 测试集 = 4 : 1。

由于数据集的同一类标签集中在一起,我们选择分组抽样选项,依据target字段进行分组,合理划分数据集。

爱数科案例 | 心脏病患者分类建模与分析_k近邻_07

7. Z-Score标准化

对age、trestbps、chol、thalach、oldpeak进行标准化处理,将不同量级的数据转化为统一量度,提高数据可比性。

爱数科案例 | 心脏病患者分类建模与分析_数据集_08


8. 构建K近邻心脏病患者分类模型

构建K近邻分类模型,将target作为我们的标签列,其余各字段均作为模型的特征列。选择计算的邻居个数为8,权重计算方式为distance,以及设置距离计算方式为manhattan距离(街区距离)。

爱数科案例 | 心脏病患者分类建模与分析_字段_09


9. K近邻模型预测

使用模型预测组件对K近邻模型进行测试集上的预测,预测后的标签为target_predict。

爱数科案例 | 心脏病患者分类建模与分析_字段_10


10. K近邻分类模型评估

对K近邻模型进行评估。使用的方法主要为分类报告、混淆矩阵和ROC曲线。

可以看到,我们构建的K近邻模型的分类性能较为良好,总体分类正确率(accuracy)达到0.87,macor avg F1-score能达到0.87,正类样本的召回率(Recall)能达到0.94,ROC_AUC值为0.88。

分类报告(classification report)

爱数科案例 | 心脏病患者分类建模与分析_数据集_11


混淆矩阵(confusion matrix)

爱数科案例 | 心脏病患者分类建模与分析_k近邻_12

ROC曲线(receiver operating characteristic curve)

爱数科案例 | 心脏病患者分类建模与分析_k近邻_13