相关疑难解决方法(0)

Scikit-learn predict_proba给出了错误的答案

这是一个后续问题,如何知道Scikit-learn中的predict_proba在返回数组中表示了哪些类

在那个问题中,我引用了以下代码:

>>> import sklearn
>>> sklearn.__version__
'0.13.1'
>>> from sklearn import svm
>>> model = svm.SVC(probability=True)
>>> X = [[1,2,3], [2,3,4]] # feature vectors
>>> Y = ['apple', 'orange'] # classes
>>> model.fit(X, Y)
>>> model.predict_proba([1,2,3])
array([[ 0.39097541,  0.60902459]])
Run Code Online (Sandbox Code Playgroud)

我在那个问题中发现这个结果表示属于每个类的点的概率,按照model.classes_给出的顺序

>>> zip(model.classes_, model.predict_proba([1,2,3])[0])
[('apple', 0.39097541289393828), ('orange', 0.60902458710606167)]
Run Code Online (Sandbox Code Playgroud)

所以...这个答案,如果正确解释,说这个点可能是一个"橙色"(由于数据量很小,信心相当低).但直觉上,这个结果显然是不正确的,因为给出的点与'apple'的训练数据相同.只是为了确定,我也测试了反向:

>>> zip(model.classes_, model.predict_proba([2,3,4])[0])
[('apple', 0.60705475211840931), ('orange', 0.39294524788159074)]
Run Code Online (Sandbox Code Playgroud)

再次,显然不正确,但在另一个方向.

最后,我尝试了更远的点.

>>> X = [[1,1,1], [20,20,20]] # feature vectors
>>> model.fit(X, Y)
>>> zip(model.classes_, model.predict_proba([1,1,1])[0])
[('apple', 0.33333332048410247), ('orange', 0.66666667951589786)]
Run Code Online (Sandbox Code Playgroud)

同样,该模型预测错误的概率.但是,model.predict功能正确!

>>> model.predict([1,1,1])[0] …
Run Code Online (Sandbox Code Playgroud)

python scikit-learn

39
推荐指数
2
解决办法
4万
查看次数

标签 统计

python ×1

scikit-learn ×1