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

时间:2017-04-15 08:12:24

标签: python-2.7 machine-learning scikit-learn svm

我有一个多类SVM分类器,标签为'A','B','C','D'。

这是我正在运行的代码:

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

如何使用决策函数的输出以最高概率预测类(A / B / C / D),如果可能,它的值是多少?我访问了https://stackoverflow.com/a/20114601/7760998,但它是二进制分类器,无法找到一个很好的资源来解释具有形状ovo(one-vs-one)的多类分类器的decision_function输出。

修改

以上示例适用于“A”类。对于另一个输入,分类器预测'C'并在decision_function

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

对于分类器预测为“C”的另一个不同输入,给出了来自decision_function的以下结果,

[[ 290.54180354 -133.93467605  116.37068951 -392.32251314 -130.84421412   284.87653043]]

如果它是ovr(一对一休息),通过选择具有更高值的那个将变得更容易,但是在卵内(一对一),结果列表中有(n * (n - 1)) / 2个值。

如何推断基于决策函数选择哪个类?

2 个答案:

答案 0 :(得分:0)

如果我理解正确,我认为这是一种方法。我使用np.argmax()返回最高分的索引。

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

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

答案 1 :(得分:0)

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