>我有一个数据集,我把它一分为二,用于训练和测试带有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
获取类的值。请参阅文档。
希望对您有所帮助!