【Python机器学习系列】建立随机森林模型预测心脏疾病(完整实现过程)

这是Python机器学习系列原创文章,我的第200篇原创文章。

一、引言

        对于表格数据,一套完整的机器学习建模流程如下:

        针对不同的数据集,有些步骤不适用即不需要做,其中橘红色框为必要步骤,由于数据质量较高,本文有些步骤跳过了,跳过的步骤将单独出文章总结!同时欢迎大家关注翻看我之前的一些相关文章。

一文彻底搞懂机器学习中的归一化与反归一化问题

【Python机器学习系列】一文彻底搞懂机器学习中表格数据的输入形式(理论+源码)

【Python机器学习系列】一文带你了解机器学习中的Pipeline管道机制(理论+源码)

【Python机器学习系列】一文搞懂机器学习中的转换器和估计器(附案例)

【Python机器学习系列】一文讲透机器学习中的K折交叉验证(源码)

【Python特征工程系列】利用随机森林模型分析特征重要性(源码)

【Python特征工程系列】8步教你用决策树模型分析特征重要性(源码)

【Python特征工程系列】教你利用逻辑回归模型分析特征重要性(源码)

【Python特征工程系列】教你利用AdaBoost模型分析特征重要性(源码)

【Python特征工程系列】教你利用XGBoost模型分析特征重要性(源码)

【Python特征工程系列】利用梯度提升(GradientBoosting)模型分析特征重要性(源码)

【Python机器学习系列】拟合和回归傻傻分不清?一文带你彻底搞懂它

【Python机器学习系列】建立决策树模型预测心脏疾病(完整实现过程)

【Python机器学习系列】建立支持向量机模型预测心脏疾病(完整实现过程)

【Python机器学习系列】建立逻辑回归模型预测心脏疾病(完整实现过程)

【Python机器学习系列】建立KNN模型预测心脏疾病(完整实现过程)

        随机森林(Random Forest)是一种集成学习(Ensemble Learning)方法,它结合了多个决策树(Decision Tree)来进行分类和回归任务。随机森林通过对训练数据进行自助采样(Bootstrap Sampling)和随机特征选择,构建多个决策树,并通过投票或平均的方式进行预测。

本文将实现基于心脏疾病数据集建立随机森林模型对心脏疾病患者进行分类预测的完整过程。

二、实现过程

导入必要的库

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.utils import shuffle
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
from sklearn.metrics import roc_curve
from sklearn.metrics import auc
from sklearn.metrics import confusion_matrix
from sklearn.metrics import classification_report

1、准备数据

data = pd.read_csv(r'Dataset.csv')
df = pd.DataFrame(data)

df:

图片

数据基本信息:

print(df.head())
print(df.info())
print(df.shape)
print(df.columns)
print(df.dtypes)
cat_cols = [col for col in df.columns if df[col].dtype == "object"] # 类别型变量名
num_cols = [col for col in df.columns if df[col].dtype != "object"] # 数值型变量名

2、提取特征变量和目标变量

target = 'target'
features = df.columns.drop(target)
print(data["target"].value_counts()) # 顺便查看一下样本是否平衡

3、数据集划分

# df = shuffle(df)
X_train, X_test, y_train, y_test = train_test_split(df[features], df[target], test_size=0.2, random_state=0)

4、模型的构建与训练

# 模型的构建与训练
model = RandomForestClassifier()
model.fit(X_train, y_train)

参数详解:

from sklearn.ensemble import RandomForestClassifier
# 全部参数
RandomForestClassifier(bootstrap=True, ccp_alpha=0.0, class_weight=None,
                       criterion='gini', max_depth=None, max_features='auto',
                       max_leaf_nodes=None, max_samples=None,
                       min_impurity_decrease=0.0, min_impurity_split=None,
                       min_samples_leaf=1, min_samples_split=2,
                       min_weight_fraction_leaf=0.0, n_estimators=100,
                       n_jobs=None, oob_score=False, random_state=None,
                       verbose=0, warm_start=False)
  • n_estimators:森林中决策树的数量。默认100。。

  • criterion:分裂节点所用的标准,可选“gini”, “entropy”,默认“gini”。

  • max_depth:树的最大深度。

  • min_samples_split:拆分内部节点所需的最少样本数。

  • min_samples_leaf:在叶节点处需要的最小样本数。

  • min_weight_fraction_leaf:在所有叶节点处(所有输入样本)的权重总和中的最小加权分数。

  • max_features:寻找最佳分割时要考虑的特征数量。

  • max_leaf_nodes:最大叶子节点数,整数,默认为None

  • min_impurity_decrease:如果分裂指标的减少量大于该值,则进行分裂。

  • min_impurity_split:决策树生长的最小纯净度。默认是0。自版本0.19起不推荐使用。

  • bootstrap:是否进行bootstrap操作,bool。默认True。

  • oob_score:是否使用袋外样本来估计泛化精度。默认False。

  • n_jobs:并行计算数。默认是None。

  • random_state:控制bootstrap的随机性以及选择样本的随机性。

  • verbose:在拟合和预测时控制详细程度。默认是0。

  • class_weight:每个类的权重,可以用字典的形式传入{class_label: weight}。

  • ccp_alpha:将选择成本复杂度最大且小于ccp_alpha的子树。默认情况下,不执行修剪。

  • max_samples:如果bootstrap为True,则从X抽取以训练每个基本分类器的样本数。。

5、模型的推理与评价

y_pred = model.predict(X_test)
y_scores = model.predict_proba(X_test)
acc = accuracy_score(y_test, y_pred) # 准确率acc
cm = confusion_matrix(y_test, y_pred) # 混淆矩阵
cr = classification_report(y_test, y_pred) # 分类报告
fpr, tpr, thresholds = roc_curve(y_test, y_scores[:, 1], pos_label=1) # 计算ROC曲线和AUC值,绘制ROC曲线
roc_auc = auc(fpr, tpr)
plt.figure()
plt.plot(fpr, tpr, color='darkorange', lw=2, label='ROC curve (area = %0.2f)' % roc_auc)
plt.plot([0, 1], [0, 1], color='navy', lw=2, linestyle='--')
plt.xlim([0.0, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('Receiver Operating Characteristic')
plt.legend(loc="lower right")
plt.show()

cm:

图片

cr:

图片

ROC:

图片

三、小结

本文利用scikit-learn(一个常用的机器学习库)实现了基于心脏疾病数据集建立随机森林模型对心脏疾病患者进行分类预测的完整过程。

作者简介:

读研期间发表6篇SCI数据挖掘相关论文,现在某研究院从事数据算法相关科研工作,结合自身科研实践经历不定期分享关于Python、机器学习、深度学习、人工智能系列基础知识与应用案例。致力于只做原创,以最简单的方式理解和学习,关注我一起交流成长。需要数据集和源码的小伙伴可以关注底部公众号添加作者微信!   

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【国产mcu填坑篇】华大单片机(小华半导体)一、SPI的DMA应用(发送主机)HC32L136

最近需要用华大的hc32l136的硬件SPIDMA传输,瞎写很久没调好,看参考手册,瞎碰一天搞通了。。。 先说下我之前犯的错误,也是最宝贵的经验,供参考 没多看参考手册直接写(即使有点烂仍然提供了最高的参考价值。…

记edusrc一处信息泄露

一、信息收集 在搜索某一学校的资产时,找到了一处学工系统。 登录进去,发现有两种登陆方式,一种是统一身份认证,一种是DB认证。 统一身份认证是需要通过学生的学号和密码进行登录的,利用谷歌语法可以搜索到相关学…

多特征变量序列预测(四)Transformer-BiLSTM风速预测模型

目录 往期精彩内容: 前言 1 多特征变量数据集制作与预处理 1.1 导入数据 1.2 数据集制作与预处理 2 基于Pytorch的Transformer BiLSTM 预测模型 2.1 定义Transformer BiLSTM预测模型 2.2 设置参数,训练模型 3 模型评估与可视化 3.1 结果可视…

计算机视觉技术的应用前景如何?

计算机视觉技术在各个领域都有广阔的应用前景。以下是一些计算机视觉技术可能的应用: 1. 安全和监控:计算机视觉可以用于视频监控、入侵检测、人脸识别等安全和监控领域。它可以帮助监测和识别异常行为或威胁,并提供实时警报。 2. 自动驾驶和…

如何使用iPad通过Code App+cpolar实现公网地址远程访问vscode

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” 文章目录 1. 在iPad下载Code APP2.安装cpolar内网穿透2.1 cpolar 安装2.2 创建TCP隧道 3. iPad远程vscode4. …

BootStrap 实现轮播图

Bootstrap中文网 1、下载BootStrap 2、引入相关文件 在下载好的文件夹中找到下面的文件&#xff0c;复制到自己的项目中并引入 <link rel"stylesheet" href"bootstrap/css/bootstrap.min.css" /><script src"bootstrap/js/jquery.min.js…

中仕公考:2024年度河南省公务员考试公告发布!共招录9900人!

河南省2024年度统一考试录用公务员公告于今日发布&#xff0c;共计划招录9900人。 报名时间&#xff1a;1月18日9&#xff1a;00-1月24日17&#xff1a;00 笔试时间&#xff1a;3月16日-3月17日 报名方式&#xff1a;登录“河南人事考试网”进行网上报名 2024年省考29.5%的…

HTML--JavaScript--语法基础

变量与常量 这个基本上没啥问题 变量命名规则&#xff1a; 变量由字母、数字、下划线、$组成&#xff0c;且变量第一个字符不能为数字 变量不能是系统关键字和保留字 语法&#xff1a; var 变量名 值&#xff1b;所有Javacript变量都由var声明 定义赋值字符串&#xff1a; …

OpenHarmony——基于HDF驱动框架构建的Display驱动模型

概述 功能简介 LCD&#xff08;Liquid Crystal Display&#xff09;驱动编程&#xff0c;通过对显示器上电、初始化显示器驱动IC&#xff08;Integrated Circuit&#xff09;内部寄存器等操作&#xff0c;使其可以正常工作。 基于HDF&#xff08;Hardware Driver Foundation…

1-Docker-基础

本文内容多处参考黑马程序员的公开资料&#xff0c;仅用来个人梳理&#xff0c;原资料地址&#xff1a;https://b11et3un53m.feishu.cn/wiki/MWQIw4Zvhil0I5ktPHwcoqZdnec Docker介绍 为什么要用Docker&#xff1f; 以Mysql安装为例&#xff0c;想要在Linux系统上安装Mysql&…

前任开发在代码里下毒了,支付下单居然没加幂等

分享是最有效的学习方式。 故事 又是一个风和日丽没好的一天&#xff0c;小猫戴着耳机&#xff0c;安逸地听着音乐&#xff0c;撸着代码&#xff0c;这种没有会议的日子真的是巴适得板。 不料祸从天降&#xff0c;组长火急火燎地跑过来找到了小猫。“快排查一下&#xff0c;目…

【Emgu CV教程】5.1、几何变换之平移

图像的几何变换对于图像处理来说&#xff0c;也是最基础的那一档次&#xff0c;包括平移、旋转、缩放、透视变换等等&#xff0c;也就是对图像整理形状的改变&#xff0c;用到的函数都比较简单&#xff0c;理解起来也很容易。但是为了凑字数&#xff0c;还是一个函数一个函数的…

类和对象特性

#include<iostream> #include<string> using namespace std; class peron{ public:peron(string person){cout << "peron调用构造函数" << endl;tperson person;}~peron(){cout << "peron调用析构函数" << endl;}//手…

22k+star炒鸡好用的开源的网盘神器FileBrowser Docker自建个人网盘神器教程

目录 简介 1.拉取镜像 2.创建并启动容器 2.1创建目录 2.2启初始化一个容器用于导出配置文件和数据库&#xff0c;只挂载数据目录 2.3先将数据库文件和配置文件复制出来 2.4停止容器并删除容器 2.5创建完整的容器 3.愉快地使用 3.1示例&#xff1a; 3.2图片预览 3.3json…

快速更改flutter已有项目的项目名称和id等

如果你使用了别人已有的仓库模板或者想更改现有项目的名称&#xff0c;是一件非常繁琐的工作&#xff0c;需要修改全平台的文件还是相当麻烦的&#xff0c;所以这里推荐一个小工具&#xff0c;可以帮助大家快速实现更改项目名称的目的&#xff0c;这个工具地址&#xff1a;rena…

YOLOv8改进 | 检测头篇 | 利用DBB重参数化模块魔改检测头实现暴力涨点 (支持检测、分割、关键点检测)

一、本文介绍 本文给大家带来的改进机制是二次创新的机制,二次创新是我们发表论文中关键的一环,本文给大家带来的二次创新机制是通过DiverseBranchBlock(DBB)模块来改进我们的检测头形成一个新的检测头Detect_DBB,其中DBB是一种重参数化模块,其训练时采用复杂结构,推理时…

Java Chassis 3技术解密:注册中心分区隔离

原文链接&#xff1a;Java Chassis 3技术解密&#xff1a;注册中心分区隔离-云社区-华为云 注册中心负责实例的注册和发现&#xff0c;对微服务可靠运行起到举足轻重的作用。实例变更感知周期是注册中心最重要的技术指标之一。感知周期代表提供者的实例注册或者下线后&#xf…

MVP的思维方式

MVP释义&#xff1a;做最小可行产品&#xff0c;做最有价值的人 首席产品官MVP社区 2023-09-04 08:53 北京 MVP&#xff0c;即“Minimum Viable Product”&#xff0c;中文翻译为“最小可行产品”&#xff0c;指的是在产品开发过程中&#xff0c;将资源集中在最核心的功能上&a…

Redis教程——Redis bitmap位图操作(图解)

在平时开发过程中&#xff0c;经常会有一些 bool 类型数据需要存取。比如记录用户一年内签到的次数&#xff0c;签了是 1&#xff0c;没签是 0。如果使用 key-value 来存储&#xff0c;那么每个用户都要记录 365 次&#xff0c;当用户成百上亿时&#xff0c;需要的存储空间将非…

帆软后台(外观配置-主题)文件上传漏洞

漏洞利用 帆软上传主题获取shell&#xff08;管理系统-外观配置&#xff09; 添加主题上传的压缩包中放入shell.jsp马 &#xff08;没有添加主题功能直接构造数据包&#xff09; POST /WebReport/ReportServer?opfr_attach&cmdah_upload&filenametest.zip&widt…