在机器学习中的多类分类中,“一对多”和“一对一”策略有什么区别?

我查看了维基百科页面,但找不到它们之间的区别,这两种方法似乎都是将多类转换为多个线性分类器。


回答:

这涉及到划分训练数据的策略。假设你有N个数据样本和C个类别。

一对一:在这里,你每次选择两个类别,并使用仅来自这两个选定类别的样本训练一个二类分类器(在这一步中忽略其他样本)。你对所有两类组合重复这一过程。因此,你最终会得到N(N-1)/2个分类器。在测试时,你在这些分类器中进行投票。

一对多:在这里,你选择一个类别,并用该类别的样本作为一侧,所有其他样本作为另一侧来训练一个二类分类器。因此,你最终会得到N个分类器。在测试时,你只需将样本分类为在N个分类器中得分最高的那个类别。

举个例子,假设我们有一个3类问题,类别标签为c1、c2和c3。样本为x1、x2、…。分类器为f1、f2、…。假设你的训练数据是{{x1, c1}, {x2, c1}, {x3, c2}, {x4, c1}, {x5, c2}, {x6, c3}, {x7, c3}}。那么:

一对一:f1:用子集{{x1, c1}, {x2, c1}, {x3, c2}, {x4, c1}, {x5, c2}}训练,用于类别c1和c2。f2:用子集{{x3, c2}, {x5, c2}, {x6, c3}, {x7, c3}}训练,用于类别c2和c3。f3:用子集{{x1, c1}, {x2, c1}, {x4, c1}, {x6, c3}, {x7, c3}}训练,用于类别c1和c3。

一对多:f1:用{{x1, c1}, {x2, c1}, {x3, ~c1}, {x4, c1}, {x5, ~c1}, {x6, ~c1}, {x7, ~c1}}训练,用于类别c1和其余类别(~c1,即非c1)。f2:用{{x1, ~c2}, {x2, ~c2}, {x3, c2}, {x4, ~c2}, {x5, c2}, {x6, ~c2}, {x7, ~c2}}训练,用于类别c2和其余类别(~c2,即非c2)。f3:用{{x1, ~c3}, {x2, ~c3}, {x3, ~c3}, {x4, ~c3}, {x5, ~c3}, {x6, c3}, {x7, c3}}训练,用于类别c3和其余类别(~c3,即非c3)。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注