predict_proba 的 Scikit-learn RandomForestClassifier 输出

Posted

技术标签:

【中文标题】predict_proba 的 Scikit-learn RandomForestClassifier 输出【英文标题】:Scikit-learn RandomForestClassifier output of predict_proba 【发布时间】:2015-04-01 16:36:48 【问题描述】:

我有一个数据集,我将其分成两部分,用于使用 scikit learn 训练和测试随机森林分类器。

我有 87 个课程和 344 个样本。 predict_proba 的输出在大多数情况下是一个 3 维数组 (87, 344, 2)(实际上是 list 的 87 个 numpy.ndarrays 的 (344, 2) 元素)。

有时,当我选择不同的样本子集进行训练和测试时,我只会得到一个二维数组(87, 344)(尽管我无法确定在哪些情况下)。

我的两个问题是:

这些尺寸代表什么?我计算出要获得 ROC AUC 分数,我必须取输出的一半(即(87, 344, 2)[:,:,1],转置它,然后将其与我的基本事实进行比较(roc_auc_score(ground_truth, output_of_predict_proba[:,:,1].T) 本质上)。但我没有理解它的真正含义。 为什么输出会随着数据的不同子集而变化?我不明白在哪些情况下它返回一个 3D 数组,在哪些情况下返回一个 2D 数组。

【问题讨论】:

【参考方案1】:

classifier.predict_proba() 返回类概率。数组的n 维度将根据您训​​练的子集中有多少类而有所不同

【讨论】:

【参考方案2】:

您确定用于安装 RF 的阵列具有正确的形状吗? (n_samples,n_features) 用于数据,(n_samples) 用于目标类。 在您的情况下,您应该得到一个形状为 (n_samples,n_classes) 所以 (344,87) 的数组 Y_pred,其中第 r 行的项目 i 是样本 X[r,:] 的第 i 类的预测概率。请注意sum( Y_pred[r,:] ) = 1

但是我认为,如果您的目标数组 Y 具有形状 (n_samples,n_classes),其中每一行都为零,除了对应于样本类别的一个,那么 sklearn 将其视为多输出预测问题(考虑每个独立上课),但我认为这不是你想做的。在这种情况下,对于每个类别和每个样本,您将预测是否属于该类别的概率。

最后,输出确实取决于训练集,因为它取决于类的数量(在训练集中)。您可以使用属性n_classes 获取它(您也可以通过手动设置来强制类的数量),您还可以使用属性classes 获取类的值。请参阅documentation。

希望对你有帮助!

【讨论】:

以上是关于predict_proba 的 Scikit-learn RandomForestClassifier 输出的主要内容,如果未能解决你的问题,请参考以下文章

如何修复 TypeError:predict_proba() 缺少 1 个必需的位置参数:'X'

如何在 clf.predict_proba() 中找到对应的类

如何在 SVM 情绪分析中使用 predict_proba

AttributeError:“功能”对象没有属性“predict_proba”

为啥随机森林分类器 .predict() 和 .predict_proba() 的预测不匹配?

sklearn中predict()和predict_proba()的返回值