机器学习:基于Sklearn框架,使用逻辑回归对由心脏病引发的死亡进行预测分析

前言

系列专栏:机器学习:高级应用与实践【项目实战100+】【2024】✨︎
在本专栏中不仅包含一些适合初学者的最新机器学习项目,每个项目都处理一组不同的问题,包括监督和无监督学习、分类、回归和聚类,而且涉及创建深度学习模型、处理非结构化数据以及指导复杂的模型,如卷积神经网络、门控递归单元、大型语言模型和强化学习模型

世界卫生组织估计,五分之四的心血管疾病(CVD)死亡是由心脏病发作引起的。整个研究旨在确定很有可能受到 CVD 影响的患者比例,并使用 Logistic Regression 预测总体风险。

目录

  • [1. 数据准备](#1. 数据准备)
    • [1.1 加载数据集](#1.1 加载数据集)
    • [1.2 处理缺失值](#1.2 处理缺失值)
    • [1.3 将数据集拆分为测试集和训练集](#1.3 将数据集拆分为测试集和训练集)
  • [2. 心脏病数据集的探索性数据分析](#2. 心脏病数据集的探索性数据分析)
    • [2.1 数据集中所有可用患者的十年冠心病记录:](#2.1 数据集中所有可用患者的十年冠心病记录:)
    • [2.2 计算受冠心病影响的患者人数,其中(0 = 未受影响;1 = 受影响)](#2.2 计算受冠心病影响的患者人数,其中(0 = 未受影响;1 = 受影响))
  • [3. 用于心脏病预测的拟合逻辑回归模型](#3. 用于心脏病预测的拟合逻辑回归模型)
    • [3.1 训练模型](#3.1 训练模型)
    • [3.2 评估逻辑回归模型](#3.2 评估逻辑回归模型)
    • [3.3 混淆矩阵](#3.3 混淆矩阵)

逻辑回归: 尽管被称为回归,但实际上是一种广泛使用的监督分类技术。逻辑回归及其扩展,如多项式逻辑回归,允许我们使用一种简单易懂的方法预测观测值属于某一类的概率。

python 复制代码
import pandas as pd
import pylab as pl
import numpy as np
import scipy.optimize as opt
import statsmodels.api as sm
from sklearn import preprocessing
'exec(% matplotlib inline)'
import matplotlib.pyplot as plt
import matplotlib.mlab as mlab
import seaborn as sns

1. 数据准备

该数据集来自一项正在进行的对马萨诸塞州弗雷明汉镇居民的心血管研究。分类目标是预测患者未来10年是否有冠心病(CHD)的风险。数据集提供患者的信息。它包括4000多条记录和15个属性。

1.1 加载数据集

python 复制代码
# dataset
disease_df = pd.read_csv("framingham.csv")
disease_df.drop(['education'], inplace = True, axis = 1)
disease_df.rename(columns ={'male':'Sex_male'}, inplace = True)

1.2 处理缺失值

python 复制代码
# removing NaN / NULL values
disease_df.dropna(axis = 0, inplace = True)
print(disease_df.head(), disease_df.shape)
print(disease_df.TenYearCHD.value_counts())

输出

python 复制代码
   Sex_male  age  currentSmoker  cigsPerDay  BPMeds  prevalentStroke  \
0         1   39              0         0.0     0.0                0   
1         0   46              0         0.0     0.0                0   
2         1   48              1        20.0     0.0                0   
3         0   61              1        30.0     0.0                0   
4         0   46              1        23.0     0.0                0   

   prevalentHyp  diabetes  totChol  sysBP  diaBP    BMI  heartRate  glucose  \
0             0         0    195.0  106.0   70.0  26.97       80.0     77.0   
1             0         0    250.0  121.0   81.0  28.73       95.0     76.0   
2             0         0    245.0  127.5   80.0  25.34       75.0     70.0   
3             1         0    225.0  150.0   95.0  28.58       65.0    103.0   
4             0         0    285.0  130.0   84.0  23.10       85.0     85.0   

   TenYearCHD  
0           0  
1           0  
2           0  
3           1  
4           0   (3751, 15)
TenYearCHD
0    3179
1     572
Name: count, dtype: int64

1.3 将数据集拆分为测试集和训练集

python 复制代码
X = np.asarray(disease_df[['age', 'Sex_male', 'cigsPerDay', 
                           'totChol', 'sysBP', 'glucose']])
y = np.asarray(disease_df['TenYearCHD'])

# normalization of the dataset
X = preprocessing.StandardScaler().fit(X).transform(X)

# Train-and-Test -Split
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split( 
        X, y, test_size = 0.3, random_state = 4)

print ('Train set:', X_train.shape,  y_train.shape)
print ('Test set:', X_test.shape,  y_test.shape)

输出

python 复制代码
Train set: (2625, 6) (2625,)
Test set: (1126, 6) (1126,)

2. 心脏病数据集的探索性数据分析

2.1 数据集中所有可用患者的十年冠心病记录:

python 复制代码
# counting no. of patients affected with CHD
plt.figure(figsize=(7, 5))
sns.countplot(x='TenYearCHD', hue="TenYearCHD", data=disease_df, legend=False,
             palette="BuGn_r")
plt.show()

输出

2.2 计算受冠心病影响的患者人数,其中(0 = 未受影响;1 = 受影响)

python 复制代码
laste = disease_df['TenYearCHD'].plot()
plt.show(laste)

输出

3. 用于心脏病预测的拟合逻辑回归模型

3.1 训练模型

python 复制代码
from sklearn.linear_model import LogisticRegression
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
y_pred = logreg.predict(X_test)

3.2 评估逻辑回归模型

python 复制代码
# Evaluation and accuracy
from sklearn.metrics import accuracy_score
print('Accuracy of the model is =', 
      accuracy_score(y_test, y_pred))

输出

python 复制代码
Accuracy of the model is = 0.8490230905861457

3.3 混淆矩阵

python 复制代码
# Confusion matrix 
from sklearn.metrics import confusion_matrix, classification_report

cm = confusion_matrix(y_test, y_pred)
conf_matrix = pd.DataFrame(data = cm, 
                           columns = ['Predicted:0', 'Predicted:1'], 
                           index =['Actual:0', 'Actual:1'])

plt.figure(figsize = (8, 5))
sn.heatmap(conf_matrix, annot = True, fmt = 'd', cmap = "Greens")

plt.show()
print('The details for confusion matrix is =')
print (classification_report(y_test, y_pred))

输出

python 复制代码
The details for confusion matrix is =
              precision    recall  f1-score   support

           0       0.85      0.99      0.92       951
           1       0.61      0.08      0.14       175

    accuracy                           0.85      1126
   macro avg       0.73      0.54      0.53      1126
weighted avg       0.82      0.85      0.80      1126
相关推荐
打码人的日常分享27 分钟前
基于信创体系政务服务信息化建设方案(PPT)
大数据·服务器·人工智能·信息可视化·架构·政务
硬汉嵌入式1 小时前
专为 MATLAB 优化的 AI 助手MATLAB Copilot
人工智能·matlab·copilot
北京盛世宏博1 小时前
如何利用技术手段来甄选一套档案馆库房安全温湿度监控系统
服务器·网络·人工智能·选择·档案温湿度
搞科研的小刘选手1 小时前
【EI稳定】检索第六届大数据经济与信息化管理国际学术会议(BDEIM 2025)
大数据·人工智能·经济
半吊子全栈工匠1 小时前
软件产品的10个UI设计技巧及AI 辅助
人工智能·ui
机器之心2 小时前
真机RL!最强VLA模型π*0.6来了,机器人在办公室开起咖啡厅
人工智能·openai
机器之心2 小时前
马斯克Grok 4.1低调发布!通用能力碾压其他一切模型
人工智能·openai
一水鉴天2 小时前
整体设计 全面梳理复盘 之39 生态工具链 到顶级表征及其完全公理化
大数据·人工智能·算法
小和尚同志2 小时前
本地 AI Code Review 探索及落地
人工智能·aigc
Juchecar3 小时前
视觉分层,对人工神经网络的启示
人工智能