【机器学习案列】糖尿病风险可视化及预测

news/2025/2/8 1:31:39/

🧑 博主简介:曾任某智慧城市类企业算法总监,目前在美国市场的物流公司从事高级算法工程师一职,深耕人工智能领域,精通python数据挖掘、可视化、机器学习等,发表过AI相关的专利并多次在AI类比赛中获奖。CSDN人工智能领域的优质创作者,提供AI相关的技术咨询、项目开发和个性化解决方案等服务,如有需要请站内私信或者联系任意文章底部的的VX名片(ID:xf982831907

💬 博主粉丝群介绍:① 群内初中生、高中生、本科生、研究生、博士生遍布,可互相学习,交流困惑。② 热榜top10的常客也在群里,也有数不清的万粉大佬,可以交流写作技巧,上榜经验,涨粉秘籍。③ 群内也有职场精英,大厂大佬,可交流技术、面试、找工作的经验。④ 进群免费赠送写作秘籍一份,助你由写作小白晋升为创作大佬。⑤ 进群赠送CSDN评论防封脚本,送真活跃粉丝,助你提升文章热度。有兴趣的加文末联系方式,备注自己的CSDN昵称,拉你进群,互相学习共同进步。

在这里插入图片描述

机器学习案列】糖尿病风险可视化及预测

  • 一、引言
  • 二、数据准备与探索
  • 三、数据可视化
    • 3.1 血糖水平(Glucose)与糖尿病结果(Outcome)的关系
    • 3.2 血压(BloodPressure)与糖尿病结果(Outcome)的关系
    • 3.3 体重指数(BMI)与糖尿病结果(Outcome)的关系
    • 3.4 年龄(Age)与糖尿病结果(Outcome)的关系
    • 3.5 特征之间的相关性热图
  • 四、可视化数据分析结论
  • 五、训练数据集制做
  • 六、模型训练
  • 七、模型预测与评估
  • 八、特征重要度分析
  • 九、结论

一、引言

  糖尿病是一种日益普遍的慢性疾病,它影响着全球数百万人的生活质量。为了更好地理解糖尿病的发病机制和预测风险,本文将利用一组包含多种生理指标的糖尿病数据集进行可视化分析,并使用结合XGBoost算法,对糖尿病数据集进行分析和预测。接下来直接上代码:

二、数据准备与探索

  首先,我们需要加载并探索数据集。我们将使用Python的pandas库来处理数据,并使用matplotlib和seaborn库来进行可视化。

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from xgboost import XGBClassifier
from sklearn.metrics import accuracy_score, confusion_matrix, classification_report
import matplotlib.pyplot as plt
import seaborn as sns# 加载数据(假设数据集为CSV格式,文件名为diabetes.csv)
url = 'diabetes.csv'  # 请替换为你的数据集路径
data = pd.read_csv(url)print(data.head())
print(data.info())

  从上面的结果可以发现数据包括:Pregnancies(怀孕次数)、Glucose(血糖水平)、BloodPressure(血压)、SkinThickness(皮肤厚度)、Insulin(胰岛素)、BMI(体重指数)、DiabetesPedigreeFunction(糖尿病遗传函数)以及Age(年龄),并通过这些特征来预测Outcome(结果,1表示有糖尿病,0表示没有糖尿病)等特征,并数据集的shape为(768,9)无缺失值。

三、数据可视化

  接下来,我们将利用可视化工具来探索数据中的模式和趋势。

3.1 血糖水平(Glucose)与糖尿病结果(Outcome)的关系

# 设置绘图风格
sns.set(style="whitegrid")
plt.figure(figsize=(10, 6))
sns.boxplot(x='Outcome', y='Glucose', data=data)
plt.title('Blood Glucose Levels by Diabetes Outcome')
plt.show()

3.2 血压(BloodPressure)与糖尿病结果(Outcome)的关系

plt.figure(figsize=(10, 6))
sns.boxplot(x='Outcome', y='BloodPressure', data=data)
plt.title('Blood Pressure by Diabetes Outcome')
plt.show()

3.3 体重指数(BMI)与糖尿病结果(Outcome)的关系

plt.figure(figsize=(10, 6))
sns.boxplot(x='Outcome', y='BMI', data=data)
plt.title('BMI by Diabetes Outcome')
plt.show()

3.4 年龄(Age)与糖尿病结果(Outcome)的关系

plt.figure(figsize=(10, 6))
sns.histplot(data['Age'], hue=data['Outcome'], multiple='stack', kde=True)
plt.title('Age Distribution by Diabetes Outcome')
plt.legend(title='Outcome')
plt.show()

3.5 特征之间的相关性热图

plt.figure(figsize=(12, 8))
correlation_matrix = data.corr()
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', linewidths=0.5)
plt.title('Correlation Matrix of Diabetes Features')
plt.show()

四、可视化数据分析结论

  通过上述可视化分析,我们可以得出以下一些初步结论:

  • 血糖水平(Glucose)与糖尿病结果之间存在显著的正相关关系,即血糖水平越高,患糖尿病的风险越大。
  • 血压(BloodPressure)和体重指数(BMI)也与糖尿病结果有一定的相关性,但不如血糖水平显著。
  • 年龄(Age)分布显示,患有糖尿病的人群中,中老年人占比较大。

五、训练数据集制做

  首先,我们需要加载并准备数据。这里我们使用pandas库来处理数据,并使用scikit-learn库来划分数据集和进行预处理,这里可以结合上面可视化的结果来做一些特征工程,这里将不做处理,读者感兴趣可以自己进行相应的特征工程。

# 划分特征和标签
X = data.drop("Outcome", axis=1)
y = data["Outcome"]# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 特征缩放
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

六、模型训练

  接下来,我们将使用XGBoost算法来训练模型。

# 初始化XGBoost分类
model = XGBClassifier(use_label_encoder=False, eval_metric='logloss')# 训练模型
model.fit(X_train, y_train)

七、模型预测与评估

  训练完成后,我们可以使用测试集来评估模型的性能。

# 进行预测
y_pred = model.predict(X_test)# 计算准确率
accuracy = accuracy_score(y_test, y_pred)
print(f"Accuracy: {accuracy:.2f}")# 打印混淆矩阵和分类报告
conf_matrix = confusion_matrix(y_test, y_pred)
class_report = classification_report(y_test, y_pred)print("Confusion Matrix:")
print(conf_matrix)print("\nClassification Report:")
print(class_report)

八、特征重要度分析

  为了更好地理解数据,我们可以使用一些可视化工具来展示特征的重要性。

# 获取特征重要性
feature_importances = model.feature_importances_
feature_names = X.columns# 创建DataFrame来存储特征重要性
importance_df = pd.DataFrame({'Feature': feature_names,'Importance': feature_importances
}).sort_values(by='Importance', ascending=False)# 可视化特征重要性
plt.figure(figsize=(10, 6))
sns.barplot(x='Importance', y='Feature', data=importance_df)
plt.title('Feature Importance')
plt.show()

  通过特征重要度的分析,可以发现Glucose(血糖水平)和是否发生糖尿病的相关性最高;

九、结论

  通过本文,我们使用了XGBoost算法对糖尿病数据集进行了分析和预测。我们利用了一系列与糖尿病相关的特征,并通过可视化工具展示了特征的重要性。实验结果表明,我们的模型在测试集上取得了不错的准确率。然而,需要注意的是,这只是一个简单的示例,实际应用中可能需要更多的数据预处理、特征工程和模型调优来提高模型的性能。


http://www.ppmy.cn/news/1570200.html

相关文章

《VB.net之沉淀》

 vb.net视频是由曹祖圣和林煌章两位老师轮流讲解的,他们的普通话夹杂着台湾口音,整个项目学习起来蕴含一种别样的味道。每次的讲解都有条不紊,每次的议题都会首先做出简单介绍,这让整个项目学习起来变得有…

Linux 设备驱动分类(快速理解驱动架构)

Linux 设备驱动分类(快速理解驱动架构) 在 Linux 设备驱动开发中,最基础的概念就是 设备驱动的分类。 Linux 设备驱动主要分为 字符设备、块设备和网络设备,它们分别对应不同类型的硬件资源。 理解这些分类,不仅能帮助…

OpenAI新商标申请曝光:AI硬件、机器人、量子计算全线布局?

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

Rust 的内存管理机制

Rust 的内存管理机制是其最核心的创新之一,它通过 所有权系统(Ownership)、借用检查器(Borrow Checker) 和 生命周期(Lifetimes) 在编译期静态保障内存安全,无需垃圾回收(GC)且避免手动管理内存的错误。下面通过代码示例详细解析其机制和安全性原理: 1. 所有权系统(…

websocket自动重连封装

websocket自动重连封装 前端代码封装 import { ref, onUnmounted } from vue;interface WebSocketOptions {url: string;protocols?: string | string[];reconnectTimeout?: number; }class WebSocketService {private ws: WebSocket | null null;private callbacks: { [k…

从零开始部署Dify:后端与前端服务完整指南

从零开始部署Dify:后端与前端服务完整指南 一、环境准备1. 系统要求2. 项目结构 二、后端服务部署1. 中间件启动(Docker Compose)2. 后端环境配置3. 依赖安装与数据库迁移4. 服务启动 三、前端界面搭建1. 环境配置2. 服务启动 四、常见问题排…

因果推断与机器学习—可解释性、公平性和因果机器学习

随着人工智能技术的飞速发展,如人脸识别、自动驾驶、智能音箱和手术机器人等在社会各领域广泛应用,人工智能已成为科技革命和产业变革的核心驱动力。然而,在带来便利的同时,也引发了一系列问题: 数据统计:2016 年,基于美国食品和药物管理局(U.S. Food and Drug Adminis…

vue3 的 onScopeDispose 是什么作用

onScopeDispose 是 Vue 3 中用于管理响应式副作用的一个重要 API,主要用于在当前活跃的 effect 作用域上注册一个处理回调函数。当这个作用域停止时,所注册的回调函数会被调用。这种机制使得开发者能够有效地清理和管理资源,尤其是在组合式函…