基于机器学习的糖尿病数据分析与风险评估系统

2024-08-24 18:20

本文主要是介绍基于机器学习的糖尿病数据分析与风险评估系统,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

B站视频及代码下载:基于机器学习的糖尿病数据分析与风险评估系统_哔哩哔哩_bilibili

1. 项目简介

        糖尿病,作为一种在全球范围内广泛流行的慢性疾病,已经影响了数以百万计的人们的生活,给全球公共健康带来了严重的挑战。因此,糖尿病的预防和控制成为了全球公共卫生领域的一项重要任务。准确预测糖尿病的发病风险对于早期干预和预防至关重要。

        本项目通过可视化分析对数据进行初步探索,再通过斯皮尔曼相关性检验探究患糖尿病的影响因素,通过建立Xgboost模型对是否患有糖尿病就行建模和训练,在不知道临床测量结果的前提下,去预测某人是否会患有糖尿病,测试集预测 AUC 达到 94.2%。通过机器学习模型分析影响糖尿病的主要因素,可以帮助医疗从业者更好地了解病因和风险因素,从而制定有效的预防和治疗策略。

基于机器学习的糖尿病数据分析与风险评估系统

2. 糖尿病数据探索式可视化分析

2.1 数据集读取与预处理

        数据集包含了患者的各项健康指标及其是否患有糖尿病的标签。数据集的主要目标是通过机器学习模型预测糖尿病的发病风险,并分析影响糖尿病的主要健康因素。该数据集包含1879名患者的全面健康数据,唯一标识的ID范围为6000至7878。这些数据包括人口统计细节、生活方式因素、病史、临床测量、药物使用、症状、生活质量评分、环境暴露和健康行为。每位患者都有一名负责的保密医生,确保隐私和保密性。该数据集非常适合研究人员和数据科学家探索与糖尿病相关的因素、开发预测模型和进行统计分析。

data = pd.read_csv('diabetes_data.csv')
data.shape# 删除患者ID列和主管医生列
data.drop(['PatientID','DoctorInCharge'],axis=1,inplace=True)# 查看数据信息
data.info()# 查看重复值
data.duplicated().sum()

 2.2 患者基本信息统计分布

  • 年龄:共有1879条记录,年龄从20岁到90岁不等,平均年龄约为55.04岁。
  • 性别:共有2个不同的性别分类,其中男性(0)和女性(1)均有记录,男性占52.51%,女性占47.49%。
  • 种族:共有4个不同的种族分类,其中最常见的种族是白种人(0),有1175人。
  • 社会经济地位:共有3个不同的社会经济地位分类,社会经济地位中等(1)最常见,有751人。
  • 教育水平分布:共有4个不同的教育水平分类,学士学位(2)最常见,有1116人。
  • BMI:体质指数范围从15.03到39.99,平均值约为27.69。

2.3 吸烟饮酒等生活习惯统计分布 

  • 吸烟:共有2个分类,吸烟者(1)和非吸烟者(0),非吸烟者占71.85%。
  • 饮酒量:饮酒量从0.000928到19.996231不等,平均饮酒量约为10.10。
  • 每周体育活动时间:每周体育活动时间从0.004089小时到9.993893小时不等,平均每周体育活动时间为5.20小时。
  • 饮食质量:饮食质量评分从0.000885到9.998677,平均值约为4.90。
  • 睡眠质量:数据缺乏具体描述,但睡眠质量评分预计为正态分布。
  • 生活质量:生活质量评分从0.00239到99.7885,平均值约为48.51。    
# Compute the correlation matrix
corr = data.corr()# Generate a mask for the upper triangle
mask = np.triu(np.ones_like(corr, dtype=bool))# Set up the matplotlib figure
f, ax = plt.subplots(figsize=(11, 9))# Generate a custom diverging colormap
cmap = sns.diverging_palette(230, 20, as_cmap=True)# Draw the heatmap with the mask and correct aspect ratio
sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0,square=True, linewidths=.5, cbar_kws={"shrink": .5})plt.show()

        类似维度的统计分析,还包括其他疾病患病情况、临床检查结果、药物使用情况、症状情况、生活及工作环境、健康状况等维度,此处篇幅限制暂省略,具体可参考演示视频和源代码。

3. 糖尿病发病风险的影响因素分析

        通过计算特征与预测目标之间的斯皮尔曼相关性,并绘制相关性热力分布图。

# Compute the correlation matrix
corr = data.corr()# Generate a mask for the upper triangle
mask = np.triu(np.ones_like(corr, dtype=bool))# Set up the matplotlib figure
f, ax = plt.subplots(figsize=(11, 9))# Generate a custom diverging colormap
cmap = sns.diverging_palette(230, 20, as_cmap=True)# Draw the heatmap with the mask and correct aspect ratio
sns.heatmap(corr, mask=mask, cmap=cmap, vmax=.3, center=0,square=True, linewidths=.5, cbar_kws={"shrink": .5})plt.show()

        个人统计信息与患糖尿病之间的相关性分析:

        类似维度的统计分析,还包括其他疾病患病情况、临床检查结果、药物使用情况、症状情况、生活及工作环境、健康状况等维度,此处篇幅限制暂省略,具体可参考演示视频和源代码。 

4. 机器学习建模预测糖尿患病情况

4.1 数据集切分

import xgboost as xgb
from sklearn.model_selection import train_test_split
from sklearn.metrics import auc, roc_curve
from sklearn.metrics import accuracy_score, precision_score, recall_scorey_train_all = data['Diagnosis']
X_train_all = data.drop(columns=['Diagnosis'])X_train, X_valid, y_train, y_valid = train_test_split(X_train_all, y_train_all, test_size=0.1, random_state=42)
X_train, X_test, y_train, y_test = train_test_split(X_train, y_train, test_size=0.1, random_state=42)print('train: {}, valid: {}, test: {}'.format(X_train.shape[0], X_valid.shape[0], X_test.shape[0]))

4.2 梯度提升决策树 Xgboost 模型 

df_columns = X_train.columns.values
print('===> feature count: {}'.format(len(df_columns)))xgb_params = {'eta': 0.05,'min_child_weight': 8,'colsample_bytree': 0.5,'max_depth': 4,'subsample': 0.9,'lambda': 2.0,'eval_metric': 'auc','objective': 'binary:logistic','nthread': -1,'silent': 1,'booster': 'gbtree'
}dtrain = xgb.DMatrix(X_train, y_train, feature_names=df_columns)
dvalid = xgb.DMatrix(X_valid, y_valid, feature_names=df_columns)watchlist = [(dtrain, 'train'), (dvalid, 'valid')]

4.3 模型训练

model = xgb.train(dict(xgb_params),dtrain,evals=watchlist,verbose_eval=10,early_stopping_rounds=100,num_boost_round=4000)

        训练日志:

[0]	train-auc:0.64543	valid-auc:0.54761
[10]	train-auc:0.97141	valid-auc:0.95499
[20]	train-auc:0.97530	valid-auc:0.95752
[30]	train-auc:0.97728	valid-auc:0.95941
[40]	train-auc:0.97865	valid-auc:0.95917
[50]	train-auc:0.98003	valid-auc:0.96248
[60]	train-auc:0.98180	valid-auc:0.96389
[70]	train-auc:0.98345	valid-auc:0.96614
[80]	train-auc:0.98446	valid-auc:0.96791
[90]	train-auc:0.98518	valid-auc:0.96684
[100]	train-auc:0.98612	valid-auc:0.96625
[110]	train-auc:0.98665	valid-auc:0.96743
[120]	train-auc:0.98709	valid-auc:0.96743
[130]	train-auc:0.98756	valid-auc:0.96791
[140]	train-auc:0.98839	valid-auc:0.96661
[150]	train-auc:0.98915	valid-auc:0.96637
[160]	train-auc:0.98975	valid-auc:0.96649
[170]	train-auc:0.99045	valid-auc:0.96661
[178]	train-auc:0.99088	valid-auc:0.96625

4.4 特征重要程度分布

        可以看出,HbA1c 糖化血红蛋白 的特征对于预测是否患病的重要程度最高,进一步的,分析该特征对于是否患有糖尿病的分布区别:

plt.figure(figsize=(15, 10))# 定期体检频率
plt.subplot(2, 2, 1)
sns.distplot(data[data['Diagnosis'] == 1]['HbA1c'], bins=50, label='患糖尿病')
sns.distplot(data[data['Diagnosis'] == 0]['HbA1c'], bins=50, label='未患糖尿病')
plt.title('糖化血红蛋白分布')
plt.xlabel('定期体检频率')
plt.legend()
plt.ylabel('频数')
plt.show()

        可以看出,该特征的确具有非常明显的区分效果。 

4.5 模型性能评估

4.5.1 AUC 指标评估

        使用已经训练好的模型对训练集、验证集和测试集进行预测,并计算每个数据集的预测结果的AUC(Area Under the Curve)得分

# predict train
predict_train = model.predict(dtrain)
train_auc = evaluate_score(predict_train, y_train)# predict validate
predict_valid = model.predict(dvalid)
valid_auc = evaluate_score(predict_valid, y_valid)# predict test
dtest = xgb.DMatrix(X_test, feature_names=df_columns)
predict_test = model.predict(dtest)
test_auc = evaluate_score(predict_test, y_test)print('训练集 auc = {:.7f} , 验证集 auc = {:.7f} , 测试集 auc = {:.7f}\n'.format(train_auc, valid_auc, test_auc))
训练集 auc = 0.9908796 , 验证集 auc = 0.9662537 , 测试集 auc = 0.9422857

4.5.2 测试集预测 ROC 曲线

fpr, tpr, _ = roc_curve(y_test, predict_test)
roc_auc = auc(fpr, tpr)plt.figure(figsize=(8,8))
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.02, 1.0])
plt.ylim([0.0, 1.05])
plt.xlabel('False Positive Rate')
plt.ylabel('True Positive Rate')
plt.title('ROC curve')
plt.legend(loc="lower right")
plt.show()

4.5.3 测试集预测结果混淆矩阵计算 

5. 基于机器学习的糖尿病数据分析与风险评估系统

5.1 系统首页

5.2 糖尿病风险评估实时预测

        在Flask 应用程序中的路由处理函数 submit_and_predict,它负责接收通过 HTTP POST 方法提交的测试文件,并使用预训练好的模型来预测糖尿病的发生概率。

@app.route('/submit_and_predict', methods=['POST'])
def submit_and_predict():"""糖尿病在线预测"""test_file = request.files['file']filename = test_file.filename# 保存上传的文件test_file_path = './static/predict_test/{}'.format(filename)test_file.save(test_file_path)test_data = pd.read_csv(test_file_path)......dtest = xgb.DMatrix(test_data, feature_names=df_columns)preds = model.predict(dtest)pred_labels = (preds > 0.5).astype(int)......return jsonify({'success': True,'header': header,'rows': rows})

6. 结论

        本项目通过可视化分析对数据进行初步探索,再通过斯皮尔曼相关性检验探究患糖尿病的影响因素,通过建立Xgboost模型对是否患有糖尿病就行建模和训练,在不知道临床测量结果的前提下,去预测某人是否会患有糖尿病,测试集预测 AUC 达到 94.2%。通过机器学习模型分析影响糖尿病的主要因素,可以帮助医疗从业者更好地了解病因和风险因素,从而制定有效的预防和治疗策略。 

 B站视频及代码下载:基于机器学习的糖尿病数据分析与风险评估系统_哔哩哔哩_bilibili

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。技术交流、源码获取认准下方 CSDN 官方提供的学长 QQ 名片 :)

精彩专栏推荐订阅:

1. Python数据挖掘精品实战案例

2. 计算机视觉 CV 精品实战案例

3. 自然语言处理 NLP 精品实战案例

这篇关于基于机器学习的糖尿病数据分析与风险评估系统的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1103244

相关文章

HarmonyOS学习(七)——UI(五)常用布局总结

自适应布局 1.1、线性布局(LinearLayout) 通过线性容器Row和Column实现线性布局。Column容器内的子组件按照垂直方向排列,Row组件中的子组件按照水平方向排列。 属性说明space通过space参数设置主轴上子组件的间距,达到各子组件在排列上的等间距效果alignItems设置子组件在交叉轴上的对齐方式,且在各类尺寸屏幕上表现一致,其中交叉轴为垂直时,取值为Vert

Ilya-AI分享的他在OpenAI学习到的15个提示工程技巧

Ilya(不是本人,claude AI)在社交媒体上分享了他在OpenAI学习到的15个Prompt撰写技巧。 以下是详细的内容: 提示精确化:在编写提示时,力求表达清晰准确。清楚地阐述任务需求和概念定义至关重要。例:不用"分析文本",而用"判断这段话的情感倾向:积极、消极还是中性"。 快速迭代:善于快速连续调整提示。熟练的提示工程师能够灵活地进行多轮优化。例:从"总结文章"到"用

不懂推荐算法也能设计推荐系统

本文以商业化应用推荐为例,告诉我们不懂推荐算法的产品,也能从产品侧出发, 设计出一款不错的推荐系统。 相信很多新手产品,看到算法二字,多是懵圈的。 什么排序算法、最短路径等都是相对传统的算法(注:传统是指科班出身的产品都会接触过)。但对于推荐算法,多数产品对着网上搜到的资源,都会无从下手。特别当某些推荐算法 和 “AI”扯上关系后,更是加大了理解的难度。 但,不了解推荐算法,就无法做推荐系

基于人工智能的图像分类系统

目录 引言项目背景环境准备 硬件要求软件安装与配置系统设计 系统架构关键技术代码示例 数据预处理模型训练模型预测应用场景结论 1. 引言 图像分类是计算机视觉中的一个重要任务,目标是自动识别图像中的对象类别。通过卷积神经网络(CNN)等深度学习技术,我们可以构建高效的图像分类系统,广泛应用于自动驾驶、医疗影像诊断、监控分析等领域。本文将介绍如何构建一个基于人工智能的图像分类系统,包括环境

水位雨量在线监测系统概述及应用介绍

在当今社会,随着科技的飞速发展,各种智能监测系统已成为保障公共安全、促进资源管理和环境保护的重要工具。其中,水位雨量在线监测系统作为自然灾害预警、水资源管理及水利工程运行的关键技术,其重要性不言而喻。 一、水位雨量在线监测系统的基本原理 水位雨量在线监测系统主要由数据采集单元、数据传输网络、数据处理中心及用户终端四大部分构成,形成了一个完整的闭环系统。 数据采集单元:这是系统的“眼睛”,

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

学习hash总结

2014/1/29/   最近刚开始学hash,名字很陌生,但是hash的思想却很熟悉,以前早就做过此类的题,但是不知道这就是hash思想而已,说白了hash就是一个映射,往往灵活利用数组的下标来实现算法,hash的作用:1、判重;2、统计次数;

嵌入式QT开发:构建高效智能的嵌入式系统

摘要: 本文深入探讨了嵌入式 QT 相关的各个方面。从 QT 框架的基础架构和核心概念出发,详细阐述了其在嵌入式环境中的优势与特点。文中分析了嵌入式 QT 的开发环境搭建过程,包括交叉编译工具链的配置等关键步骤。进一步探讨了嵌入式 QT 的界面设计与开发,涵盖了从基本控件的使用到复杂界面布局的构建。同时也深入研究了信号与槽机制在嵌入式系统中的应用,以及嵌入式 QT 与硬件设备的交互,包括输入输出设

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

零基础学习Redis(10) -- zset类型命令使用

zset是有序集合,内部除了存储元素外,还会存储一个score,存储在zset中的元素会按照score的大小升序排列,不同元素的score可以重复,score相同的元素会按照元素的字典序排列。 1. zset常用命令 1.1 zadd  zadd key [NX | XX] [GT | LT]   [CH] [INCR] score member [score member ...]