Scikit学习Python解释SVC概率

时间:2014-01-27 09:54:19

标签: python machine-learning scikit-learn

我做了一个SVC,但我很难解释概率的结果。让我们说猫,狗和鱼有3个类别,我想知道每个类别的可能性,所以我使用.predict来查找预测和.predict_proba,但它没有出来适用于小样本。

from sklearn import svm
X = [[1,2,3], [2,3,4], [1,1,3], [2,3,5], [3,4,6], [2,3,4],[1,2,3]]
y = ['cat', 'dog', 'cat','dog','fish','dog','cat']
clf =svm.SVC(probability=True)
clf.fit(X, y)
a=clf.decision_function([3,4,6])
b=clf.predict_proba([3,4,6])
c=clf.score(X, y)

print clf.classes_
print 'accuracy', c
print 'Fish prediction'
print clf.predict([3,4,6])
print 'decision function', a
print  'predict', b

如果我预测鱼类样本数量少的东西是准确的,但有人可以解释为什么预测概率如此之低:0.027。 (我知道它正在使用Platt Scaling,但为什么没有以0.71的概率选择狗?是否有办法获得SVM预测结果为鱼的概率?

['cat' 'dog' 'fish']
accuracy 1.0
Fish prediction
['fish']
decision function [[-0.25639624 -0.85413901 -0.25966687]]
predict [[ 0.26194797  0.71056399  0.02748803]]

让我们说我想预测猫:

#predict cat
d=clf.decision_function([1,2,3])
e=clf.predict_proba([1,2,3])
print 'Cat prediction'
print clf.predict([1,2,3])
print 'decision function', d
print  'predict', e

它打印出0.61

的正确概率
Cat prediction
['cat']
decision function [[ 0.99964652  0.99999999  0.54610562]]
predict [[ 0.61104793  0.19764548  0.19130659]]

此外,我认为我使用score错误,因为它针对自身进行测试并产生值1,这意味着它是100%准确的。如何正确使用score

0 个答案:

没有答案