构建手动集成分类器后绘制ROC曲线
我正在使用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。因此,我在每次折叠后使用列表来跟踪fpr
、tpr
和roc_auc
,大致是这样的:
folds_auc.append(roc_auc)
folds_fpr.append(fpr)
folds_tpr.append(tpr)
问题是,在每次折叠后,fpr
和tpr
的数组长度不同,所以我不能简单地把它们相加再除以3来绘制ROC曲线。我想绘制ROC曲线,但不知道该怎么做。请问我该如何解决这个问题呢?
2 个回答
0
基本上,你需要在计算roc_auc
之前,把交叉验证的结果合并在一起,然后再对所有结果进行性能评估。如果你在做“留一法”交叉验证,就是这样做的,但在这里你也可以用类似的方法。
这里有更详细的解释。