在医疗数据集的训练算法期间面临的许多问题中,这三个是最常见的:
类别不平衡多任务数据集大小对于这些问题,我会分享一些技巧来解决。

类别不平衡挑战
在现实世界中,我们看到健康的人比患病的人多得多,这也反映在医学数据集上。并且健康和疾病类别的例子数量不是偶数。这反映了现实世界中疾病的发生频率。在医疗数据集和信用卡诈骗数据集里,你可能会看到正常样本的数量是异常样本的一百倍。
这样一来,很容易被误认为是车型性能优异,其实不然。如果使用诸如accuracy_score accuracy之类的简单测量,就会发生这种情况。对于这类数据集,准确率并不是一个很好的衡量标准,因为标签倾斜严重,所以一个只输出正常标签的神经网络,准确率甚至可以略高于90%。
解决方案:
我们可以定义更有用的指标,比如F1测量或者“精度/召回”。准确率定义为“真实病例数/”。当有很多错误的例子时,这是一个很好的措施。另一方面,召回率定义为“真实案例数/”。这是一个很好的措施,当有很多错误的反例。医学领域的大部分模型都是这样。而我们往往需要同时考虑假阳性样本和假阴性样本的数量,这就是F1测量的作用。它在准确性和召回率之间取得了平衡,由公式2 */)给出。
另一种处理类不平衡的流行技术是“重采样”。这是从大多数类中删除示例或向少数类中添加示例以在两个类之间取得平衡的行为。虽然它们可以通过使用复杂的重采样技术来解决,但它们有自己的缺点,如信息丢失和过拟合。

多任务挑战
在现实世界中,预测健康或疾病通常是不够的。我们经常需要将医疗数据分成多个类别或标签。比如只从心律上检测心律不齐就没那么有市场了,分析判断哪些心律不齐患者得的才更有价值。例如,症状可以是心房纤维性颤动、室上性心动过速或任何其他类型。
理论上,可以为每个需要分类的标签训练一个单独的神经网络模型,但这对于编写代码来说是非常不切实际的。如果我们能够将所有这些分类模型结合到一个返回多个预测的单一深度神经网络中,将会更有价值。
解决方案:
我们用一种叫做“多类别分类”或者“多标签分类”的方法来迎接这个挑战,两者略有不同。在多类别中,数据样本的类别是互斥的,而在多标签中,数据样本可以属于多个类别。在医学领域,我们通常使用多标签分类,因为如果患者被诊断为肺不张,并不意味着他/她不会出现心脏肥大。我们将模型最后一层的分数传递给Sigmoid激活函数。这将把最后一层的每个分数转换成0到1之间的值,而不考虑其他分数。
对于多标签分类,我们选择的损失函数变成了binary_crossentropy,其中每个标签都被视为一个独立的伯努利分布,因为我们使用了Sigmoid激活函数。当需要多个类时,Sigmoid激活函数可以替换为softmax激活函数,其损失函数设置为categorical _ crossentropy。

数据集规模挑战
处理医疗数据集的主要挑战是这些数据集的大小。大的训练数据不仅有好的架构,而且对模型的性能有重要作用,可用于疾病的患者数据数量往往不足。低数据集大小是高偏差和高方差的主要原因。这给模型的推广和优化带来了困难。
解决方案:
为了解决模型优化的困难,我们使用了一种叫做“迁移学习”的方法,在这种方法中,我们使用从相关网络的较低层学习来训练较高层,而不需要它们从头学习。由于之前的训练,下层可以作为很好的特征提取器,所以我们可以根据数据集进行微调。这项技术可以更快地优化,并减少训练新模型所需的数据量。
为了解决模型泛化的困难,我们使用了一种叫做“数据增强”的技术。在向模型提供数据之前,我们对示例进行一些随机转换,而不是复制相同的示例。通过这种方式,我们可以保持模型不变,例如大小或亮度的小变化。诸如水平或垂直旋转图像、改变图像的亮度或对比度以及在一定程度上旋转或缩放图像等做法都会导致数据膨胀。这种技术对于避免小数据集中的过度拟合非常有用。


