如何通过支持向量机中的predict()函数知道类预测的概率?

时间:2013-02-22 02:10:14

标签: svm scikit-learn

我如何知道样本属于支持向量机中Scikit-Learn的predict()函数所预测的类的概率?

>>>print clf.predict([fv])
[5]

有什么功能吗?

4 个答案:

答案 0 :(得分:27)

绝对阅读this section of the docs因为涉及到一些细微之处。另请参阅Scikit-learn predict_proba gives wrong answers

基本上,如果你有一个包含大量数据的多类问题,那么如前所述,predict_proba运行良好。否则,您可能必须处理不会从decision_function获得概率分数的排序。

这是使用predict_proba获取字典或类别与概率列表的一个很好的主题:

model = svm.SVC(probability=True)
model.fit(X, Y)
results = model.predict_proba(test_data)[0]

# gets a dictionary of {'class_name': probability}
prob_per_class_dictionary = dict(zip(model.classes_, results))

# gets a list of ['most_probable_class', 'second_most_probable_class', ..., 'least_class']
results_ordered_by_probability = map(lambda x: x[0], sorted(zip(model.classes_, results), key=lambda x: x[1], reverse=True))

答案 1 :(得分:13)

使用clf.predict_proba([fv])获取每班预测概率的列表。但是,此功能并非适用于所有分类器。

关于您的评论,请考虑以下事项:

>> prob = [ 0.01357713, 0.00662571, 0.00782155, 0.3841413, 0.07487401, 0.09861277, 0.00644468, 0.40790285]
>> sum(prob)
1.0

概率总和为1.0,因此乘以100得到百分比。

答案 2 :(得分:9)

创建SVC类以通过设置probability=True

来计算概率估算值

http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html

然后照常调用fit,然后predict_proba([fv])

答案 3 :(得分:1)

为了获得更清晰的答案,我再次发布scikit-learn for svm的信息。

  

毋庸置疑,Platt缩放中涉及的交叉验证对于大型数据集来说是一项昂贵的操作。另外,在得分的“argmax”可能不是概率的argmax的意义上,概率估计可能与得分不一致。 (例如,在二进制分类中,样本可以通过预测标记为属于具有根据predict_proba的概率<1/2的类。)Platt的方法也已知具有理论问题。如果需要置信度分数,但这些不必是概率,那么建议设置probability = False并使用decision_function而不是predict_proba。

对于其他分类器,例如Random Forest,AdaBoost,Gradient Boosting,在scikit-learn中使用预测函数应该没问题。