Scikit-learn RandomForestClassifier output of predict_proba



>我有一个数据集,我把它一分为二,用于训练和测试带有scikit learn的随机森林分类器。

我有87个班级和344个样本。大多数时候,predict_proba 的输出是一个 3 维数组(87, 344, 2)(它实际上是 87 numpy.ndarray s 的(344, 2)元素的list)。

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

我的两个问题是:

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

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

您确定用于适合射频的阵列具有正确的形状吗?(n_samples,n_features) 用于数据,(n_samples) 用于目标类。在您的例子中,您应该获得形状为 (n_samples,n_classes) 的Y_pred数组 (344,87),其中第 r 行的第 i 项是样本 X[r,:] 的类 i 的预测概率。请注意,sum( Y_pred[r,:] ) = 1 .

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

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

希望对您有所帮助!

相关内容

  • 没有找到相关文章

最新更新