首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在分类任务中调整标签的分级偏差?

如何在分类任务中调整标签的分级偏差?
EN

Stack Overflow用户
提问于 2020-03-20 18:21:30
回答 1查看 170关注 0票数 4

我目前正在研制一种convolutional neural network,用于在x-ray images上检测病理变化。这是一个简单的binary classification任务。在项目开始时,我们收集了大约6,000 x-rays,并请了3位不同的医生(领域专家)对他们进行label。每个人都得到了大约2000张随机选取的图像(这3组图像是可分离的-其中一幅图像仅由一名医生标记)。

labelling完成后,我想检查每个医生有多少病例被标记为havingnon-having,这就是我得到的结果:

代码语言:javascript
运行
复制
# 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了。这就是我想出来的:

  1. ,因为我认识1医生(假设他是最好的专家),我决定把医生2和3的标签“移”到医生1的方向上。
  2. 收集了300张新图片,并要求所有3张图片都是label (所以这一次每幅图像都是3名不同医生的labelled )。而不是我检查了标签在医生1和2/3之间的分布情况。例如,对于医生1和2,我得到了如下内容:

代码语言:javascript
运行
复制
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有180x-rays改变病例,而医生1在177病例中同意他的说法,所以我改变了医生2的标签(概率)从0,1到1-177/180,177/180。

  1. 也为3

医生做了同样的事情

为此,我重新训练了cross-entropy损失的神经网络。

我的问题是,我的解决方案是正确的还是我应该做一些不同的事情?这个问题还有其他的解决办法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-03-21 01:09:45

看上去是对的。

使用交叉熵,您实际上比较了您的模型的概率分布输出与一些参考概率P(changes = 1)。在二进制分类中,我们通常假设我们的训练数据服从经验分布,这会产生1.00.0,这取决于标签。正如您已经注意到的,这不需要是这样的,例如,在我们对我们的数据没有充分信心的情况下。

您可以将参考概率表示为:

代码语言:javascript
运行
复制
P(changes = 1) = P(changes = 1, doc_k = 0) + P(changes = 0, doc_k = 1)

我们只是忽略了所有可能的医生决定。对于P(changes = 0)来说也是类似的。每一次联合分发都可以进一步扩大:

代码语言:javascript
运行
复制
P(changes = 1, doc_k = L) = P(changes = 1 | doc_k = X) P(doc_k = L)

条件是一个常数,你要通过比较每个医生和甲骨文医生1,我想不出一个更好的方法来近似这个概率,给出你的数据。(但是,您可以尝试通过一些附加注释来改进它)。P(doc_k = X)概率只是01,因为我们确切地知道每个医生给出了什么注释。

所有这些扩展都与您的解决方案相匹配。例如,第二名医生没有检测到任何变化:

代码语言:javascript
运行
复制
P(changes = 0) = P(changes = 0 | doc_2 = 0) * 1 + 0 = 15/169

举个有变化的例子:

代码语言:javascript
运行
复制
P(changes = 1) = 0 + P(changes = 1 | doc_2 = 1) * 1 = 177/180

在这两种情况下,常数01来自概率P(doc_2 = L)的值。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60779647

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档