我该如何知道样本属于Scikit-Learn中支持向量机预测函数predict()预测的类别的概率?
>>>print clf.predict([fv])
[5]
有任何函数吗?
我该如何知道样本属于Scikit-Learn中支持向量机预测函数predict()预测的类别的概率?
>>>print clf.predict([fv])
[5]
有任何函数吗?
一定要阅读文档的这个部分,因为其中涉及到一些微妙的问题。还可以查看Scikit-learn predict_proba gives wrong answers。
基本上,如果你有一个多类别问题,并且有足够的数据,如先前所建议的那样,predict_proba效果很好。否则,您可能不得不使用不能从decision_function产生概率分数的排序。
这是使用predict_proba获取类别vs概率字典或列表的不错模式:
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))
>> prob = [ 0.01357713, 0.00662571, 0.00782155, 0.3841413, 0.07487401, 0.09861277, 0.00644468, 0.40790285]
>> sum(prob)
1.0
probability=True
:
http://scikit-learn.org/stable/modules/generated/sklearn.svm.SVC.html
然后像往常一样调用fit
,然后调用predict_proba([fv])
。
这是一种获取概率的方法
svc = SVC(probability=True)
preds_svc = svc.fit(X_train, y_train).predict(X_test)
probs_svc = svc.decision_function(X_test)
#决策函数告诉我们分类器生成的超平面在哪一侧(以及我们离它有多远)。
probs_svc = (probs_svc - probs_svc.min()) / (probs_svc.max() - probs_svc.min())