理解多标记问题的预测概率

  • 本文关键字:概率 问题 python scikit-learn
  • 更新时间 :
  • 英文 :


我目前正在使用scikit-learn处理多标签分类问题,并且在学习如何获取每个类/标签的预测概率时遇到了一些麻烦 - 类似于scikit-learn的.predict_proba()方法在二元分类任务上所做的。

我的y是一个 100x10 2d 数组,有 10 个独特的类,我使用 scikit-learn 的 ensemble.RandomForestClassifier() 作为我的分类器。

我想做的只是预测一组给定特征属于y中的类之一(下面称为cl_)的概率。所以基本上我想象的输出类似于这样:

cl_1 | cl_2 | cl_3 | cl_4 | cl_5 | cl_6 | cl_7 | cl_8 | cl_9 | cl_10
---------------------------------------------------------------------
 0.0 |  0.0 |  0.0 | 0.1  |  0.3 | 0.0  | 0.0  |  0.0 | 0.6  | 0.0

注意:我已将随机森林分类器拟合到数据集,并且.predict()方法按预期工作。但是,.predict_proba() 方法以 C x M 的形式返回概率,其中 C 是唯一类的数量,M 是数据集中的实例数。

澄清/更新:这是我数据集中的实际y实例:

[0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
1 0]

使用 .predict_proba() on X_test 返回形状为 39 x 848,048 的 2D 数组(其中 39 是唯一类的数量,848,048 是实例的数量)。所以通俗地说,我要问的是:我如何从.predict_proba()回报中赚钱(就上面的小图表而言)。

注意:这:

y_hat_proba = clf.predict_proba(X_test)
print(y_hat_proba[0][1])

返回[ 1. 0.]

您可以使用

.predict_proba(X_test)来获取每个类在新点集上的概率。如果您需要对单个点进行预测,只需确保X_test只有一行。

输出的形状应为 [n_samples, n_classes] (在测试集中)。您可以查看函数的文档。

对此

进行了更新,因为scikit-learn多年来已经取得了相当大的进步,并且这种方法比预测单个样本更通用:

目前,predict_proba()返回

形状数组(n_samples、n_classes)或此类数组的列表

根据文档(目前为 SKLEARN v1.0)。因此,我发现让输出成为 OP 所期望的形状和形式(这也是我所期望的)的一种有用方法是执行以下操作:

# List of length n_labels comprised of numpy arrays each having shape (n_samples, n_classes)
predict_proba_output = model.predict_proba(features_test)
# Make into ndarray of shape (n_samples, n_labels, n_classes)
reshaped_proba_output = np.swapaxes(np.array(predict_proba_output), 0, 1)

请注意,使用 scikit-learn 语法,n_classes 表示"每个目标的基数"。因此,在OP的全二进制目标的情况下,n_classes=2.

相关内容

  • 没有找到相关文章

最新更新