Python Scikit学习预测概率的分类器输出

Python Scikit学习预测概率的分类器输出,python,scikit-learn,random-forest,Python,Scikit Learn,Random Forest,我有一个数据集,我把它一分为二,用于使用scikit learn训练和测试随机森林分类器 我有87个班级和344个样本。大多数情况下,predict\u proba的输出是一个三维数组(87344,2)(它实际上是一个包含87个numpy.ndarray元素的列表) 有时,当我选择一个不同的样本子集进行训练和测试时,我只得到一个二维数组(87344)(尽管我无法确定在哪种情况下) 我的两个问题是: 这些维度代表什么?我计算出要得到ROC AUC分数,我必须取一半的输出(也就是说,(87344,

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

我有87个班级和344个样本。大多数情况下,
predict\u proba
的输出是一个三维数组
(87344,2)
(它实际上是一个包含87个
numpy.ndarray
元素的
列表)

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

我的两个问题是:

  • 这些维度代表什么?我计算出要得到ROC AUC分数,我必须取一半的输出(也就是说,
    (87344,2)[:,:,1]
    ,将其转换,然后将其与我的基本事实进行比较(
    ROC AUC分数(基本事实,预测概率的输出)[:,:,1].T)
    ,但我不明白它的真正含义
  • 为什么输出会随着数据的不同子集而变化?我不明白在哪些情况下它会返回3D数组,在哪些情况下它会返回2D数组

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

是否确定用于匹配RF的数组具有正确的形状?(n_样本,n_特征)用于数据和(n_样本)对于目标类。 在你的例子中,你应该得到一个数组Y_pred的形状(n_样本,n_类),所以(344,87),其中r行的项目i是样本X[r,:]的类i的预测概率。注意
sum(Y_pred[r,:])=1

但是,我认为如果目标数组Y具有形状(n_个样本,n_个类),其中每一行都是零,只有一行对应于样本类,那么sklearn将其视为一个多输出预测问题(独立考虑每个类)但我不认为这是你想做的。在这种情况下,对于每个类和每个样本,你都会预测是否属于这个类

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

希望有帮助