【发布时间】:2016-06-05 17:52:32
【问题描述】:
我目前正在使用 scikit-learn 解决多标签分类问题,但在学习如何获取每个类/标签的预测概率时遇到了一些麻烦 - 类似于 scikit-learn 的 @987654323 @ 方法适用于二元分类任务。
我的 y 是一个 100x10 二维数组,有 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]
在X_test 上使用.predict_proba() 返回形状为39 x 848,048 的二维数组(其中39 是唯一类的数量,848,048 是实例的数量)。
所以用外行的话来说,我要问的是:自从.predict_proba() 返回(就上面的小图表而言)之后,我该怎么做。
注意:此:
y_hat_proba = clf.predict_proba(X_test)
print(y_hat_proba[0][1])
返回[ 1. 0.]
【问题讨论】:
-
你是你的类变量吗?你是单机编码还是什么?换句话说,每个类标签都是二进制向量吗?我不明白为什么它是 100 x 10。
-
是的,已经完成了 preprocessing.MultiLabelBinarizer()。我使用它是因为有多个标签。我以 100 x 10 为例 - 100 是示例实例数,10 是 10 个唯一类。
-
您能发布一些训练示例的示例输出吗?仅仅是列的总和不等于一吗?因为听起来你想要一个 M x C ndarray 作为你的输出,对吧?
-
您描述的维度实际上是转置的。它应该是 848048x39。你确定你正确地传递了 X_test (可能需要先转置)。另外,在提问方面,请查看stackoverflow.com/help/mcve
-
是的 Garrett 我也注意到了,回去检查了 X 和 y,就形状而言一切都很好,所以我不知道为什么输出会被转置。
标签: python scikit-learn