多分类问题中预测平局的解决方法咨询——基于SVM四类分类场景
首先得明确:你说的“平局”无非两种情况——要么多个分类器同时把样本判定为自己的正类,要么所有分类器都把样本归为负类(也就是没有一个分类器认领这个样本)。针对OvR(一类对其余)这种独立训练分类器的策略,有几个实用的解决思路:
用决策函数值的置信度来定胜负
别只看每个分类器输出的0/1标签,SVM的OvR每个分类器都会输出一个决策函数值(比如f(x),代表样本到分类超平面的带符号距离)。遇到平局时,直接选决策函数值最大的那个类别就行。比如四个分类器分别输出对应0、1、2、3的决策值是[-0.5, 2.1, 1.8, -1.2],那直接选类别1;如果所有值都是负的,比如[-1.0, -0.3, -2.1, -0.7],那就选最接近正的那个(也就是-0.3对应的类别1)。这是最常用也最有效的方法,大部分机器学习库的OvR实现默认就是这么干的。给每个分类器加自定义阈值
默认情况下,OvR分类器用0作为决策阈值:决策值>0就判定为正类,否则负类。你可以给每个分类器单独设置阈值,来减少同时触发正类的情况。比如某个类别样本很少,你可以把它的阈值调低到-0.2,让它更容易被选中;反之样本极多的类别,把阈值调高到0.3,降低它误判的概率。这个需要结合交叉验证来调优,找到最适合你数据集的阈值组合。加权投票替代简单投票
如果你的逻辑是先收集每个分类器的投票结果,那别用简单的“一票算一票”。改成加权投票:每个分类器的投票权重等于它的决策函数值的绝对值(或者归一化后的置信度)。比如分类器A对类别0的决策值是2.5,分类器B对类别1的决策值是1.8,那类别0的权重是2.5,类别1是1.8,最终权重最高的类别获胜。这样能让置信度高的分类器拥有更大话语权,减少无意义的平局。换用一对一(OvO)策略
要是实在不想和OvR的平局较劲,也可以换成OvO策略——它会为每一对类别训练一个分类器(4类的话就是6个),然后通过投票来确定最终类别。这种策略的平局情况会少很多,因为每个样本会被多个分类器判定,投票结果更稳定。当然代价是训练和预测的计算量会大一些,不过如果你的样本量不是特别大,这个trade-off是值得的。
最后提个小提醒:如果你用的是现成的机器学习库,别自己手动实现OvR的判定逻辑,库本身已经处理了平局问题。比如可以用decision_function方法拿到所有类别的决策值,直接取最大值对应的索引就是最终类别,省心又靠谱。
内容的提问来源于stack exchange,提问作者Jon

