在当今的医疗领域,机器学习技术的应用正变得越来越重要。本文将探讨如何利用机器学习对心脏病数据集进行分析和预测,以期提高医疗诊断的效率和准确性。通过分析UCI在线存储库中的心脏病数据集,能够预测患者是否患有心脏病,从而为医生提供快速的诊断支持。
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import warnings
from sklearn.model_selection import KFold, StratifiedKFold, cross_val_score
from sklearn import linear_model, tree, ensemble
在本节中,将加载并查看CSV文件及其内容。数据集来源于UCI在线存储库,包含14个属性/特征,包括目标变量,如年龄、性别、胆固醇水平等。
dataframe = pd.read_csv("/content/heart.csv")
dataframe.head(10)
从数据集中,可以看到连续型、序数型和二进制型三种数据类型。
让获取一些关于数据集的基本信息。
dataframe.info()
dataframe.isna().sum()
从输出中,数据不包含空值和重复值,因此数据是好的,可以进一步分析。
通过可视化数据特征来发现它们之间的相关性,从而推断出重要特征。
plt.figure(figsize=(15,10))
sns.heatmap(dataframe.corr(), linewidth=.01, annot=True, cmap="winter")
plt.show()
plt.savefig('correlationfigure')
从上面的热图中,可以了解到胸痛(cp)和目标之间存在正相关。这意味着胸痛风险较大的患者更有可能患有心脏病。除了胸痛,thalach、slope和resting与目标之间也存在正相关。
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.25, random_state=40)
将整个数据集分成训练集和测试集,其中包含75%的训练集和25%的测试集。可以将训练集用于分类器训练模型,测试集用于通过不同分类器预测模型的性能。
# 逻辑回归
from sklearn.model_selection import cross_val_score, GridSearchCV
from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(C=1.0, class_weight='balanced', dual=False,
fit_intercept=True, intercept_scaling=1, l1_ratio=None,
max_iter=100, multi_class='auto', n_jobs=None, penalty='l2',
random_state=1234, solver='lbfgs', tol=0.0001, verbose=0,
warm_start=False)
model1 = lr.fit(X_train, y_train)
prediction1 = model1.predict(X_test)
from sklearn.metrics import confusion_matrix
cm = confusion_matrix(y_test, prediction1)
cm