【问题标题】:Scikit-learn RandomForestClassifier output of predict_probapredict_proba 的 Scikit-learn RandomForestClassifier 输出
【发布时间】:2023-03-22 07:24:02
【问题描述】:

我有一个数据集,我将其分成两部分,用于使用 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 数组。

【问题讨论】:

    标签: python scikit-learn random-forest


    【解决方案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

      希望对你有帮助!

      【讨论】:

        猜你喜欢
        • 2015-08-17
        • 2015-04-18
        • 2016-01-26
        • 2013-06-05
        • 2019-10-22
        • 2014-04-20
        • 1970-01-01
        • 2018-12-30
        • 2012-09-03
        相关资源
        最近更新 更多