我正在研究一个分类问题,在该问题中,我想找到“将输入分类为[1,0]和不是[1,0]的概率”
我尝试使用SVC的predict_proba
方法,该方法给出了我找不到的类的可能性
from sklearn.svm import SVC
model = SVC(probability=True)
model.fit(final_data,foreclosure_y)
results = model.predict_proba(final_data_test)[0]
我希望我的输出像这样
index,y
---------
0,0.45
1,0.62
2,0.43
3,0.12
4,0.55
注意:上面的输出采用.csv格式,其中y是test_y
这里y列是从0到4索引的每个实例的概率,可以将其分类为0或1
例如:-索引0的概率为0.45,可归为0或1
答案 0 :(得分:1)
注意
sum([0.58502114, 0.41497886])
# 1.0
predict_proba
给出两个类的概率(因此,数组元素的总和为1),顺序是它们出现在model.classes_
中的顺序;引用docs(在这种情况下,总是您最好的朋友)
返回模型中每个类别的样本概率。的 列按排序顺序对应于类,因为它们出现在 属性classes _。
下面是一个带有玩具数据的例子来说明这个想法:
from sklearn.svm import SVC
model = SVC(probability=True)
X = [[1,2,3], [2,3,4]] # feature vectors
Y = [0, 1] # classes
model.fit(X, Y)
现在让我们获得训练集[1,2,3]
中第一个实例的预测概率:
model.predict_proba(X)[0]
# array([0.39097541, 0.60902459])
好的,顺序是什么-即哪个概率属于哪个类别?
model.classes_
# array([0, 1])
因此,这意味着属于类0
的实例的概率是数组0.39097541
的第一个元素,而属于类1
的概率是第二个元素0.60902459
;再一次,它们总计为1,如预期:
sum([0.39097541, 0.60902459])
# 1.0
更新
现在,在您需要的输出中,我们不会同时输入这两种概率;按照惯例,对于二进制分类,我们仅包括属于 1类的每个实例的概率;以下是我们仅针对2个实例显示的玩具数据集X
的方法:
pred = model.predict_proba(X)
pred
# array([[ 0.39097541, 0.60902459],
# [ 0.60705475, 0.39294525]])
import pandas as pd
out = pd.DataFrame(pred[:,1],columns=['y']) # keep only the second element of the arrays in pred, i.e. the probability for class 1
print(out)
结果:
y
0 0.609025
1 0.392945