4

到目前为止,我已经为另一篇文章sklearn 文档提供了资源

所以总的来说,我想生成以下示例:

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-label之一可能是个好主意:multi-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

4

2 回答 2

15

据我了解,您希望获得多类分类器的每个潜在类的概率。

在 Scikit-Learn 中,它可以通过通用函数 predict_proba 来完成。它适用于 scikit-learn 中的大多数分类器。你基本上打电话:

clf.predict_proba(X)

clf训练好的分类器在哪里。作为输出,您将获得每个输入值的每个类的十进制概率数组。

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

SVC(Probability=True)

装好之后就可以predict_proba像以前一样使用了。

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

于 2017-11-07T04:23:12.353 回答
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])
于 2020-05-13T05:25:03.340 回答