type
status
date
slug
summary
tags
category
icon
password

皮肤癌检测进阶:级联预测的威力

上篇文章分享了从EDA到深度学习的完整流程,这次来聊聊一个更有意思的技巧——级联预测(Cascade Method)。简单说,就是把图像模型的预测结果当作特征,喂给表格数据模型,实现1+1>2的效果。

为什么要用级联预测?

在ISIC这个比赛中,我们既有图像数据,又有丰富的表格数据(患者信息、病灶测量值等)。单独使用任何一种数据都有局限性:
  • 纯图像模型:忽略了重要的临床信息
  • 纯表格模型:无法捕捉视觉特征
级联预测巧妙地结合了两者的优势:先让专门的CNN提取图像特征,再把这些"高级特征"和表格数据一起训练。

实现流程

步骤1:生成图像模型预测

首先,我训练了几个不同的图像模型:
这里有个小技巧:使用多个不同架构的模型(CNN vs Transformer)能捕捉到不同类型的视觉特征。

步骤2:疯狂的特征工程

这是我花时间最多的部分。基于对皮肤病学的理解,我创建了40+个新特征:
特征工程的几个心得:
  1. 领域知识很重要:比如病灶的对称性、边界复杂度都是诊断的重要指标
  1. 交互特征有奇效:年龄×大小这种组合特征往往能捕捉到单一特征无法表达的模式
  1. 归一化要谨慎:有些比值特征天然就有归一化效果

步骤3:集成学习

我使用了LightGBM和CatBoost的组合,并且每个模型都用了Voting策略:

关键参数调优

LightGBM参数

经过Optuna优化后的参数:

CatBoost参数

CatBoost特别适合处理类别特征:

踩坑经验

1. 数据泄露陷阱

最开始我犯了个低级错误——在特征工程时使用了测试集的统计信息:

2. 类别编码的坑

OrdinalEncoder在处理未见过的类别时要特别小心:

3. 交叉验证策略

由于同一患者可能有多个病灶,必须用GroupKFold:

4. 评估指标的坑

比赛用的是Partial AUC,不是普通的AUC:

效果提升

通过级联预测,我的分数从单模型的0.16提升到了0.18+,这在竞赛后期是相当可观的提升。更重要的是,这种方法的思路可以应用到很多多模态问题中。

总结与思考

级联预测的核心思想是让每个模型做自己最擅长的事
  • CNN负责"看"图像
  • GBDT负责整合所有信息做最终决策
这种方法特别适合:
  1. 多模态数据(图像+表格)
  1. 表格特征丰富且有价值
  1. 单一模型遇到瓶颈时
未来可以尝试的改进:
  • End-to-end的多模态模型
  • 更多样化的图像模型(不同的数据增强策略)
  • 特征选择(40+特征可能存在冗余)
医疗AI的道路还很长,但每一点进步都可能帮助医生更好地诊断疾病。希望这些经验对你有帮助!

PS: 代码中的一些参数是在Kaggle的GPU限制下调整的,如果你有更好的硬件,可以适当增加模型复杂度。记得根据自己的数据特点调整特征工程部分!