机器学习:基于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
相关推荐
独自归家的兔5 分钟前
通义千问3-VL-Plus - 界面交互(本地图片)
人工智能·交互
adaAS141431513 分钟前
YOLO11-ReCalibrationFPN-P345实现酒液品牌识别与分类_1
人工智能·分类·数据挖掘
AEMC马广川14 分钟前
能源托管项目中“企业认证+人才证书”双轨评分策略分析
大数据·运维·人工智能·能源
鲸采云SRM采购管理系统16 分钟前
2025采购管理系统新趋势解读:AI与自动化正当时
人工智能
weixin_4481199418 分钟前
不要将包含API密钥的 .env 文件提交到版本控制系统中
人工智能
北京耐用通信23 分钟前
解码协议迷雾:耐达讯自动化Profinet转Devicenet让食品包装称重模块“跨界对话”的魔法
人工智能·物联网·网络协议·自动化·信息与通信
塔楼29 分钟前
MiniCPM-V 4.5
人工智能·深度学习
猫天意31 分钟前
【即插即用模块】AAAI2025 | 高频 + 空间感知!新 HS-FPN 让“极小目标”不再消失!SCI保二区争一区!彻底疯狂!!!
网络·人工智能·深度学习·学习·音视频
罗小罗同学32 分钟前
基于虚拟染色的病理切片进行癌症分类,准确率可达到95.9%,在统计学上逼近真实染色的金标准,两小时可处理100张切片
人工智能·分类·数据挖掘·医学图像处理·医学人工智能
OneCrab35 分钟前
100种AI模型安全漏洞展示
人工智能