sklearn - 预测每个班级的概率

时间:2017-11-06 20:04:00

标签: machine-learning probability multilabel-classification predictive

到目前为止,我有资源another postsklearn documentation

所以一般来说我想制作以下例子:

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
...

每个班级在我的预测中出现的概率不同。

我认为最好的方法是Multilabel classification来自我上面提供的第二个链接。另外,我认为跳入下面列出的multi-labelmulti-output模型之一可能是个好主意:

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

2 个答案:

答案 0 :(得分:7)

根据我的理解,你想获得多类分类器的每个潜在类的概率。

在Scikit-Learn中,可以通过泛型函数predict_proba来完成。它是针对scikit-learn中的大多数分类器实现的。你基本上打电话:

clf.predict_proba(X)

clf是训练有素的分类器。 作为输出,您将获得每个输入值的每个类的十进制数组。

一句谨慎 - 并非所有分类器都自然地评估班级概率。例如,SVM不这样做。您仍然可以获得类概率,但是在构造这样的分类器时,您需要指示它执行概率估计。对于SVM,它看起来像:

SVC(Probability=True)

在您适应之后,您将能够像以前一样使用predict_proba

我需要警告你,如果分类器没有自然地评估概率,这意味着将使用相当广泛的计算方法来评估概率,这可能会显着增加训练时间。所以我建议你使用自然评估类概率的分类器(具有softmax输出的神经网络,逻辑回归,梯度增强等)

答案 1 :(得分:0)

尝试使用校准后的模型:

# 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])