使用Logistic回归预测心脏病 -- 机器学习项目基础篇(4)

news2024/10/4 21:46:37

世界卫生组织估计,五分之四的心血管疾病(CVD)死亡是由于心脏病发作。本研究旨在精确确定有很好机会受CVD影响的患者的比例,并使用Logistic回归预测总体风险。
Logistic回归是一种统计和机器学习技术,基于输入字段的值对数据集的记录进行分类。它基于一组或多组自变量预测因变量以预测结果。它既可用于二分类,也可用于多类分类。

加载库

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 sn

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

加载数据集

# dataset
disease_df = pd.read_csv("../input / framingham.csv")
disease_df.drop(['education'], inplace = True, axis = 1)
disease_df.rename(columns ={'male':'Sex_male'}, inplace = True)
 
# removing NaN / NULL values
disease_df.dropna(axis = 0, inplace = True)
print(disease_df.head(), disease_df.shape)
print(disease_df.TenYearCHD.value_counts())

输出:

    Sex_male  age  currentSmoker  ...  heartRate  glucose  TenYearCHD
0         1   39              0  ...       80.0     77.0           0
1         0   46              0  ...       95.0     76.0           0
2         1   48              1  ...       75.0     70.0           0
3         0   61              1  ...       65.0    103.0           1
4         0   46              1  ...       85.0     85.0           0

[5 rows x 15 columns] (3751, 15)
0    3179
1     572
Name: TenYearCHD, dtype: int64

数据集中所有可用患者的10年CHD记录:

# counting no. of patients affected with CHD
plt.figure(figsize=(7, 5))
sn.countplot(x='TenYearCHD', data=disease_df,
             palette="BuGn_r")
plt.show()

在这里插入图片描述
计算受CHD影响的患者数量,其中(0=未受影响; 1=受影响)

laste = disease_df['TenYearCHD'].plot()
plt.show(laste)

在这里插入图片描述

划分训练和测试集,并对数据进行标准化

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)

输出:

Train Set :
(2625, 6) (2625, )

Test Set : 
(1126, 6) (1126, )

数据集建模|评价和准确度:

from sklearn.linear_model import LogisticRegression
 
logreg = LogisticRegression()
logreg.fit(X_train, y_train)
y_pred = logreg.predict(X_test)
 
# Evaluation and accuracy
from sklearn.metrics import jaccard_similarity_score
 
print('')
print('Accuracy of the model in jaccard similarity score is = ',
      jaccard_similarity_score(y_test, y_pred))

输出:

Accuracy of the model in jaccard similarity score is = 0.8490230905861457

应用随机森林分类器|评价和准确度:

# This code is contributed by @amartajisce
from sklearn.ensemble import RandomForestClassifier
 
rf = RandomForestClassifier()
rf.fit(X_train, y_train)
 
score = rf.score(x_test,y_test)*100
print('Accuracy of the model is = ', score)

输出:

Accuracy of the model is = 87.14622641509435

使用混淆矩阵寻找模型的准确性:

# 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))
 
# This code is contributed by parna_28

输出:

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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/825937.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

YOLOv8-pose姿态模型笔记1

YOLOv8-pose关键点模型输出,每个框输出51个信息,即17个关键点以及每个关键点的得分 COCO的annotation一共有17个关节点。 分别是:“nose”,“left_eye”, “right_eye”,“left_ear”, “right_ear”,“left_shoulder”, “right_shoulder”…

18款奔驰S320升级后排座椅加热功能,提升后排乘坐舒适性

奔驰座椅加热就简单多了,是在原车座椅海绵表面安装一层加热垫,加热垫里面是加热丝,通过电机热的原理,快速升温,把热量传递给车主。 奔驰的座椅加热系统是通过车门按键来控制,3档调节,温度从低到…

Michael.W基于Foundry精读Openzeppelin第18期——DoubleEndedQueue.sol

Michael.W基于Foundry精读Openzeppelin第18期——DoubleEndedQueue.sol 0. 版本0.1 DoubleEndedQueue.sol 1. 目标合约2. 代码精读2.1 结构体Bytes32Deque2.2 length(Bytes32Deque storage deque) && empty(Bytes32Deque storage deque)2.3 at(Bytes32Deque storage de…

【Java可执行命令】(十三)策略工具policytool:界面化创建、编辑和管理策略文件中的权限和配置 ~

Java可执行命令之policytool 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 使用方式3.2 使用技巧3.3 注意事项 4️⃣ 应用场景🌾 总结 1️⃣ 概念 在Java平台上,安全性是至关重要的。为了提供细粒度的安全管理机制,Java引入了policytool命令。p…

LuckyFrameweb LuckyFrameClient 自动化测试平台 安装部署 使用教程

LuckyFrameweb 自动化测试平台 jdk安装 maven安装 LuckyFrameweb安装 仓库地址 使用maven 打包jar包 docker-compose安装mysql #cat mysql-start.yml version: "3" services:mysql:image: mysql:5.7restart: alwaysenvironment:- TZAsia/Shanghaiports:- 3306:3…

分享:交流负载箱 0~9.999A 可调 步进1mA

前言 最近去客户那边,发现一个问题,他们的交流供电单元 测试很不方便。 需求 供电单元输出: AC220V 50HZ;漏电保护保护功能过载报警功能;超载保护功能; 总而言之,他们需要一台 交流的电子负…

Unity 画线OnPopulateMesh函数VertexHelper

一个画图表(折线图,树状图,饼状图,雷达图)的插件。 底层使用UGUI中的重写了OnPopulateMesh这个方法, 用来实现鼠标画线的功能。 OnPopulateMesh(VertexHelper vh) {} using System; using System.Collec…

Elisp之buffer-substring-no-properties用法(二十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生…

冲突域 和 广播域

冲突域: 在传统的以粗同轴电缆为传输介质的以太网中,同一介质上的多个节点共享链路的带宽,争用链路的使用权,这样就会发生冲突,CSMA/CD机制中当冲突发生时,网络就要进行回退,这段回退的时间内链…

SpringBoot复习:(15)Spring容器的核心方法refresh是在哪里被调用的?

在SpringApplication的run方法: refreshContext代码如下: 其中调用的refresh方法代码如下: 其中调用的refresh方法代码如下: 其中调用的fresh方法代码如下: 其中调用了super.refresh();而这个super.refresh()就是…

AP5179 高端电流采样降压恒流驱动IC SOP8 LED车灯电源驱动

产品描述 AP5179是一款连续电感电流导通模式的降压恒流源,用于驱动一颗或多颗串联LED输入电压范围从 5 V 到 60V,输出电流 最大可达 2.0A 。根据不同的输入电压和外部器件, 可以驱动高达数十瓦的 LED。内置功率开关,采用高端电流…

AI赋能下的“数字人”与“数智人”:异同解析

由于人工智能技术的快速发展,我们逐渐进入了一个数字化的时代。在这个时代中,两个概念引起了广泛的关注和讨论,那就是“数字人”和“数智人”。虽然这两个概念都与人工智能有关,但它们在含义和应用上存在一些不同之处。在本文中&a…

使用elementplus实现文本框的粘贴复制

需求: 文本框仅用于显示展示数据并且用户可以进行复制,并不会进行修改和编辑, 注意点: 1.首先且文本为多行。所以不能使用普通的el-input,这种一行超出就会隐藏了,如果多行超出行数也会隐藏(…

《评论文章-无线纳米技术可以降低脊髓刺激成本和并发症,传统设备与无线刺激设备费用相比的回顾》

SCS治疗可能会出现并发症,并且管理这些并发症的费用很高。 慢性疼痛是促使人们寻求缓解的主要因素,也是阿片类药物研究的主要方向。 SCS治疗取得了突破性进展,在治疗背部手术失败综合征、神经性疼痛障碍、复杂区域疼痛综合征以及血管缺血引…

51单片机学习--蜂鸣器播放音乐

由原理图可知,蜂鸣器BEEP与P1_5 相关,但其实这个原理图有错,实测接的是P2_5 下面这个代码就是以500HZ的频率响500ms的例子 sbit Buzzer P2^5;unsigned char KeyNum; unsigned int i;void main() {while(1){KeyNum Key();if(KeyNum){for(i …

后端进阶之路——综述Spring Security认证,授权(一)

前言 「作者主页」:雪碧有白泡泡 「个人网站」:雪碧的个人网站 「推荐专栏」: ★java一站式服务 ★ ★前端炫酷代码分享 ★ ★ uniapp-从构建到提升★ ★ 从0到英雄,vue成神之路★ ★ 解决算法,一个专栏就够了★ ★ 架…

人脸检测之给照片加上眼镜

人脸检测 文章目录 人脸检测一、背景二、UV空间融合法三、总结与不足四、参考 一、背景 给人脸图像加眼镜在很多领域都有应用。比如修图换造型、眼镜店眼镜试戴、戴眼镜人脸识别等。 给人脸加眼镜的难点在于难以做到自然逼真,且人脸多种多样,角度多变&a…

HCIP——BGP综合实验

BGP综合实验 一、实验拓扑二、实验要求三、实验步骤1、配置接口IP地址与环回地址2、AS2配置OSPF3、配置BGP,建立对等体4、发布路由5、配置路由反射器6、做空接口、汇总以及宣告7、建立GRE隧道8、查看BGP路由表9、测试 一、实验拓扑 二、实验要求 1,AS1存…

关于ETL的两种架构(ETL架构和ELT架构) qt

ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract)、转换(transform)、加载(load)至目的端的过程。ETL一词较常用在数据仓库&#xf…

Tomcat8安装并启动服务教程

目录 一、安装JDK 1.检查Linux版本信息 2.官网下载jdk 3.将下载的压缩包上传到Linux主机上 4.安装jdk到指定目录 5.配置环境变量 6.检测 二、安装tomcat 1.官网下载tomcat的安装包 2.将下载的包上传到自己的Linux主机上 3.安装tomcat到指定目录 4.为了方便&#xf…