这是一个后续问题,如何知道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)