我正在使用一个数据集,如果一个示例被标记为正数,它肯定是正数。不幸的是,对于负类,如果标签被标记为负,则不能这样说(并且它可能被证明是正类)。此外,标记为负的示例数量远远多于标记为正的示例数量。我正在尝试在此训练数据集上学习分类模型。我想知道在这种情况下可以使用什么技术(特定类的标签可能会很嘈杂)
标签的嘈杂不是问题,大多数分类器认为,某些数据被错误标记(如 SVM 及其软边距)。有趣的是,一个特定类的正确性之间存在不成比例的事实。这可以通过几种方式实现:
- 使用类加权方案,并按比例为正类附加更大的权重,因为由于其"正确性",您应该更关心正确的分类,而您可以拥有更多负类的错误分类元素(这也是类大小不成比例的解决方案)
- 在使用一些参数拟合时 - 使用自定义黑客指标,它将加权积极因素而不是消极因素(因此您更关心TP和FP,而并不真正关心TN和FN)。最简单的情况是精度度量,它只是忽略 TN 和 FN,但您也可以使用 F-beta 度量,它在精度和召回率之间取得平衡 - 在您的情况下,您应该选择小 beta(可能与正/负正确率的比率成反比)。一般来说,这个 beta 参数显示了你关心召回次数的次数,然后是精度的次数。
- 使用新颖性检测而不是二元分类,并专注于检测阳性样本。对于此类任务,有许多可能的模型,其中之一是单类 SVM。
您还可以尝试修复数据集中的标签:如果数据集确实太嘈杂,则可能会损害分类器性能(如在假设的没有噪声的上帝标准测试集上评估的那样)。
可以使用分类器输出来帮助标记。如果您使用的是scikit-learn,例如SGDClassifier(loss='log')
之类的模型可以使用predict_proba
方法为您提供课堂作业概率。因此,您可以:
1-在嘈杂的开发集上训练第一个模型2-计算此数据集上的类分配概率3-假设分类器没有完全过度拟合噪声(如果你有很多真正的负示例,这对于线性模型来说不太可能),按概率对违规行为进行排名:将最有问题的分类错误放在顶部:它们最有可能被错误标记的例子4-按顺序手动检查这些违规行为并相应地更新标签
然后迭代,直到您对数据质量更满意。