这个项目解决什么问题
糖尿病预测(Kaggle 经典 PIMA 数据集)是二分类的"老面孔",几乎每个人都能搜到一份跑通的教程。本项目刻意在两个最容易"调库糊弄"的环节动真格:超参数优化和类别不平衡处理——自己实现,而不是 import 一个包。做完这两个模块,你对算法的理解会从"会用"变成"会写、会讲"。
核心亮点
- 自实现贝叶斯优化器:不依赖 skopt,用高斯过程做代理模型,EI / UCB 两种采集函数均为手写,并与 skopt、随机搜索同场竞技、对比收敛速度。课程汇报时说"优化器是我自己写的"和"我用了一下 skopt",完全是两个档次。
- 自实现"边界线 SMOTE":纯 numpy 实现,只对靠近决策边界的少数类样本插值合成新样本,并与标准 SMOTE、class_weight 两种策略在同一套评估下对比——每种策略的适用场景你都能说清楚。
- 风险分层报告:把预测概率划成低 / 中 / 高三层,并验证每层的实际患病率是否校准——分层结果可以直接解释为分诊依据,这是把模型输出"翻译"给业务的典型示范。
- 模块可独立运行:
my_optimizer.py和my_smote.py都能单独跑通做验证,注释里含算法原理与推导,方便逐行阅读、写进实验报告。
效果预览
三种优化器的收敛曲线对比——自实现贝叶斯优化器与 skopt 的表现一目了然:

三种不平衡处理策略的对比,"边界线 SMOTE"的取舍清晰可见:

风险分层后各层的实际患病率——分层是否"校准"直接决定它能不能当分诊依据:

预览图基于模拟数据演示实际运行效果,真实数据运行结果以你下载的数据集为准。
你将学到
- 超参数优化的原理与手写实现:高斯过程、采集函数、收敛曲线怎么读
- 类别不平衡的多种解法:过采样(含边界线变体)、代价敏感,各自适合什么场景
- 概率校准思维:模型输出的"70%"到底是不是 70% 的患病率
- 如何把一个"调库项目"升级成"有自己代码贡献的项目"
适合谁
需要完成分类方向毕业设计、且想在课程汇报中展示"算法原理级理解"而非纯调参经验的学习者。难度 ★★★,两个手写模块都有推导注释,跟着读一遍即可消化;如果你想给自己的项目加上"自研算法"的亮点,这里提供了完整的参照。
交付内容:完整可运行源码、README.md(逐步运行方法与实现说明)、requirements.txt。
数据集:第三方数据受原始授权限制不随包分发,按 README.md 里的官方链接下载放入 data/ 即可跑通全流程。
许可:个人使用,可用于自己的学习、课程实验与研究报告,请勿转售或公开传播。