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作者

相关推荐
Ludicrouers2 小时前
【Leetcode-Hot100】和为k的子数组
算法·leetcode·职场和发展
巨可爱熊2 小时前
高并发内存池(定长内存池基础)
linux·运维·服务器·c++·算法
爱数模的小驴4 小时前
2025 年“认证杯”数学中国数学建模网络挑战赛 C题 化工厂生产流程的预测和控制
深度学习·算法·计算机视觉
轻闲一号机5 小时前
【机器学习】机器学习笔记
人工智能·笔记·机器学习
序属秋秋秋6 小时前
算法基础_数据结构【单链表 + 双链表 + 栈 + 队列 + 单调栈 + 单调队列】
c语言·数据结构·c++·算法
apcipot_rain7 小时前
【密码学——基础理论与应用】李子臣编著 第五章 序列密码 课后习题
算法·密码学
Hali_Botebie7 小时前
【端到端】端到端自动驾驶依赖Occupancy进行运动规划?还是可以具有生成局部地图来规划?
人工智能·机器学习·自动驾驶
不要不开心了7 小时前
sparkcore编程算子
pytorch·分布式·算法·pygame
88号技师7 小时前
【2024年最新IEEE Trans】模糊斜率熵Fuzzy Slope entropy及5种多尺度,应用于状态识别、故障诊断!
人工智能·算法·matlab·时序分析·故障诊断·信息熵·特征提取
清同趣科研7 小时前
R绘图|6种NMDS(非度量多维分析)绘图保姆级模板——NMDS从原理到绘图,看师兄这篇教程就够了
人工智能·算法