写在前面
在阅读这样一篇关于爱茨海默症的CNN分类综述时,作者总结了在分类算法中的无偏差评估。
https://doi.org/10.1016/j.media.2020.101694
《Convolutional neural networks for classification of Alzheimer's disease: Overview and reproducible evaluation》
数据泄露的主要原因
1.wrong data split
首先是没有按照正确的级别Level地对数据集进行分组split,出现了同一个病人subject-level的数据即出现在了训练集,又出现在了测试集。
这种情况通常发生在3D图像切分成多个2D图像、视频切分成多个帧的图像中。
image-level的有偏差的数据分组,有可能比无偏差的个体级别分组subject-level,在分类问题中,多8个百分比的正确率。
2.late split
数据增强、预训练等过程中,一定不能使用测试集!
如果先进行数据增强,再从数据增强后的整个数据集中分离出训练数据和验证数据,那么同一个原始图像生成的图像可能会同时出现在训练集和测试集中,导致数据泄露。
3.有偏差的迁移学习
当迁移学习中的源域和目标域重合时,会导致数据泄露。
举个例子,在医学图像的分类中,阿茨海默症有AD,中间阶段MCI,正常CN这三种分类。如果你用一个在ADvsCN的任务中预训练过的网络,去做MCIvsCN的任务,那么CN的subject就不仅出现在了源任务(ADvsCN)的训练集和验证集,也会出现在目标任务(MCIvsCN)的测试集。
4.缺少独立的测试集
测试集只能用于评测分类器的最终表现,验证集是用于选取最优的超参数。