Machine learning sklearn-预测每个类';s概率

Machine learning sklearn-预测每个类';s概率,machine-learning,probability,multilabel-classification,predictive,Machine Learning,Probability,Multilabel Classification,Predictive,到目前为止,我已经提供了资源和 一般来说,我想给出以下示例: X = np.matrix([[1,2],[2,3],[3,4],[4,5]]) y = np.array(['A', 'B', 'B', 'C', 'D']) Xt = np.matrix([[11,22],[22,33],[33,44],[44,55]]) model = model.fit(X, y) pred = model.predict(Xt) 然而,对于输出,我希望看到每个观测值有3列作为pred的输出: A |

到目前为止,我已经提供了资源和

一般来说,我想给出以下示例:

X = np.matrix([[1,2],[2,3],[3,4],[4,5]])
y = np.array(['A', 'B', 'B', 'C', 'D'])
Xt = np.matrix([[11,22],[22,33],[33,44],[44,55]])
model = model.fit(X, y)
pred = model.predict(Xt)

然而,对于输出,我希望看到每个观测值有3列作为
pred
的输出:

 A  |  B  |  C
.5  | .2  | .3
.25 | .25 | .5
...
在我的预测中,每一类出现的概率不同

我相信最好的方法是我上面提供的第二个链接中的
多标签分类
。此外,我认为跳到下面列出的
多标签
多输出
型号之一可能是个好主意:

Support multilabel:

    sklearn.tree.DecisionTreeClassifier
    sklearn.tree.ExtraTreeClassifier
    sklearn.ensemble.ExtraTreesClassifier
    sklearn.neighbors.KNeighborsClassifier
    sklearn.neural_network.MLPClassifier
    sklearn.neighbors.RadiusNeighborsClassifier
    sklearn.ensemble.RandomForestClassifier
    sklearn.linear_model.RidgeClassifierCV

Support multiclass-multioutput:

    sklearn.tree.DecisionTreeClassifier
    sklearn.tree.ExtraTreeClassifier
    sklearn.ensemble.ExtraTreesClassifier
    sklearn.neighbors.KNeighborsClassifier
    sklearn.neighbors.RadiusNeighborsClassifier
    sklearn.ensemble.RandomForestClassifier
然而,我正在寻找一个谁是有更多的信心和经验,在这样做的正确方式。感谢所有反馈


-bmc

据我所知,您希望获得多类分类器的每个潜在类的概率

在Scikit学习中,它可以通过泛型函数predict_proba完成。它是为scikit learn中的大多数分类器实现的。你基本上称之为:

clf.predict_proba(X)
其中
clf
是经过训练的分类器。 作为输出,对于每个输入值,您将获得每个类的十进制概率数组

警告一句——并非所有的分类器都能自然地评估类概率。例如,SVM不能做到这一点。不过,您仍然可以获得类概率,但在构建此类分类器时,您需要指示它执行概率估计。对于SVM,它看起来像:

SVC(Probability=True)
安装后,您将能够像以前一样使用
predict\u proba


我需要提醒你们,如果分类器不能自然地评估概率,这意味着概率将使用相当广泛的计算方法进行评估,这可能会显著增加训练时间。因此,我建议您使用自然评估类别概率的分类器(具有softmax输出的神经网络、逻辑回归、梯度增强等)

据我所知,您希望获得多类别分类器的每个潜在类别的概率

在Scikit学习中,它可以通过泛型函数predict_proba完成。它是为scikit learn中的大多数分类器实现的。你基本上称之为:

clf.predict_proba(X)
其中
clf
是经过训练的分类器。 作为输出,对于每个输入值,您将获得每个类的十进制概率数组

警告一句——并非所有的分类器都能自然地评估类概率。例如,SVM不能做到这一点。不过,您仍然可以获得类概率,但在构建此类分类器时,您需要指示它执行概率估计。对于SVM,它看起来像:

SVC(Probability=True)
安装后,您将能够像以前一样使用
predict\u proba


我需要提醒你们,如果分类器不能自然地评估概率,这意味着概率将使用相当广泛的计算方法进行评估,这可能会显著增加训练时间。因此,我建议您使用能够自然评估类别概率的分类器(具有softmax输出的神经网络、逻辑回归、梯度增强等)

尝试使用校准模型:

# define model
model = SVC()
# define and fit calibration model
calibrated = CalibratedClassifierCV(model, method='sigmoid', cv=5)
calibrated.fit(trainX, trainy)
# predict probabilities
print(calibrated.predict_proba(testX)[:, 1])

尝试使用校准模型:

# define model
model = SVC()
# define and fit calibration model
calibrated = CalibratedClassifierCV(model, method='sigmoid', cv=5)
calibrated.fit(trainX, trainy)
# predict probabilities
print(calibrated.predict_proba(testX)[:, 1])

你能澄清一下你到底想要什么答案吗?基本上,multilable是将预定义标签集中的>=0标签附加到输入示例。它可能没有标签,一个标签或一堆标签。至于多类情况下的概率输出——对于所有类型的分类器,大多数情况下都可以使用predict|u proba函数获得它。“但是对于输出,我希望每个观测值有3列作为pred的输出:A | B | C.5 |。2 |。3.25 |。25 |。5…”是我例外的输出。predict_proba是否为每个可能的标签返回一个概率?是的,它基本上是sklearn为每个多类分类器尝试实现的一个函数。但是对于一些算法(比如svm,它不自然地提供概率估计),您需要首先向分类器传递一条指令,希望它在训练期间估计类概率。例如,对于svm,它是svc(概率=真)。然后predict_Probaba会给你每门课的概率。你能澄清一下你到底想要什么答案吗?基本上,multilable是将预定义标签集中的>=0标签附加到输入示例。它可能没有标签,一个标签或一堆标签。至于多类情况下的概率输出——对于所有类型的分类器,大多数情况下都可以使用predict|u proba函数获得它。“但是对于输出,我希望每个观测值有3列作为pred的输出:A | B | C.5 |。2 |。3.25 |。25 |。5…”是我例外的输出。predict_proba是否为每个可能的标签返回一个概率?是的,它基本上是sklearn为每个多类分类器尝试实现的一个函数。但是对于一些算法(比如svm,它不自然地提供概率估计),您需要首先向分类器传递一条指令,希望它在训练期间估计类概率。例如,对于svm,它是svc(概率=真)。然后predict_Probaba将为您提供每个类的概率。您如何知道它为哪个标签提供概率的顺序?例如,
y\u pred=clf.predict\u proba(X\u test\u tfidf[:len(df\u test)])
生成此输出
数组([0.29354825,0.08547672,0.62097503],[0.75855171,0.13965677,0.10179152],[0.39376194,0.50768248,0.09855559],…,[0.78636186,0.08047552,0.13316294],[,[0.32583947,0.06651614,0.60764439],[0.36811811,0.53192139,0.0999605])
我如何知道第一、第二和第三个因子代表的是什么?@bmc使用clf.classes,这将为您提供正确的顺序您如何知道它给出概率的标签的顺序