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

我正在处理一个分类问题,希望找到输入被分类为”[1,0]”和”非[1,0]”的概率

我尝试使用SVC的predict_proba方法,但它给出了我不需要的类的概率

from sklearn.svm import SVCmodel = SVC(probability=True)model.fit(final_data,foreclosure_y)results = model.predict_proba(final_data_test)[0]

我期望的输出格式如下

index,y---------    0,0.451,0.622,0.433,0.124,0.55

注意:上述输出格式为.csv,其中y是test_y

这里的列y是每个实例从0到4的概率,这些实例可能被分类为0或1

例如:索引0有0.45的概率被分类为0或1


回答:

请注意

sum([0.58502114, 0.41497886])# 1.0

predict_proba给出了两个类的概率(因此数组元素的总和为1),按照model.classes_中出现的顺序;引用文档(在这种情况下,文档总是你最好的朋友):

返回模型中每个类的样本概率。列对应于属性classes_中按排序顺序出现的类。

这里有一个使用玩具数据的例子来说明这个概念:

from sklearn.svm import SVCmodel = SVC(probability=True)X = [[1,2,3], [2,3,4]] # 特征向量Y = [0, 1] # 类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的概率;这里是如何对上面的只有两个实例的玩具数据集X进行操作的:

pred = model.predict_proba(X)pred# array([[ 0.39097541,  0.60902459],#        [ 0.60705475,  0.39294525]])import pandas as pdout = pd.DataFrame(pred[:,1],columns=['y']) # 只保留pred中数组的第二个元素,即类1的概率print(out)

结果:

          y0  0.6090251  0.392945

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注