假设我有一组具有 4 个标签的多类数据:[A, B, C, D]
,我想使用 ovo SVC 分类器进行预测。我知道一旦我训练,我将训练 6 个 ovo 模型并可以使用
svc.decision_function()
查看决策函数输出集。这些函数的组织方式如下:
[AB, AC, AD, BC, BD, CD]
第一个字母是正数,第二个字母是负数。据我了解,预测采用这些决策函数分数并产生一组“投票”,其模式就是最终的预测。像这样的东西:
[AB, AC, AD, BC, BD, CD] #Model Organization
[1.4, 0.2, 0.6, 3, -2.2, -0.4] #Decision function output
[A, A, A, B, D, D] #Prediction for each model
模式为 A,因此 svc.predict()
函数应输出 A
。我的问题是,如果决策函数输出看起来像这样(我只是翻转了第二个条目的符号,但假装它是一个新输出)会怎样:
[AB, AC, AD, BC, BD, CD] #Model Organization
[1.4, -0.2, 0.5, 3, -2.2, -0.4] #Decision function output
[A, C, A, B, D, D] #Prediction for each model
现在 A
或 D
都是众数,那么 SVC 如何打破平局并进行预测呢?据推测,我将对每个标签的决策函数输出值(关于标签的方向)求和,因为距决策面的距离向我表明模型在每种情况下预测标签的决定性。这将使示例中的 D
生效。但我也可以看到使用“AD”模型的具体分数。不管怎样,不知道 SVC 是如何做到的。
最佳答案
它打破了最低值(value)类别的束缚。很难追踪到这一点,因为它似乎发生在 libsvm 级别,而不是 sklearn 级别。幸运的是,an example源自 earlier issue提供一个数据集,我们可以在其中看到操作。这是原件(将 decision_function_shape
更改为 ovo
后,该图看起来相同):
中间的三角形区域与左下区域一起分类,即第 0 类。ovo 模型的决策与该区域中每个类别的一票 Hook 。
交换类 0 和 2 的名称(例如通过使用 y=2-y
)会产生:
三角形区域现在与左上角区域一起分类,新命名为零。
关于python - 如果投票中有 "tie",带有 ovo 模型的多类 SVC 如何进行预测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73639159/