机器学习/数据分析案例---糖尿病预测

news2024/9/21 2:48:09
  • 🍨 本文为🔗365天深度学习训练营 中的学习记录博客
  • 🍖 原作者:K同学啊

前言

  • 这是一篇数据分析/机器学习很好的入门案例,对糖尿病的影响进行预测和分析
  • 通过随机森林预测,平均准确率和召回率都不错
  • 不足:没有对特性进行特征提取,算法没有运用多个

文章目录

  • 1、导入数据
  • 2、数据预处理
  • 3、数据分析
    • 相关性分析
  • 5、模型创建
    • 1、数据集划分
    • 2、模型的创建
    • 模型预测
  • 6、模型评估
  • 7、特征重要性展示
  • 8、总结

1、导入数据

import numpy as np 
import pandas as pd 
import matplotlib.pyplot as plt 

data = pd.read_excel('dia.xls')
data
卡号性别年龄高密度脂蛋白胆固醇低密度脂蛋白胆固醇极低密度脂蛋白胆固醇甘油三酯总胆固醇脉搏舒张压高血压史尿素氮尿酸肌酐体重检查结果是否糖尿病
0180544210381.252.991.070.645.31838304.99243.35010
1180544220311.151.990.840.503.98856304.72391.04710
2180544230271.292.210.690.604.19736105.87325.75110
3180544240330.932.010.660.843.60836002.40203.24020
4180544250361.172.830.830.734.83856704.09236.84300
...................................................
1001202611821861.583.811.111.676.50927308.60406.29311
1002202611920671.484.561.312.597.35768604.00262.55931
1003202612011671.302.900.841.615.041037504.70393.69831
1004202612130461.212.310.671.344.19788403.80219.25121
1005202612370361.122.801.153.595.0710211305.70462.46711

1006 rows × 16 columns

2、数据预处理

# 查看数据信息
data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1006 entries, 0 to 1005
Data columns (total 16 columns):
 #   Column      Non-Null Count  Dtype  
---  ------      --------------  -----  
 0   卡号          1006 non-null   int64  
 1   性别          1006 non-null   int64  
 2   年龄          1006 non-null   int64  
 3   高密度脂蛋白胆固醇   1006 non-null   float64
 4   低密度脂蛋白胆固醇   1006 non-null   float64
 5   极低密度脂蛋白胆固醇  1006 non-null   float64
 6   甘油三酯        1006 non-null   float64
 7   总胆固醇        1006 non-null   float64
 8   脉搏          1006 non-null   int64  
 9   舒张压         1006 non-null   int64  
 10  高血压史        1006 non-null   int64  
 11  尿素氮         1006 non-null   float64
 12  尿酸          1006 non-null   float64
 13  肌酐          1006 non-null   int64  
 14  体重检查结果      1006 non-null   int64  
 15  是否糖尿病       1006 non-null   int64  
dtypes: float64(7), int64(9)
memory usage: 125.9 KB
# 查看缺失值
data.isnull().sum()
卡号            0
性别            0
年龄            0
高密度脂蛋白胆固醇     0
低密度脂蛋白胆固醇     0
极低密度脂蛋白胆固醇    0
甘油三酯          0
总胆固醇          0
脉搏            0
舒张压           0
高血压史          0
尿素氮           0
尿酸            0
肌酐            0
体重检查结果        0
是否糖尿病         0
dtype: int64

绘制纸箱图

# 通过绘制箱型图,判断是否存在异常值
import seaborn as sns 
#设置字体
from pylab import mpl
mpl.rcParams["font.sans-serif"] = ["SimHei"]  # 显示中文
plt.rcParams['axes.unicode_minus'] = False		# 显示负号

feature_name = {
    '性别': '性别',
    '年龄': '年龄',
    '高密度脂蛋白胆固醇': '高密度脂蛋白胆固醇',
    '低密度脂蛋白胆固醇': '低密度脂蛋白胆固醇',
    '极低密度脂蛋白胆固醇': '极低密度脂蛋白胆固醇',
    '甘油三酯': '甘油三酯',
    '总胆固醇': '总胆固醇',
    '脉搏': '脉搏',
    '舒张压': '舒张压',
    '高血压史': '高血压史',
    '尿素氮': '尿素氮',
    '肌酐': '肌酐',
    '体重检查结果': '体重检查结果',
    '是否糖尿病': '是否糖尿病'
}

plt.figure(figsize=(20, 20))

for i, (col, col_name) in enumerate(feature_name.items(), 1):
    plt.subplot(4, 4, i)
    sns.boxplot(y=data[col])
    plt.title(f'{col_name}的纸箱图', fontsize=14)
    plt.ylabel('数值', fontsize=12)
    plt.grid(axis='y', linestyle='--', alpha=0.7)
    
plt.tight_layout()
plt.show()

在这里插入图片描述

参考值(正常)

  • 高密度脂蛋白胆固醇:0.83-1.96 mmol/L
  • 总胆固醇(TC)或(CHOL)参考范围:3~5.2 mmol/L
  • 甘油三酯(TG) 参考范围:0~1.7 mmol/L
  • 低密度脂蛋白(LDL-C)参考范围:0~3.12 mmol/L

分析(查阅一点资料决定的)

  • 低密度脂蛋白胆固醇,高于8的去除
  • 极低密度脂蛋白胆固醇,高于8的去除
  • 甘油三酯,高于40去除
  • 总胆固醇,高于12的删除
  • 肌酐,800(>790)的删除
  • 尿素氮,>15删除

写代码运行发现
发现全部删去了,这里假设以上情况均属于偶然,均存在,因为生病情况受到影响因素很复杂

分析

  • 影响特征的大量数均分布在中位数附件,比较平均于对称

3、数据分析

# 统计分析
data.describe()
卡号性别年龄高密度脂蛋白胆固醇低密度脂蛋白胆固醇极低密度脂蛋白胆固醇甘油三酯总胆固醇脉搏舒张压高血压史尿素氮尿酸肌酐体重检查结果是否糖尿病
count1.006000e+031006.0000001006.0000001006.0000001006.0000001006.0000001006.0000001006.0000001006.0000001006.0000001006.0000001006.0000001006.0000001006.0000001006.0000001006.000000
mean1.838279e+070.59841050.2882701.1522012.7074750.9983111.8967204.85762480.81908576.8866800.1739565.562684339.34542764.1063621.6093440.444334
std6.745088e+050.49046416.9214870.3134260.8480700.7158912.4214031.02997312.54227012.7631730.3792601.64634284.56984629.3384370.7723270.497139
min1.805442e+070.00000020.0000000.4200000.8400000.1400000.3500002.41000041.00000045.0000000.0000002.210000140.80000030.0000000.0000000.000000
25%1.807007e+070.00000037.2500000.9200002.1000000.6800000.8800004.20000072.00000067.0000000.0000004.450000280.85000051.2500001.0000000.000000
50%1.807036e+071.00000050.0000001.1200002.6800000.8500001.3350004.78500079.00000076.0000000.0000005.340000333.00000062.0000002.0000000.000000
75%1.809726e+071.00000060.0000001.3200003.2200001.0900002.0875005.38000088.00000085.0000000.0000006.367500394.00000072.0000002.0000001.000000
max2.026124e+071.00000093.0000002.5000007.98000011.26000045.84000012.610000135.000000119.0000001.00000018.640000679.000000799.0000003.0000001.000000

主要是老年人居多

相关性分析

注意:seaborn绘制热力图的时候,版本需要与matplotlib版本配对,matplotlib版本需要在3.8.0以下

# 相关性分析
import seaborn as sns 

data.drop(columns=['卡号'], inplace=True)

plt.figure(figsize=(20, 15))   
sns.heatmap(data.corr(),annot=True)

plt.show()


在这里插入图片描述

除了高密度脂蛋白胆固醇外,其他均成正相关

5、模型创建

1、数据集划分

from sklearn.model_selection import train_test_split
# 划分特征值和目标值
X = data.drop(['是否糖尿病', '高密度脂蛋白胆固醇'], axis=1)  # 高密度脂蛋白胆固醇: 与目标值负相关
y = data['是否糖尿病']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

2、模型的创建

from sklearn.tree import DecisionTreeClassifier

# 创建模型与训练
model = DecisionTreeClassifier()
model.fit(X_train, y_train)

模型预测

y_pred = model.predict(X_test)

6、模型评估

from sklearn.metrics import classification_report

reporter = classification_report(y_test, y_pred)
print(reporter)
              precision    recall  f1-score   support

           0       0.81      0.78      0.80       120
           1       0.70      0.73      0.71        82

    accuracy                           0.76       202
   macro avg       0.75      0.76      0.76       202
weighted avg       0.76      0.76      0.76       202

准确率、召回率、f1得分很高,模型效果极好

7、特征重要性展示

feature_importances = model.feature_importances_
features_rf = pd.DataFrame({'特征': X.columns, '重要度': feature_importances})
features_rf.sort_values(by='重要度', ascending=False, inplace=True)
plt.figure(figsize=(6, 5))
sns.barplot(x='重要度', y='特征', data=features_rf)
plt.xlabel('重要度')
plt.ylabel('特征')
plt.title('随机森林特征图')
plt.show()


在这里插入图片描述

8、总结

  1. 环境:seaborn绘制热力图的时候,版本需要与matplotlib版本配对,matplotlib版本需要在3.8.0以下
  2. 随机森林:可以决解多重共线性问题
  3. 进一步熟悉了数据分析的过程
  4. 不足:算法的扩展性、数据特征提取没有做

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

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

相关文章

Photomator 3.3.22 (macOS Universal) - 照片编辑软件

Photomator 3.3.22 (macOS Universal) - 照片编辑软件 适用于 Mac、iPhone 和 iPad 的终极照片编辑器 请访问原文链接&#xff1a;https://sysin.org/blog/photomator/&#xff0c;查看最新版。原创作品&#xff0c;转载请保留出处。 作者主页&#xff1a;sysin.org Photoma…

美发店拓客营销预约到店连锁小程序拓展

传统印象里的10元美发店&#xff0c;在城市里已然升级为大店&#xff0c;服务多样化&#xff0c;价格也是几十元到几千元不等数个区间&#xff0c;除了单店外也有连锁品牌进行区域拓展&#xff0c;以量和品牌形象收获更多客户和自身的宣传等。 尤其是规模相对较大的门店&#…

AcWing 896. 最长上升子序列 II

学习视频↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 【E04 线性DP 最长上升子序列 二分优化】 O ( n l o g n ) O(nlogn) O(nlogn) #include<iostream> #include<algorithm> #define N 100010 using namespace std; int n; int a[N],q[N]; i…

【软件工程】软件工程

考点2 软件工程 一、定义 二、软件工程基本原理 三、软件工程方法学&#xff08;范型&#xff09; 题目 选择题

数字乡村振兴智慧农业整体规划建设方案

1. 项目建设需求 《数字乡村振兴智慧农业整体规划建设方案》旨在通过遥感、物联网等技术&#xff0c;实现土地资源监测、测土配方施肥、农产品销售分析、农资监管、物流配送监管、农业专家库、市场分析、产业链应用和金融服务。 2. 项目需求分析 项目需求覆盖生产、经营、监…

关于计算机网络原理问题

2017年12月07日星期四&#xff0c; 问题&#xff1a; 答案&#xff1a; 接下来&#xff0c;我们来分析和解答&#xff0c; 首先&#xff0c;你要知道&#xff0c;一个byte&#xff08;字节&#xff09;能表示两个十六进制数&#xff0c;那么四个字节就可以表示8个十六进制数…

Simulink代码生成:关系运算与逻辑运算

文章目录 1 引言2 模块使用实例2.1 关系运算2.2 关系运算 3 代码生成4 总结 1 引言 在Simulink中经常需要判断两个信号的大小关系、是否相等&#xff0c;或者判断布尔类型信号的与、或、非等。本文研究通过关系运算与逻辑运算模块实现上述需求。 2 模块使用实例 2.1 关系运算…

hello树先生——二叉搜索树

文章目录 一.搜索二叉树的性质二&#xff0c;功能函数接口1.二叉树的节点结构&#xff0c;分为左右指针和数据2.二叉树的插入函数3.删除接口4.中序遍历 三.测试项目 一.搜索二叉树的性质 若它的左子树不为空&#xff0c;则左子树上所有节点的值都小于根节点的值若它的右子树不…

uniapp scroll-view滚动触底加载 height高度自适应

背景&#xff1a; scroll-view组件是使用&#xff0c;官网说必须给一个高度height&#xff0c;否则无法滚动&#xff0c;所以刚开始设置了<scroll-view :style"height: 94vh" :scroll-y"true">设置了一个高度&#xff0c;想着vh应该挺合适的&#xf…

眼镜清洗机哪个品牌好?2024超声波清洗机推荐

眼镜作为日常生活不可或缺的配件&#xff0c;其卫生状况直接影响着我们的健康。日常简单的擦拭往往忽略了隐匿于镜片细微处的细菌群落&#xff0c;未彻底清洁的眼镜可能潜藏健康隐患。因此&#xff0c;深度清洁眼镜显得尤为关键&#xff0c;而超声波清洗机正是一种高效便捷的解…

探索《黑神话:悟空》背后的先进技术

黑神话&#xff1a;悟空》是一款备受期待的国产动作角色扮演游戏&#xff0c;凭借其令人惊叹的画面效果和极具深度的游戏玩法&#xff0c;吸引了全球玩家的目光。究竟是什么让这款游戏如此出色&#xff1f;让我们一起来探讨《黑神话&#xff1a;悟空》在开发过程中采用的几项尖…

java计算机毕设课设—固定资产管理系统(附源码、文章、相关截图、部署视频)

这是什么系统&#xff1f; java计算机毕设课设—固定资产管理系统(附源码、文章、相关截图、部署视频) 获取资料方式在最下方 本系统主要用于高校中的“资产”进行管理。具体地讲&#xff0c;固定资产管理系统就是通过资产的增加、删除、查看、借出、归还、维修等一系列手段…

lvs-nat的https模式设置

前言&#xff1a;LVS工作模式分为NAT模式、TUN模式、以及DR模式。在lvs服务器上&#xff0c;设置虚拟ip并做负载均衡使用。使用LVS架设的服务器集群系统有三个部分组成&#xff1a;最前端的负载均衡层&#xff08;Loader Balancer&#xff09;&#xff0c;中间的服务器群组层&a…

NCH DrawPad Pro for Mac/Win:强大的图像编辑处理软件

NCH DrawPad Pro for Mac/Win是一款功能全面的图像编辑和设计软件&#xff0c;专为Mac和Windows用户设计。它不仅适用于专业设计师&#xff0c;也深受业余爱好者和创意工作者的喜爱。DrawPad Pro凭借其丰富的绘图工具、强大的编辑功能和便捷的模板库&#xff0c;为用户提供了卓…

书生大模型实战营基础(3)——LangGPT结构化提示词编写实践

目录 0、基础知识 1、准备 1.1环境配置 1.2创建项目路径 2、模型部署 2.1获取模型 2.2部署模型为OpenAI server 3.提示工程(Prompt Engineering) 3.1 什么是Prompt 3.2 什么是提示工程 3.3 提示设计框架 4、任务 4.1利用LangGPT优化提示词 0、基础知识 Prompt&…

在Ubuntu系统上使用Docker部署.NET 6程序

基础用法 1. 安装Docker 首先&#xff0c;确保你的Ubuntu系统上安装了Docker。可以通过以下命令安装Docker&#xff1a; sudo apt update sudo apt install docker.io 安装完成后&#xff0c;启动Docker并设置为开机自启&#xff1a; sudo systemctl start docker sudo sys…

站长神器,AI批量生成原创文章工具免费用还能自动发布到站点

今天给大家带来的一款站长神器软件&#xff0c;一个专业AI原创文章批量自动生成工具&#xff0c;支持多种CMS&#xff0c;站群内容一键式管理分发&#xff0c;支持多任务创建&#xff0c;自动根据文章内容关联配图&#xff0c;每条任务支持独立AI模型、独立创作风格、独立写作模…

一体化运维管理软件在大中型机房管理中的挑战与应对方案

随着信息化技术的不断发展&#xff0c;大、中型机房作为企业数据处理与存储的核心场所&#xff0c;其运维管理的复杂性和挑战性也日益增加。面对日益增长的运维需求和不断变化的业务环境&#xff0c;传统的手工运维方式已经无法满足现代机房管理的要求。因此&#xff0c;一体化…

Vulnhub靶场 | DC系列 - DC5

文章目录 DC-5信息收集扫描靶机的IP地址扫描开放的端口访问80端口 文件包含漏洞渗透过程向日志中写入一句话木马使用蚁剑连接webshell在 /tmp下新建文件 一句话木马&#xff08;留个后门&#xff09;使用蚁剑虚拟终端反弹shell到kali在kali开启监听使用蚁剑虚拟终端反弹shell到…

OpenCV库的一些实用代码示例

OpenCV&#xff08;Open Source Computer Vision Library&#xff09;是一个开源的计算机视觉和机器学习软件库&#xff0c;它提供了大量的图像和视频分析功能。除了你提到的灰度转换、图像反转、高斯滤波和图像保存等基本操作外&#xff0c;OpenCV还包含许多其他功能&#xff…