我目前正在研制一种convolutional neural network
,用于在x-ray images
上检测病理变化。这是一个简单的binary classification
任务。在项目开始时,我们收集了大约6,000 x-rays
,并请了3位不同的医生(领域专家)对他们进行label
。每个人都得到了大约2000张随机选取的图像(这3组图像是可分离的-其中一幅图像仅由一名医生标记)。
在labelling
完成后,我想检查每个医生有多少病例被标记为having
和non-having
,这就是我得到的结果:
# A tibble: 3 x 3
doctor no_changes (%) changes (%)
<int> <dbl> <dbl>
1 1 15.9 84.1
2 2 54.1 45.9
3 3 17.8 82.2
从我的角度来看,如果每个医生都得到了随机抽样的x-rays
数据集,那么对于每个医生来说,有和没有改变的病例的百分比应该是相同的,假设他们的思维方式是“相似的”,而这里的情况并非如此。
我们和其中一位医生交谈,他告诉我们,有一位医生可以说x-ray
上有变化,而另一位医生可以说一些不同的东西,因为通常他们并不是以二元的方式来看待变化--例如,改变的amount/size
可以在标签中决定,每个医生的头脑中都可能有不同的cutoff
。
知道我开始想removing/centering
labels bias
了。这就是我想出来的:
label
(所以这一次每幅图像都是3名不同医生的labelled
)。而不是我检查了标签在医生1和2/3之间的分布情况。例如,对于医生1和2,我得到了如下内容:doctor2 no_changes changes all
doctor1 no_changes 15 3 18
changes 154 177 331
all 169 180
从这一点我可以看到,医生2有169
病例,他lebeled
认为没有变化,医生1同意他只在15
的情况下。我知道我把2医生的标签从1,0改为15/169,1-15/169。类似地,医生2有180
的x-rays
改变病例,而医生1在177
病例中同意他的说法,所以我改变了医生2的标签(概率)从0,1到1-177/180,177/180。
医生做了同样的事情
为此,我重新训练了cross-entropy
损失的神经网络。
我的问题是,我的解决方案是正确的还是我应该做一些不同的事情?这个问题还有其他的解决办法吗?
发布于 2020-03-21 01:09:45
看上去是对的。
使用交叉熵,您实际上比较了您的模型的概率分布输出与一些参考概率P(changes = 1)
。在二进制分类中,我们通常假设我们的训练数据服从经验分布,这会产生1.0
或0.0
,这取决于标签。正如您已经注意到的,这不需要是这样的,例如,在我们对我们的数据没有充分信心的情况下。
您可以将参考概率表示为:
P(changes = 1) = P(changes = 1, doc_k = 0) + P(changes = 0, doc_k = 1)
我们只是忽略了所有可能的医生决定。对于P(changes = 0)
来说也是类似的。每一次联合分发都可以进一步扩大:
P(changes = 1, doc_k = L) = P(changes = 1 | doc_k = X) P(doc_k = L)
条件是一个常数,你要通过比较每个医生和甲骨文医生1,我想不出一个更好的方法来近似这个概率,给出你的数据。(但是,您可以尝试通过一些附加注释来改进它)。P(doc_k = X)
概率只是0
或1
,因为我们确切地知道每个医生给出了什么注释。
所有这些扩展都与您的解决方案相匹配。例如,第二名医生没有检测到任何变化:
P(changes = 0) = P(changes = 0 | doc_2 = 0) * 1 + 0 = 15/169
举个有变化的例子:
P(changes = 1) = 0 + P(changes = 1 | doc_2 = 1) * 1 = 177/180
在这两种情况下,常数0
和1
来自概率P(doc_2 = L)
的值。
https://stackoverflow.com/questions/60779647
复制相似问题