【数据挖掘】通过心脏病数据案例熟悉数据挖掘的完整过程

心脏病数据挖掘过程

一、加载数据源

# 如果没有安装数据源所依赖的库,则先安装数据源所在的python库: pip install ucimlrepo
# 引入pandas和ucimlrepo
import pandas as pd
from ucimlrepo import fetch_ucirepo# fetch dataset Heart Disease dataset的Id为45
heart_disease = fetch_ucirepo(id=45) 

二、筛选数据

# data (as pandas dataframes) 
X = heart_disease.data.features  # 特征
y = heart_disease.data.targets   # 标签# 可先查看下metadata 
# print(heart_disease.metadata) # 再看下变量信息 variable information 
# print(heart_disease.variables)# 查看X是什么样子的数据
# X
# 查看y是什么样子的数据

三、数据预处理

3.1 将特征数据和标签数据整合
# 为使得数据集符合逻辑回归算法训练时需要的训练数据集的形式,即特征+标签,也就是有标签的数据集,需要将X和y进行合并
X['target'] = y
# 取出前几行查看下X
# X.head(5)
3.2 判断数据集中是否有缺失值
# 使用 isnull() 函数找出所有缺失值,并统计每列的缺失数量
missing_values = X.isnull().sum()
# print(missing_values)
3.3 将缺失值进行处理
# 对于缺失值可选择的处理方法如下:
# 1. 均值填充: 适用于正态分布的数据。
# 2. 中位数填充: 适用于非正态分布或存在异常值的数据。
# 3. 删除样本: 当缺失值较多时,可能导致数据量大幅减少,需谨慎使用。
# 计算每列的均值,并用这些均值填充缺失值 准确度 54%
mean_values = X.mean()
df_fill_mean = X.fillna(mean_values)# 计算每列的中位数,并用这些中位数填充缺失值 准确度54%
# median_values = X.median()
# df_fill_median = X.fillna(median_values)# 删除所有包含缺失值的行   准确度为 54%
# df_fill_median = X.dropna()
3.4 检查缺失值处理后的数据情况
# 检查填充后的数据
print(df_fill_mean.isnull().sum())
age         0
sex         0
cp          0
trestbps    0
chol        0
fbs         0
restecg     0
thalach     0
exang       0
oldpeak     0
slope       0
ca          0
thal        0
target      0
dtype: int64
3.5 数据分析

分析每个特征与目标变量的关系

import matplotlib.pyplot as plt# 为方便,重新用变量来表达数据集
df = df_fill_mean# 绘制目标变量分布图
df['target'].value_counts().plot(kind='bar')
plt.title('Heart Disease Distribution')
plt.show()# 选择age年龄特征来进行分析,查看年龄分布情况(按是否有心脏病分组)
# df.groupby('target') :这部分的意思是根据“target”列对数据框进行分组。例如,在Heart Disease数据集中,“target”表示是否患有心脏病(0或1)。所以这一步会将数据分成两个组:一个是有心脏病的患者,另一个是没有心脏病的患者。 
# ['age'] :接下来,我们指定只使用“age”这一列的数据。也就是说,我们要分析每个分组中年龄的分布情况。 
# .hist() :调用hist方法,这是pandas的一个函数,用于绘制直方图。直方图可以展示数据的分布情况,比如年龄的分布。 
# bins=15 :这个参数指定将数据分成15个桶(bin)。每个桶代表一个年龄段,这样可以让图表更清晰地显示不同年龄段的分布情况。 
# figsize=(10,6) :设置图的大小,宽为10英寸,高为6英寸。这一步是为了让图表在展示时看起来更舒服,不会太小或太大。 
df.groupby('target')['age'].hist(bins=15, figsize=(10,6))# 绘制直方图
# 运行这行代码后,会生成一个包含两个直方图的图表:
# 第一个是 'target' 为 0 的组(没有心脏病患者)的年龄分布。
# 第二个是 'target' 为 1 的组(有心脏病患者)的年龄分布。
# 这两个直方图将帮助你直观地比较两种不同类别中的年龄分布情况,例如:
# 是否有心脏病患者中存在明显的年龄段差异?
# 年龄较大的人是否更容易患心脏病?
plt.title('Age Distribution by Heart Disease Status')
plt.xlabel('Age')
plt.ylabel('Count')
plt.show()

在这里插入图片描述
在这里插入图片描述

3.6 分析结论

特征会影响目标的取值,目标变量target取值为[0,4],其中0表示没有心脏病,1-4表示有心脏病,只是程度不一样。由此,看出挖掘这部分数据可选用分类算法来完成,而且是选择二分类算法,比如逻辑回归算法、SVM算法等。这里我们选择逻辑回归,它是一种用于分类任务的统计方法,适用于二元分类问题。它通过拟合一个逻辑函数(sigmoid 函数)来预测目标变量的概率

四、模型构建(数据挖掘-算法选择)

4.1 划分训练数据集和测试数据
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score# 分割数据集为训练集和测试集
X = df.drop('target', axis=1)
y = df['target']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
4.2 数据标准化处理
# 标准化(因为逻辑回归对特征尺度敏感)
from sklearn.preprocessing import StandardScaler
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)
4.3 模型训练
# 训练逻辑回归模型
log_reg = LogisticRegression(max_iter=1000, random_state=42)
log_reg.fit(X_train, y_train)

五、模型预测

# 预测
y_pred_log = log_reg.predict(X_test)
y_pred_log
array([2, 1, 2, 0, 0, 3, 2, 2, 0, 0, 0, 0, 1, 2, 2, 0, 0, 3, 3, 0, 1, 0,3, 0, 3, 0, 0, 1, 3, 0, 0, 1, 0, 0, 0, 1, 3, 0, 3, 0, 2, 0, 1, 0,0, 2, 0, 0, 3, 1, 0, 0, 0, 0, 3, 0, 0, 3, 3, 2, 0], dtype=int64)

六、模型评估

from sklearn.metrics import roc_auc_score, confusion_matrix
import seaborn as sns# 真实值
y_true = y_test# 预测值
y_pred = y_pred_log# 计算准确率
accuracy = accuracy_score(y_true, y_pred)# 计算精确率、召回率和F1分数
precision = precision_score(y_true, y_pred,average='weighted')
recall = recall_score(y_true, y_pred,average='macro')
f1 = f1_score(y_true, y_pred,average='macro')# 计算ROC AUC值(适用于二分类)
if len(set(y_true)) == 2:auc = roc_auc_score(y_true, y_pred_proba)
else:auc = None# 可视化混淆矩阵
conf_matrix = confusion_matrix(y_true, y_pred)
plt.figure(figsize=(10, 7))
sns.heatmap(conf_matrix, annot=True, fmt='d')
plt.xlabel('Predicted')
plt.ylabel('Actual')
plt.show()print(f"Accuracy: {accuracy}")
print(f"Precision: {precision}")
print(f"Recall: {recall}")
print(f"F1 Score: {f1}")if auc is not None:print(f"AUC: {auc}")

执行结果如下:

D:\Program Files\Python312\Lib\site-packages\sklearn\metrics\_classification.py:1565: UndefinedMetricWarning: Precision is ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior._warn_prf(average, modifier, f"{metric.capitalize()} is", len(result))

可视化混淆矩阵:
在这里插入图片描述
准确度、精确率、召回率和F1分数:
Accuracy: 0.5409836065573771
Precision: 0.5119535519125683
Recall: 0.3308976464148878
F1 Score: 0.3170415108810277

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Golang】第二弹-----变量、基本数据类型、标识符

笔上得来终觉浅,绝知此事要躬行 🔥 个人主页:星云爱编程 🔥 所属专栏:Golang 🌷追光的人,终会万丈光芒 🎉欢迎大家点赞👍评论📝收藏⭐文章 目录 一、变量 1.1基本介绍…

go个人论坛项目

搭建个人论坛 项目地址:MyForum: goginvue搭建论坛 - Gitee.com PS:有些地方没有写好,请选择性查看 初始化项目 创建目录结构 利用ini配置初始化框架 [server] AppMode debug HttpPort :3000 JwtKey "dhjasdkajh321"[databa…

日志系统项目——准备工作了解类的设计模式如单例模式、工厂模式、代理模式

1.六大原则 1.1 单一职责原则 类的职责应该单⼀,⼀个⽅法只做⼀件事。职责划分清晰了,每次改动到最⼩单位的⽅法或 类。 使⽤建议:两个完全不⼀样的功能不应该放⼀个类中,⼀个类中应该是⼀组相关性很⾼的函 数、数据的封装 ⽤例…

股指期货基差怎么计算?公式介绍

先说说啥是基差。简单来说,基差就是股指期货价格和现货指数价格之间的差值。就好比你手里有一张股票指数的“未来提货券”(股指期货),但你现在就能买到股票指数(现货指数),这两者之间的价格差&a…

Comfyui 与 SDwebui

ComfyUI和SD WebUI是基于Stable Diffusion模型的两种不同用户界面工具,它们在功能、用户体验和适用场景上各有优劣。 1. 功能与灵活性 ComfyUI:ComfyUI以其节点式工作流设计为核心,强调用户自定义和灵活性。用户可以通过连接不同的模块&…

深圳传音控股手机软件开发岗内推

1.负责手机UI、功能开发 2.负责手机具体模块(通信、多媒体、系统、应用)独立开发 3.负责手机软件调试、log分析等 推荐码:EVHPB3 ,简历第一时间送到HR面前~

never_give_up

一个很有意思的题: never_give_up - Bugku CTF平台 注意到注释里面有1p.html,我们直接在源代码界面看,这样就不会跳转到它那个链接的: 然后解码可得: ";if(!$_GET[id]) {header(Location: hello.php?id1);exi…

Aliyun CTF 2025 web 复现

文章目录 ezoj打卡OKoffens1veFakejump server ezoj 进来一看是算法题,先做了试试看,gpt写了一个高效代码通过了 通过后没看见啥,根据页面底部提示去/source看到源代码,没啥思路,直接看wp吧,跟算法题没啥关系,关键是去…

BigFoot EventAlertMod lua

BigFoot EventAlertMod lua脚本插件,追踪当前目标的DOT,自身的HOT,持续时间监控 D:\Battle.net\World of Warcraft\_classic_\Interface\AddOns\EventAlertMod 想知道技能的ID,执行命令如下:本例子为“神圣牺牲” /e…

ICLR 2025|DAMO开发者矩阵合作专场

点击蓝字 关注我们 AI TIME欢迎每一位AI爱好者的加入! AITIME 01 ICLR 2025预讲会合作专场 AITIME 02 专场信息 01 Dynamic Diffusion Transformer 讲者:赵望博,达摩院研究型实习生 时间:3月12日 19:00-19:15 报告简介&#xff1a…

解决jsch远程sftp连接报错:Exception:Algorithm negotiation fail

问题背景 今天遇见了使用JSch连接服务器时,报错Exception:Algorithm negotiation fail的问题!研究了半天哇!终于解决啦!把解决方案在这里给大家共享一下子! 问题原因 问题原因在于,JSch所支持的加密算法…

【C++】C++11新特性

目录 列表初始化 左值与右值 左值引用和右值引用 移动构造和移动赋值 类型推导 lambda 捕捉列表 函数对象及绑定 bind函数 包装器 Args参数包 抛异常 列表初始化 在C11中一切皆可用列表初始化。 用法:直接在变量名后面加上初始化列表进行初始化 cl…

FreeBSD下安装npm Node.js的22版本 并简单测试js服务器

FreeBSD下安装Node.js 在FreeBSD下安装Node.js很方便,直接pkg安装即可。 使用pkg install安装npm sudo pkg install npm-node22 Updating FreeBSD repository catalogue... Fetching data.pkg: 100% 7 MiB 2.5MB/s 00:03 Processing entries: 100% FreeB…

云原生可观测性体系:数字世界的神经感知网络

引言:从监控到全景式观测的范式升级 Datadog每日处理百万亿指标,Elastic APM实现万级服务拓扑动态发现。Grafana Loki日志分析延迟降至200ms内,Prometheus单集群支持千万时序存储。Uber通过全链路追踪压缩故障定位时间至秒级,Net…

基于VMware的Ubuntu22.04系统安装和配置以及解决Ubuntu共享文件夹无法实现的问题

一、前期准备 本次安装的虚拟机软件是 VMware Workstation Pro 17 登录跳转到 所有产品 进行下载 ​​​跳转到下载页面​​​ 选择 Windows 产品进行安装 勾选协议同意下载 离线版提供:大家根据自己电脑版本配置进行选择下载 本篇使用的虚拟机版本为 VMware Wor…

线程同步与互斥

目录 资源共享问题 (一)临界资源与临界区 (二)多线程并发访问问题 (三)锁 互斥锁原理 加锁原理 解锁原理 互斥锁相关操作接口 互斥锁封装 死锁 死锁产生的四个必要条件 解决死锁方法 &#xff…

SpringMVC 基本概念与代码示例

1. SpringMVC 简介 SpringMVC 是 Spring 框架中的一个 Web 层框架,基于 MVC(Model-View-Controller) 设计模式,提供了清晰的分层结构,适用于 Web 应用开发 SpringMVC 主要组件 DispatcherServlet(前端控…

Banana Pi OpenWRT One Wifi6 OpenWrt社区官方开源路由器评测

第一款不可破解、开源、版权软件、符合 FCC、CE 和 RoHS 的维修权路由器 OpenWRT项目今年已经20岁了,为了纪念这一时刻,Banana Pi OpenWrt One/AP-24.XY路由器开发系统已经上市。这是OpenWRT团队与硬件公司的第一个联合项目。选择 Banana Pi,…

打造智能钉钉机器人:借助智谱GLM-4-Flash实现高效智能回复(文末附源码)

文章目录 前言一、准备工作(一)钉钉机器人(二)智谱 GLM-4-Flash(三)内网穿透工具 cpolar(四)需要准备的工具和环境 二、钉钉机器人的创建与配置步骤1:创建钉钉机器人步骤…

react基础语法视图层类组件

react基础语法视图层&类组件 MVVM *区别mvc&mvvm 两者的区别: 数据模型去渲染视图。数据层改了,vue自己会监听到帮我们拿最新的数据去渲染视图;构建数据构建视图,数据驱动的思想。这一套是非常相似的。 视图中的内容改变&…