如何调整分类任务中标签的评分偏差?
How to adjust for the grading bias of labels in a classification task?
我目前正在研究 convolutional neural network
用于 x-ray images
上的病理变化检测。这是一个简单的 binary classification
任务。在项目开始时,我们收集了大约 6000 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
的随机抽样数据集,假设他们是"thinking similarly",这里不是这种情况。
我们正在与一位医生交谈,他告诉我们,一位医生可能会说 x-ray
有变化,而另一位医生可能会说一些不同的话,因为通常他们不会看at 以二元方式变化 - 例如 amount/size
的变化可以决定标签,每个医生的想法可能不同 cutoff
。
知道后开始想removing/centering
labels bias
。这是我想出的:
- 因为我认识医生 1(假设他是最好的专家)我决定 "move" 医生 2 和 3 的标签进入医生 1 的方向。
- 我收集了 300 张新图像并要求他们全部
label
他们(所以这次每张图像都是 labelled
由 3 位不同的医生)。比我检查过医生 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 在 x-rays
中有 180
个变化案例,而医生 1 在 177
个案例中同意他的观点,所以我在 [0, 1] 到 [1 - 177/180, 177/180].
- 对医生 3 做同样的事情
这样做我用 cross-entropy
损失重新训练了神经网络。
我的问题是,我的解决方案是否正确,或者我应该做些不同的事情吗?这个问题还有其他解决方案吗?
看起来正确。
使用交叉熵,您实际上可以将模型输出的概率分布与某个参考概率 P(changes = 1)
进行比较。在二元分类中,我们通常假设我们的训练数据遵循经验分布,根据标签产生 1.0
或 0.0
。正如您已经注意到的那样,情况不一定如此,例如以防我们对我们的数据没有完全的信心。
您可以将您的参考概率表示为:
P(changes = 1) = P(changes = 1, doc_k = 0) + P(changes = 0, doc_k = 1)
我们只是边缘化了所有可能的第 k 个医生决定。 P(changes = 0)
也类似。每个联合分布可以进一步展开:
P(changes = 1, doc_k = L) = P(changes = 1 | doc_k = X) P(doc_k = L)
条件是您通过将每个医生与 oracle 医生 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)
。
我目前正在研究 convolutional neural network
用于 x-ray images
上的病理变化检测。这是一个简单的 binary classification
任务。在项目开始时,我们收集了大约 6000 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
的随机抽样数据集,假设他们是"thinking similarly",这里不是这种情况。
我们正在与一位医生交谈,他告诉我们,一位医生可能会说 x-ray
有变化,而另一位医生可能会说一些不同的话,因为通常他们不会看at 以二元方式变化 - 例如 amount/size
的变化可以决定标签,每个医生的想法可能不同 cutoff
。
知道后开始想removing/centering
labels bias
。这是我想出的:
- 因为我认识医生 1(假设他是最好的专家)我决定 "move" 医生 2 和 3 的标签进入医生 1 的方向。
- 我收集了 300 张新图像并要求他们全部
label
他们(所以这次每张图像都是labelled
由 3 位不同的医生)。比我检查过医生 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 在 x-rays
中有 180
个变化案例,而医生 1 在 177
个案例中同意他的观点,所以我在 [0, 1] 到 [1 - 177/180, 177/180].
- 对医生 3 做同样的事情
这样做我用 cross-entropy
损失重新训练了神经网络。
我的问题是,我的解决方案是否正确,或者我应该做些不同的事情吗?这个问题还有其他解决方案吗?
看起来正确。
使用交叉熵,您实际上可以将模型输出的概率分布与某个参考概率 P(changes = 1)
进行比较。在二元分类中,我们通常假设我们的训练数据遵循经验分布,根据标签产生 1.0
或 0.0
。正如您已经注意到的那样,情况不一定如此,例如以防我们对我们的数据没有完全的信心。
您可以将您的参考概率表示为:
P(changes = 1) = P(changes = 1, doc_k = 0) + P(changes = 0, doc_k = 1)
我们只是边缘化了所有可能的第 k 个医生决定。 P(changes = 0)
也类似。每个联合分布可以进一步展开:
P(changes = 1, doc_k = L) = P(changes = 1 | doc_k = X) P(doc_k = L)
条件是您通过将每个医生与 oracle 医生 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)
。