我有一个多类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
个值。
如何推断基于决策函数选择哪个类?
答案 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上发布了相同的问题并获得了所需答案。