处理某些类别的标记示例可能不正确(嘈杂)的数据
Posted
技术标签:
【中文标题】处理某些类别的标记示例可能不正确(嘈杂)的数据【英文标题】:Dealing with data where labeled examples of certain class could be incorrect(noisy) 【发布时间】:2013-09-26 05:03:40 【问题描述】:我正在处理一个数据集,如果一个例子被标记为正面,它肯定是正面的。不幸的是,对于负类,如果标签被标记为负类,则不能这样说(它可能会变成正类)。此外,标记为负面的示例数量远远多于标记为正面的示例数量。我正在尝试在此训练数据集上学习分类模型。我想知道在这种情况下可以使用哪些技术(特定类的标签可能很嘈杂)
【问题讨论】:
【参考方案1】:标签的噪音不是问题,大多数分类器假设某些数据被错误标记(如 SVM 及其软边距)。这里有趣的是,一个特定类的正确性之间存在不成比例的事实。这可以通过以下几种方式解决:
Use class-weighting scheme 并按比例为正类赋予更大的权重,因为由于它的“正确性”,您应该更关注正确的分类,而负类的错误分类元素可能更多(这也是类大小不成比例的解决方案) 在使用一些参数拟合时 - 使用自定义的 hacked 指标,该指标将衡量积极因素而不是消极因素(因此您更关心 TP 和 FP,而并不真正关心 TN 和 FN)。最简单的情况是精度指标,它只是忽略了 TN 和 FN,但您也可以使用 F-beta measure,它在精度和召回率之间取得平衡 - 在您的情况下,您应该选择小 beta(可能与正数的比率成反比) /否定正确性)。一般来说,这个 beta 参数显示了您对召回率的关注程度是精度的多少倍。 使用新奇检测代替二元分类,重点检测正样本。此类任务有许多可能的模型,其中之一是一类 SVM。【讨论】:
【参考方案2】:您也可以尝试修复数据集中的标签:如果数据集真的太嘈杂,可能会损害分类器性能(在假设的没有噪音的上帝标准测试集上进行评估)。
您可以使用分类器输出来帮助您进行标记。如果您使用的是 scikit-learn,则某些模型(例如 SGDClassifier(loss='log')
)可以通过 predict_proba
方法为您提供类分配概率。因此,您可以:
1- 在嘈杂的开发集上训练第一个模型 2- 计算该数据集的类别分配概率 3-假设分类器没有完全过度拟合噪声(如果你有很多真实的负例,这对于线性模型来说不太可能),按概率对违规进行排名:将最令人讨厌的分类错误放在首位:它们最有可能严重标记示例 4- 按顺序手动检查这些违规行为并相应地更新标签
然后进行迭代,直到您对数据质量更加满意为止。
【讨论】:
以上是关于处理某些类别的标记示例可能不正确(嘈杂)的数据的主要内容,如果未能解决你的问题,请参考以下文章
多示例学习 multiple instance learning (MIL)
php 如何将自定义过滤器字段添加到没有过滤器插件的Tribe事件日历(在此示例中 - 按类别和标记过滤)。示例:https: