构建手动 bagging 分类器后绘制 ROC 曲线

Posted

技术标签:

【中文标题】构建手动 bagging 分类器后绘制 ROC 曲线【英文标题】:Drawing ROC curve after building a manual bagging classifier 【发布时间】:2014-05-12 14:07:24 【问题描述】:

我正在使用 scikit-learn 手动构建装袋分类器。我需要这样做,因为我有三个数据子集,并且我需要在每个子集上训练一个分类器。所以我基本上做的是创建三个RandomForestClassifier 分类器并在子集上训练每个分类器。然后给定一个测试集,我执行以下操作来找到 ROC AUC:

        probas2 = estimators[2].predict_proba(X_test)
        probas3 = estimators[3].predict_proba(X_test)
        probas4 = estimators[4].predict_proba(X_test)

        probas = probas2[:,1] + probas3[:,1] + probas4[:,1]
        probas = probas / 3.0

        fpr, tpr, thresholds = roc_curve(y_test, probas)
        roc_auc = auc(fpr, tpr)

但是我需要做 3 折交叉验证,然后绘制 ROC 曲线并输出 AUC。所以基本上我在每次折叠后使用这样的列表跟踪fprtprroc_auc

folds_auc.append(roc_auc)
folds_fpr.append(fpr)
folds_tpr.append(tpr)

问题是每次折叠后fprtpr 都是不同长度的数组,所以我不能将它们相加并除以3 来绘制ROC 曲线。我想绘制 ROC 曲线,但我不知道该怎么做。请问这个问题怎么解决?

【问题讨论】:

【参考方案1】:

以下是示例的答案: http://scikit-learn.org/stable/auto_examples/plot_roc_crossval.html

【讨论】:

【参考方案2】:

基本上你需要在计算roc_auc之前结合交叉验证折叠的结果,然后计算所有的性能。如果您要进行遗漏交叉验证,这就是您必须做的事情,但您可以在此处执行类似的架构。

Here解释的比较详细。

【讨论】:

以上是关于构建手动 bagging 分类器后绘制 ROC 曲线的主要内容,如果未能解决你的问题,请参考以下文章

多分类问题的ROC曲线绘制

如何从分类树概率中绘制 ROC 曲线

绘制 Roc 曲线的自动编码器分类

如何使用 r 中的 ROCR 包绘制 ROC 曲线,*只有分类列联表*

如何从具有 2 个输出神经元的 softmax 二元分类器绘制 ROC 曲线?

在单个 ROC 图上绘制线性判别分析、分类树和朴素贝叶斯曲线