我如何找到模型将输入分类为[0,1]

时间:2019-03-23 17:14:04

标签: python machine-learning scikit-learn svm

我正在研究一个分类问题,在该问题中,我想找到“将输入分类为[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

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