A002-随机森林模型实现糖尿病预测

一、软硬件环境说明

硬件配置
  1. 处理器:Intel Core i5及以上
  2. 内存:8GB DDR4 及以上
  3. 存储:256GB SSD
软件环境
  1. 操作系统:Windows 10
  2. Python版本:3.8(需安装以下库):

pandas==1.3.5 # 数据处理

scikit-learn==1.0.2 # 机器学习工具

matplotlib==3.5.1 # 可视化

numpy==1.21.6 # 数值计算

二、数据均衡处理技术

原始数据分布

|--------|-------|----|
| 类别 | 样本数量 | 占比 |
| 未患病(0) | 15696 | |
| 患病(1) | 5312 | |

下采样过程
  1. 样本分离

通过df.target字段分割多数类(未患病0)与少数类(患病1)

python 复制代码
df['target'] = df['Diabetes_Type'].apply(lambda x: 1 if x in ['Type 1', 'Type 2'] else 0)

# 分离正负样本
df_majority = df[df.target == 0]
df_minority = df[df.target == 1]
  1. 平衡处理

    python 复制代码
    = resample(df_majority,
    
                                n_samples=len(df_minority),  # 取5312个样本
    
                                random_state=42)  # 确保可复现性
  2. 重构数据集

合并下采样后的多数类与原始少数类

新数据集样本量:10624(5312:5312,1:1平衡)

python 复制代码
# 合并新数据集
df_downsampled = pd.concat([df_majority_down, df_minority])
df = pd.get_dummies(df,  columns=['Gender','Region','Dietary_Habits'])
features = ['Age','BMI','Fast_Food_Intake','HbA1c','Cholesterol_Level','Stress_Level','Sleep_Hours']

# 划分数据集
X_train = df_downsampled[features]
y_train = df_downsampled['target']
X_test = df[features]
y_test = df['target']

三、模型构建与评估

随机森林配置
python 复制代码
RandomForestClassifier(

    n_estimators=200,     # 决策树数量(增强模型稳定性)

    max_depth=8,          # 控制过拟合

    class_weight='balanced' # 补偿下采样可能丢失的信息

)
ROC曲线解读
  1. 生成逻辑

用原始数据集作为测试集(保持真实分布)

计算患病概率阈值从0到1时的TPR/FPR变化

  1. 关键指标

AUC值:0.740

最佳阈值:0.48

对应指标:

    • 灵敏度:88.6%
    • 特异度:85.3%

四、可视化呈现

  1. ROC曲线图
  1. 数据分布对比图

测试数据

|----|-----|--------|-----------|---------------|-------------------------|----------------------|--------------------|------|-------------------------|----------------|------------------|---------|---------------------|---------------------|-------|-------------------|-------------|---------------|-------------|--------------|-------------|---|
| ID | Age | Gender | Region | Family_Income | Family_History_Diabetes | Parent_Diabetes_Type | Genetic_Risk_Score | BMI | Physical_Activity_Level | Dietary_Habits | Fast_Food_Intake | Smoking | Alcohol_Consumption | Fasting_Blood_Sugar | HbA1c | Cholesterol_Level | Prediabetes | Diabetes_Type | Sleep_Hours | Stress_Level | Screen_Time | |
| 1 | 21 | Male | North | 2209393 | No | None | 6 | 31.4 | Sedentary | Moderate | 1 | Yes | No | 95.6 | 9.5 | 163.3 | Yes | None | 7.7 | 7 | 6.8 | |
| 2 | 18 | Female | Central | 387650 | No | None | 5 | 24.4 | Active | Unhealthy | 5 | No | No | 164.9 | 5 | 169.1 | Yes | None | 7.9 | 8 | 6 | |
| 3 | 25 | Male | North | 383333 | No | None | 6 | 20 | Moderate | Moderate | 2 | No | No | 110.5 | 8.3 | 296.3 | Yes | Type 1 | 7.6 | 8 | 4.6 | |
| 4 | 22 | Male | Northeast | 2443733 | No | None | 4 | 39.8 | Moderate | Unhealthy | 4 | No | Yes | 160.7 | 4.6 | 252.8 | No | None | 9.5 | 2 | 10.9 | |
| 5 | 19 | Male | Central | 1449463 | No | None | 4 | 19.2 | Moderate | Moderate | 0 | No | Yes | 73.7 | 5.3 | 252.3 | No | None | 6.4 | 2 | 1.3 | |
| 6 | 21 | Female | Central | 2142229 | Yes | None | 3 | 36.4 | Active | Unhealthy | 4 | No | No | 78.9 | 4.7 | 249 | Yes | Type 2 | 4 | 3 | 5.2 | |
| 7 | 24 | Female | North | 2357529 | No | Type 2 | 7 | 39 | Moderate | Unhealthy | 9 | No | No | 76.1 | 6.1 | 198.4 | Yes | Type 2 | 4 | 9 | 4.9 | |
| 8 | 17 | Male | East | 2395436 | No | None | 1 | 24.5 | Moderate | Moderate | 5 | No | Yes | 95.6 | 7.9 | 133.6 | Yes | None | 5 | 6 | 2.1 | |
| 9 | 21 | Female | East | 1288764 | No | Type 2 | 3 | 18.1 | Sedentary | Healthy | 0 | No | No | 177.2 | 5.1 | 235.9 | No | None | 9 | 2 | 6.8 | |
| 10 | 25 | Female | North | 127666 | Yes | None | 3 | 17.7 | Sedentary | Unhealthy | 4 | No | No | 102.3 | 5.1 | 289.1 | Yes | None | 4.8 | 8 | 10.4 | |
| 11 | 25 | Male | Central | 1117881 | No | Type 1 | 5 | 25 | Sedentary | Unhealthy | 4 | No | Yes | 107.7 | 4.4 | 169.4 | No | None | 6.3 | 10 | 8.6 | |

项目包含的文件,有需要的Q作者

相关推荐
Kidddddult7 小时前
力扣刷题Day 37:LRU 缓存(146)
算法·leetcode·力扣
(・Д・)ノ7 小时前
python打卡day18
人工智能·机器学习
生信碱移7 小时前
TCGA数据库临床亚型可用!贝叶斯聚类+特征网络分析,这篇 NC 提供的方法可以快速用起来了!
人工智能·python·算法·数据挖掘·数据分析
wang__123008 小时前
力扣1812题解
算法·leetcode·职场和发展
_Power_Y8 小时前
面试算法刷题练习1(核心+acm)
算法·面试
Leo来编程9 小时前
算法-时间复杂度和空间复杂度
算法
真智AI9 小时前
构建安全的机器学习推理API:基于FastAPI的用户认证与管理实战
安全·机器学习·fastapi
Echo``9 小时前
2:点云处理—3D相机开发
人工智能·笔记·数码相机·算法·计算机视觉·3d·视觉检测
星夜9829 小时前
C++回顾 Day5
开发语言·c++·算法
JK0x0710 小时前
代码随想录算法训练营 Day37 动态规划Ⅴ 完全背包 零钱兑换
算法·动态规划