【项目实战】基于机器学习的糖尿病患者检测系统(附完整代码与可视化)
随着慢性疾病的高发,尤其是糖尿病这一典型代表,建立精准高效的早期预测模型显得尤为重要。本文分享一个使用 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或者数据集文件,请评论或私信我,欢迎交流探讨!
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐


所有评论(0)