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

0 投票
2 回答
675 浏览
提问于 2025-04-18 00:53

我正在使用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)

不过,我需要进行三折交叉验证,然后绘制ROC曲线并输出AUC。因此,我在每次折叠后使用列表来跟踪fprtprroc_auc,大致是这样的:

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

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

2 个回答

0

基本上,你需要在计算roc_auc之前,把交叉验证的结果合并在一起,然后再对所有结果进行性能评估。如果你在做“留一法”交叉验证,就是这样做的,但在这里你也可以用类似的方法。

这里有更详细的解释。

撰写回答