type
status
date
slug
summary
tags
category
icon
password
皮肤癌检测进阶:级联预测的威力
上篇文章分享了从EDA到深度学习的完整流程,这次来聊聊一个更有意思的技巧——级联预测(Cascade Method)。简单说,就是把图像模型的预测结果当作特征,喂给表格数据模型,实现1+1>2的效果。
为什么要用级联预测?
在ISIC这个比赛中,我们既有图像数据,又有丰富的表格数据(患者信息、病灶测量值等)。单独使用任何一种数据都有局限性:
- 纯图像模型:忽略了重要的临床信息
- 纯表格模型:无法捕捉视觉特征
级联预测巧妙地结合了两者的优势:先让专门的CNN提取图像特征,再把这些"高级特征"和表格数据一起训练。
实现流程
步骤1:生成图像模型预测
首先,我训练了几个不同的图像模型:
这里有个小技巧:使用多个不同架构的模型(CNN vs Transformer)能捕捉到不同类型的视觉特征。
步骤2:疯狂的特征工程
这是我花时间最多的部分。基于对皮肤病学的理解,我创建了40+个新特征:
特征工程的几个心得:
- 领域知识很重要:比如病灶的对称性、边界复杂度都是诊断的重要指标
- 交互特征有奇效:年龄×大小这种组合特征往往能捕捉到单一特征无法表达的模式
- 归一化要谨慎:有些比值特征天然就有归一化效果
步骤3:集成学习
我使用了LightGBM和CatBoost的组合,并且每个模型都用了Voting策略:
关键参数调优
LightGBM参数
经过Optuna优化后的参数:
CatBoost参数
CatBoost特别适合处理类别特征:
踩坑经验
1. 数据泄露陷阱
最开始我犯了个低级错误——在特征工程时使用了测试集的统计信息:
2. 类别编码的坑
OrdinalEncoder在处理未见过的类别时要特别小心:
3. 交叉验证策略
由于同一患者可能有多个病灶,必须用GroupKFold:
4. 评估指标的坑
比赛用的是Partial AUC,不是普通的AUC:
效果提升
通过级联预测,我的分数从单模型的0.16提升到了0.18+,这在竞赛后期是相当可观的提升。更重要的是,这种方法的思路可以应用到很多多模态问题中。
总结与思考
级联预测的核心思想是让每个模型做自己最擅长的事:
- CNN负责"看"图像
- GBDT负责整合所有信息做最终决策
这种方法特别适合:
- 多模态数据(图像+表格)
- 表格特征丰富且有价值
- 单一模型遇到瓶颈时
未来可以尝试的改进:
- End-to-end的多模态模型
- 更多样化的图像模型(不同的数据增强策略)
- 特征选择(40+特征可能存在冗余)
医疗AI的道路还很长,但每一点进步都可能帮助医生更好地诊断疾病。希望这些经验对你有帮助!
PS: 代码中的一些参数是在Kaggle的GPU限制下调整的,如果你有更好的硬件,可以适当增加模型复杂度。记得根据自己的数据特点调整特征工程部分!