📜  毫升 |使用逻辑回归预测心脏病。(1)

📅  最后修改于: 2023-12-03 15:40:40.752000             🧑  作者: Mango

使用逻辑回归预测心脏病

在医疗领域,如何准确地预测患者是否有心脏病是一个非常重要的问题。逻辑回归是一种分类算法,可以用于预测一个二元分类的结果,如心脏病的存在与否。在本文中,我们将使用逻辑回归来预测患者是否有心脏病。

数据集介绍

我们将使用Heart Disease UCI 数据集,该数据集包含303个样本和14个特征。我们将使用其中13个特征来预测目标变量 - 心脏病。以下是该数据集的特征名称和描述:

  • age:年龄
  • sex:性别(1 = 男性,0 = 女性)
  • cp:胸痛类型(1 = 典型心绞痛,2 = 非典型心绞痛,3 = 非心绞痛,4 = 无症状)
  • trestbps:静息血压
  • chol:总胆固醇
  • fbs:空腹血糖> 120毫克/分升(1 = True,0 = False)
  • restecg:静息心电图结果(0 = 正常,1 = 含ST-T波异常,2 = 由左心室肥大导致的ST-T波异常)
  • thalach:达到的最大心率
  • exang:运动诱发心绞痛(1 = 是,0 = 否)
  • oldpeak:运动相对于休息引起的ST段下降
  • slope:ST段的斜率(1 = 上坡,2 = 平坡,3 = 下坡)
  • ca:主要的血管数(0-3)
  • thal:缺陷类型(3 = 正常;6 = 固定缺陷;7 = 可逆缺陷)

最后一个特征,target,是我们要预测的目标变量。它代表患者是否有心脏病(0 = 没有心脏病,1 = 有心脏病)。

数据预处理

在我们开始使用逻辑回归之前,我们需要对我们的数据进行一些预处理。我们将使用Python的pandas库来加载和处理数据。

import pandas as pd

# 从远程URL加载数据并分配列名
url = 'https://archive.ics.uci.edu/ml/machine-learning-databases/heart-disease/processed.cleveland.data'
col_names = ['age', 'sex', 'cp', 'trestbps', 'chol', 'fbs', 'restecg', 'thalach', 'exang', 'oldpeak', 'slope', 'ca', 'thal', 'target']
heart_data = pd.read_csv(url, header=None, names=col_names)

# 删除具有缺失值的行
heart_data = heart_data.replace('?', pd.NA).dropna()

# 将目标变量从整数转换为二进制
heart_data['target'] = heart_data['target'].apply(lambda x: 0 if x == 0 else 1)

# 将分类变量转换为二进制
heart_data = pd.get_dummies(heart_data, columns=['cp', 'restecg', 'slope', 'thal'])

这里我们主要完成以下几个步骤:

  • 从远程URL加载数据并为每列分配名称。
  • 删除具有缺失值的行。
  • 将目标变量从整数转换为二进制。
  • 将分类变量转换为二进制。
建立逻辑回归模型

我们已经预处理了数据并准备好将其提供给逻辑回归模型。让我们使用Python的scikit-learn库建立模型。

from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score

# 准备特征和目标数据
X = heart_data.drop('target', axis=1)
y = heart_data['target']

# 拆分数据集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)

# 建立逻辑回归模型
logreg = LogisticRegression(max_iter=1000)
logreg.fit(X_train, y_train)

# 预测测试集
y_pred = logreg.predict(X_test)

# 输出精确度
accuracy = accuracy_score(y_test, y_pred)
print('Accuracy:', accuracy)

这里我们主要完成以下几个步骤:

  • 准备特征和目标数据。
  • 使用train_test_split函数拆分数据集。
  • 建立逻辑回归模型并训练它。
  • 预测测试集。
  • 输出精确度。
总结

在本文中,我们使用了逻辑回归算法来预测患者是否有心脏病。我们首先介绍了我们将要使用的数据集,并对其进行了预处理。然后,我们建立了一个逻辑回归模型,并使用测试集来评估其准确性。最后,我们输出了模型的精确度,并得出结论:逻辑回归可用于预测患者是否有心脏病。