心脏病是全球医疗保健系统的一大负担。如果能够及时解决这个问题,许多不良事件本可以避免。机器学习在诊断高风险个体的不良心脏结果的可能性方面显示出了希望。本文将使用“个人关键健康指标”数据集来识别心脏病风险个体。该数据集包括美国疾病控制中心(CDC)对40万名成年人健康状况的年度调查。数据集可以从以下链接下载。
任何分析都需要数据。因此,首先导入数据。导入数据首先遵循以下代码行。
import pandas as pdimport numpy as npimport matplotlib.pyplot as pltimport seaborn as sns
在上述代码行中分别导入了numpy和pandas库。然后,导入了matplotlib库。这在Python中用于交互式可视化。Seaborn是另一个更适合处理pandas数据框的数据可视化库。下一步是创建一个数据框。Pandas数据框是一个二维表格结构,具有行和列。
df=pd.read_csv('heart_disease.csv')df.head()
文件名为heart_disease,上述代码行从外部源上传数据。‘read_csv’使能够读取csv文件。代码df.head()显示数据集的前五行,如下所示。
接下来,需要找到数据集中的信息。这可以通过使用info()函数来完成。信息将包括范围索引、数据列、非空计数、内存使用和数据类型。以下是代码行和输出。
df.info()
从输出中可以看出,数据集中没有缺失值。接下来,希望以系列的形式获取每个列的数据类型。代码行和输出如下。
obj_list = df.select_dtypes(include='object').columnsobj_list
在这里,创建了一个包含对象数据类型的对象列表。
接下来,使用sklearn.preprocessing库中的LabelEncoder模块对目标标签进行编码,将值0和n-classes-1转换为机器可以轻松读取的数字形式。以下是代码行和输出。
from sklearn.preprocessing import LabelEncoderle = LabelEncoder()for obj in obj_list: df[obj] = le.fit_transform(df[obj].astype(str))df.head()
从输出中可以看出,标签已被转换为数字形式。接下来,希望检查每个参数与心脏病目标之间的关系。这将通过使用相关性函数来实现。相关性衡量两个数据集之间的关联强度,正相关显示一个变量对另一个变量的强依赖性,负相关显示相反的关系。相关性范围在-1到+1之间。代码行和输出如下。
correlation=df.corr()correlation
从上述输出中,让分析一些与目标有关的变量,即心脏病。BMI=0.051803,吸烟=0.107764,饮酒=-0.032080,中风=0.196835,身体健康=0.170721,心理健康=0.028591,年龄类别=0.233432,糖尿病=0.168553,体力活动=-0.100030,总体健康=-0.011062,睡眠时间=0.008327。
可以看出,体力活动和总体健康与减少不良心脏结果相关;相反,中风、糖尿病、吸烟和身体健康状况与不良心脏结果相对正相关。
将对输入和输出进行标记。在这里,“疾病”是目标变量,将根据提供的输入确定个体是否患有心脏病。模型开发的第一步是执行train-test split,从sklearn库导入train_test_split方法。X将拥有独立变量,y将拥有目标变量。数据集的30%将是测试数据。为了确定性train-test split,random_state设置为整数值。因此,代码行是:
X = df.drop('HeartDisease', axis=1).valuesy = df['HeartDisease'].valuesfrom sklearn.model_selection import train_test_splitnp.random.seed(41)X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3)
上述代码行将数据分割为训练和测试数据集,以衡量模型的泛化能力并预测模型的未见过数据。现在,将借助两种不同的算法,即kNN、Logistic Regression和Random Forest分类器,来开发模型。
尽管已经通过准确度评分评估了模型,但混淆矩阵将使能够进一步理解模型开发过程中的误分类方面。混淆矩阵如下所示:
预测:是预测:否总计实际:是a (T.P)b (F.N)a+b (实际是)实际:否c (F.P)d (T.N)c+d (实际否)总计a+c (预测是)b+d (预测否)a+b+c+d
在这里,T.P = 真正例,F.N = 假负例,F.P = 假正例,T.N = 真负例
在分类器中,可以看到kNN的准确度为90.53%,逻辑回归的精确度为91.45%,随机森林分类器的准确率为90.55%。进一步评估模型需要生成混淆矩阵以了解分类模式。在逻辑回归的情况下,95,939个样本中有87,745个被正确分类,而kNN为86,863个,随机森林分类器为86,873个。尽管所有算法的准确度都超过90%,但逻辑回归是最准确的。
kNN、逻辑回归和随机森林分类器可以将个体分为高风险和低风险类别,准确度很高。混淆矩阵是了解模型误分类方面的重要工具。高血压、高胆固醇、吸烟、糖尿病状态和体力活动是导致心脏病的重要因素。机器学习使数据中的模式检测成为可能,以预测患者的病情。
Q1. 预测心脏病的最佳算法是什么?A. 几种算法如随机森林、SVM和神经网络在预测心脏病方面表现良好,每种算法利用不同的特征,根据数据集特征实现准确的结果。