机器学习:基于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
相关推荐
海盗儿4 分钟前
吴恩达深度学习作业之风格转移Neural Style Transfer (pytorch)
人工智能·计算机视觉
kyle~10 分钟前
深度学习---Pytorch概览
人工智能·pytorch·python·深度学习
说私域11 分钟前
开源AI智能名片链动2+1模式S2B2C商城小程序源码赋能下的社交电商创业者技能跃迁与价值重构
人工智能·小程序·重构·开源·零售
一点.点1 小时前
自动驾驶(ADAS)领域常用数据集介绍
人工智能·深度学习·机器学习·自动驾驶
智驱力人工智能1 小时前
夏季道路安全的AI革命:节省人力、提升效率
人工智能·安全·边缘计算·视觉算法·视觉分析·智能巡航·人工智能云计算
晓数3 小时前
“平价”微智码初尝试
人工智能·jetbrains
新加坡内哥谈技术3 小时前
MCP:人工智能时代的HTTP?探索AI通信新标准
人工智能·自然语言处理·chatgpt
0x2115 小时前
[论文阅读]REPLUG: Retrieval-Augmented Black-Box Language Models
论文阅读·人工智能·语言模型
JOYCE_Leo166 小时前
一文详解卷积神经网络中的卷积层和池化层原理 !!
人工智能·深度学习·cnn·卷积神经网络
缘友一世6 小时前
从线性回归到逻辑回归
算法·逻辑回归·线性回归