Scikit-learn随机森林分类器的predict_proba输出

3

我有一个数据集,将其分为两部分进行随机森林分类器的训练和测试,使用的是scikit learn

我有87个类别和344个样本。大多数情况下,predict_proba 的输出是三维数组 (87, 344, 2)(实际上是由87个元素为(344, 2)numpy.ndarray列表组成)。

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

我的两个问题是:

  • 这些维度代表什么?我发现要得到ROC AUC分数,我必须取输出的一半(即(87, 344, 2)[:,:,1]),转置它,然后与我的真值比较(基本上是roc_auc_score(ground_truth, output_of_predict_proba[:,:,1].T))。但我不明白这到底意味着什么。
  • 为什么输出会随着不同数据子集而改变?我无法理解在哪些情况下它会返回三维数组,在哪些情况下会返回二维数组。
2个回答

0

您确定用于适配RF的数组形状正确吗?数据应该是(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获取类别值。请参见文档

希望能有所帮助!


0

classifier.predict_proba() 返回类别概率。数组的 n 维度将根据您训练的子集中有多少个类别而变化。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接