使用KNN和逻辑回归做心血管疾病预测的理解

数据来自Kesci,项目是想通过对患者年龄、性别、血压、血脂、血糖、吸烟史、酗酒史、体育活动等特征,分析心血管疾病的关系,并建立模型。

加载数据

Id字段对分析没有太大用处,删除字段。

查看数据集基本信息,没有发现缺失值,数据不用清洗,直接可做下一步处理。

使用pandas_profiling做探索预览分析,pandas_profiling这个库挺好,不仅包括各种基本的描述性统计值及可视化,还有对这个项目比较重要的相关性分析及可视化。

也可以调用函数corr()查看correlation,旨在保留与心血管疾病相关性较大的特征来进行分析。


分析建模

前期准备

划分特征值和目标值

根据数据背景介绍,了解字段‘cardio’代表是否患有心血管疾病,0表示健康,1表示患病。故设置为目标值。

切分数据集

总共7w条数据,切下15%作为测试集。(又学了个函数,在数组前面加一个’ ~ ’,返回一个相反的值,bool或int。)

划分训练集和验证集


训练逻辑回归模型

由于不知道要选取哪些相关性强的特征,才能使模型的精确率达到最高,故设定阈值,让相关性高于阈值的特征保留,并运用到模型训练当中。


从目前的选取的阈值中看出,相关性高于0.05的时候,模型精确率最高。相关字段为age,weight,ap_hi,ap_lo,cholesterol,gluc。



训练KNN模型


特征工程标准化



利用KNN做优化

同样在不确定哪些特征能让模型精确率高的情况下,建立循环。同样,不同的K值会对精确率产生影响,做子循环。

使用np.mean(y_test != pred_j节省了计算精确度的环节。

根据图示,相关性高于0.05的时候,模型精确度最高。在K值为15到30时候,精确度波动不大。选择15减少计算资源。

测试集做预测

重新把阈值0.05和K值15纳入到模型当中。对测试集进行预测。



小结:两种模型建立的还可以,对患者预测的精确度为72%-73%,对于心血管疾病患者关注年龄、体重、血压、血糖、血脂显得格外的重要。


gender值1和2哪个代表男性,无法从给定材料中找到。只能通过身高来判断,一般男性都比女性高。在图中可看到,1的身高相较2,右移了很多。判定1为女性。健康的人(cardio为0),男性抽烟的较女性少;患病的人中,较女性多。


男性抽烟又得心血管疾病的比例是女性的12倍。男性抽烟但没有心血管疾病的比例也是女性的12倍多。其他的比例都相近。

酗酒的人中,男性是女性的5倍。


数据中,抽烟的人的年龄中位数比不抽烟的人的年龄中位数小19个月。


在患病的人当中,抽烟的人的年龄中位数比不抽烟的人的年龄中位数小20个月。

补充:

在数据当中,虽然没有缺失值,但是在查看描述性统计是的是,有很多数据都不具有显示意义。比如血压舒张压高于收缩压的。需要去除。


你可能感兴趣的:(使用KNN和逻辑回归做心血管疾病预测的理解)