随着慢性疾病的高发,尤其是糖尿病这一典型代表,建立精准高效的早期预测模型显得尤为重要。本文分享一个使用 Python + 机器学习完成的糖尿病患者预测项目,包含完整的数据预处理、模型训练、评估与可视化步骤,适合机器学习入门实战与毕业设计参考。

🧠 项目概述

本项目基于 Pima Indians Diabetes 数据集,目标是构建一个分类模型,判断患者是否患有糖尿病(标签为1)或未患(标签为0)。该数据集包含 8 个临床变量,如孕次、BMI、血压、胰岛素水平等。

项目流程涵盖:

  • 数据导入与可视化

  • 数据清洗与标准化

  • 模型构建与训练(随机森林)

  • 模型评估(混淆矩阵 + ROC 曲线)

  • 最终预测与结果分析


📦 使用工具

名称用途
pandas / numpy数据处理
seaborn / matplotlib可视化
sklearn建模与评估
warnings忽略警告信息


📊 数据分析与预处理

我们首先导入 CSV 数据,并观察基本分布:

data = pd.read_csv("diabetes.csv")
print(data.describe())

为便于理解和后续处理,使用 sns.heatmap() 可视化变量之间的相关性:

plt.figure(figsize=(10, 8))
sns.heatmap(data.corr(), annot=True, cmap="coolwarm")
plt.title("特征相关性热力图")

接着我们检查是否有异常值或缺失项(如 BMI、胰岛素为0),将其替换为中位数进行填补。

replace_list = ["Glucose", "BloodPressure", "SkinThickness", "Insulin", "BMI"]
for col in replace_list:
    data[col] = data[col].replace(0, data[col].median())

🧪 模型训练:随机森林

使用 train_test_split 划分训练集和测试集(比例 70:30),使用 StandardScaler 进行标准化处理:

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.3, random_state=42)
scaler = StandardScaler()
X_train = scaler.fit_transform(X_train)
X_test = scaler.transform(X_test)

随机森林模型训练:

model = RandomForestClassifier(n_estimators=100, random_state=42)
model.fit(X_train, y_train)
y_pred = model.predict(X_test)

📈 模型评估

我们使用混淆矩阵和 ROC 曲线对模型进行评估:

cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap="Blues")
plt.xlabel("预测值")
plt.ylabel("真实值")
plt.title("混淆矩阵")

同时绘制 ROC 曲线,计算 AUC 值:

cm = confusion_matrix(y_test, y_pred)
sns.heatmap(cm, annot=True, fmt='d', cmap="Blues")
plt.xlabel("预测值")
plt.ylabel("真实值")
plt.title("混淆矩阵")

📌 项目总结

  • 本项目构建了一个基于 Pima 数据的糖尿病预测模型,准确率表现良好,AUC 超过 0.85。

  • 使用随机森林具有良好的泛化能力,也避免了过拟合问题。

  • 数据标准化与缺失值填补对模型提升作用显著。

  • 可拓展方向包括:XGBoost、LightGBM、模型融合等。


💾 项目获取

如需获取本项目源码或 Notebook或者数据集文件,请评论或私信我,欢迎交流探讨!

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐