使用 decision_function_shape='ovo' 从 scikit-learn SVC decision_function 预测概率

Predicting probability from scikit-learn SVC decision_function with decision_function_shape='ovo'

我有一个带有标签 'A'、'B'、'C'、'D'.[=18 的 multiclass SVM classifier =]

这是我的代码 运行:

>>>print clf.predict([predict_this])
['A']
>>>print clf.decision_function([predict_this])
[[ 185.23220833   43.62763596  180.83305074  -93.58628288   62.51448055  173.43335293]]

如何使用决策函数的输出以最高概率预测 class (A/B/C/D),如果可能的话,它的值?我访问过 但它是针对二进制 classifers 的,找不到一个很好的资源来解释 decision_function for multiclass classifiers 的输出卵形(一对一)。

编辑:

以上示例适用于class 'A'。对于另一个输入,classifier 预测了 'C' 并在 decision_function

中给出了以下结果
[[ 96.42193513 -11.13296606 111.47424538 -88.5356536 44.29272494 141.0069203 ]]

对于另一个不同的输入,classifier 预测为 'C' 给出了来自 decision_function、

的以下结果
[[ 290.54180354 -133.93467605  116.37068951 -392.32251314 -130.84421412   284.87653043]]

如果是 ovr (one-vs-rest),选择具有更高价值的那个会变得更容易,但在 ovo (one-vs-one) 中,结果中有 (n * (n - 1)) / 2 个值列表。

如何根据决策函数推断出 class 会被选中?

如果我没理解错的话,我认为这是一种方法 it.I 使用 np.argmax() 其中 returns 最高分的索引。

import numpy as np
a = clf.decision_function([predict_this])
index = np.argmax(a)
print str(unichr(65 + index))

编辑: 是的,这不是应该的方式,对不起,我没有注意到你使用了决策功能。那么预测函数使用决策函数输出来计算最终输出,scikit-learn 文档中没有给出明确的算法但是如果您仍然想使用决策函数来预测自己,请参阅您提供的 link 中的第二条评论. link 具有将决策转化为预测的数学推导。

任何正在寻找此问题答案的人,请访问 this accepted answer 我已经在 DataScience Stack Exchange 上发布了相同的问题并得到了所需的答案。