首页 文章

Scikit-学习predict_proba的RandomForestClassifier输出

提问于
浏览
3

我有一个数据集,我分成两个用于训练和测试随机森林分类器与scikit学习 .

我有87个 class 和344个样本 . 大多数情况下, predict_proba 的输出是一个三维数组 (87, 344, 2) (它实际上是 (344, 2) 的87个 numpy.ndarray(344, 2) 元素) .

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

我的两个问题是:

  • 这些尺寸代表什么?我得出了得到ROC AUC分数,我必须得到输出的一半(即 (87, 344, 2)[:,:,1] ,转置它,然后将它与我的基本事实(基本上是 roc_auc_score(ground_truth, output_of_predict_proba[:,:,1].T) )进行比较 . 但我不明白它到底是什么手段 .

  • 为什么输出会随着数据的不同子集而变化?我无法理解它在哪种情况下返回3D数组,在哪种情况下返回2D数组 .

2 回答

  • 0

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

  • 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 .

    希望能帮助到你 !

相关问题