predict_proba 的 Scikit-learn RandomForestClassifier 输出
Posted
技术标签:
【中文标题】predict_proba 的 Scikit-learn RandomForestClassifier 输出【英文标题】:Scikit-learn RandomForestClassifier output of predict_proba 【发布时间】:2015-04-01 16:36:48 【问题描述】:我有一个数据集,我将其分成两部分,用于使用 scikit learn 训练和测试随机森林分类器。
我有 87 个课程和 344 个样本。 predict_proba
的输出在大多数情况下是一个 3 维数组 (87, 344, 2)
(实际上是 list
的 87 个 numpy.ndarray
s 的 (344, 2)
元素)。
有时,当我选择不同的样本子集进行训练和测试时,我只会得到一个二维数组(87, 344)
(尽管我无法确定在哪些情况下)。
我的两个问题是:
这些尺寸代表什么?我计算出要获得 ROC AUC 分数,我必须取输出的一半(即(87, 344, 2)[:,:,1]
,转置它,然后将其与我的基本事实进行比较(roc_auc_score(ground_truth, output_of_predict_proba[:,:,1].T)
本质上)。但我没有理解它的真正含义。
为什么输出会随着数据的不同子集而变化?我不明白在哪些情况下它返回一个 3D 数组,在哪些情况下返回一个 2D 数组。
【问题讨论】:
【参考方案1】:classifier.predict_proba()
返回类概率。数组的n
维度将根据您训练的子集中有多少类而有所不同
【讨论】:
【参考方案2】:您确定用于安装 RF 的阵列具有正确的形状吗? (n_samples,n_features) 用于数据,(n_samples) 用于目标类。
在您的情况下,您应该得到一个形状为 (n_samples,n_classes) 所以 (344,87) 的数组 Y_pred,其中第 r 行的项目 i 是样本 X[r,:] 的第 i 类的预测概率。请注意sum( Y_pred[r,:] ) = 1
。
但是我认为,如果您的目标数组 Y 具有形状 (n_samples,n_classes),其中每一行都为零,除了对应于样本类别的一个,那么 sklearn 将其视为多输出预测问题(考虑每个独立上课),但我认为这不是你想做的。在这种情况下,对于每个类别和每个样本,您将预测是否属于该类别的概率。
最后,输出确实取决于训练集,因为它取决于类的数量(在训练集中)。您可以使用属性n_classes
获取它(您也可以通过手动设置来强制类的数量),您还可以使用属性classes
获取类的值。请参阅documentation。
希望对你有帮助!
【讨论】:
以上是关于predict_proba 的 Scikit-learn RandomForestClassifier 输出的主要内容,如果未能解决你的问题,请参考以下文章
如何修复 TypeError:predict_proba() 缺少 1 个必需的位置参数:'X'
如何在 clf.predict_proba() 中找到对应的类
AttributeError:“功能”对象没有属性“predict_proba”