Scikit-学习predict_proba的RandomForestClassifier输出

时间:2015-02-02 16:54:36

标签: python scikit-learn random-forest

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

我有87个班级和344个样本。 predict_proba的输出大多数情况下是一个三维数组(87, 344, 2)(实际上是list的{​​{1}}个numpy.ndarray的{​​{1}}元素)。

有时候,当我选择不同的样本子集进行训练和测试时,我只得到一个二维数组(344, 2)(虽然我无法在哪些情况下解决)。

我的两个问题是:

  • 这些尺寸代表什么?我得出了获得ROC AUC分数的结论,我必须得到输出的一半(即(87, 344),转置它,然后将它与我的基本事实((87, 344, 2)[:,:,1]本质上)进行比较。但是我不明白它的真正含义。
  • 为什么输出会随着数据的不同子集而变化?我无法理解它在哪些情况下返回3D数组,在哪些情况下返回2D数组。

2 个答案:

答案 0 :(得分:0)

classifier.predict_proba()返回类概率。数组的n维度将根据您在

上训练的子集中的类数而有所不同

答案 1 :(得分:0)

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

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

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

希望它有所帮助!