使用 cross_validate 的结果制作 ROC 曲线?

Posted

技术标签:

【中文标题】使用 cross_validate 的结果制作 ROC 曲线?【英文标题】:Making ROC curves with results from cross_validate? 【发布时间】:2020-11-07 15:01:25 【问题描述】:

我正在使用随机森林进行 5 折交叉验证:

from sklearn.ensemble import RandomForestClassifier

from sklearn.model_selection import cross_validate

forest = RandomForestClassifier(n_estimators=100, max_depth=8, max_features=6)

cv_results = cross_validate(forest, X, y, cv=5, scoring=scoring)

但是,我想在一张图上绘制 5 个输出的 ROC 曲线。该文档仅提供了一个示例,用于在专门使用 StratifiedKFold 交叉验证时绘制具有交叉验证的 roc 曲线(请参阅此处的文档:https://scikit-learn.org/stable/auto_examples/model_selection/plot_roc_crossval.html#sphx-glr-auto-examples-model-selection-plot-roc-crossval-py)

我尝试 tweeking 代码以使其适用于 cross_validate 但无济于事。

如何制作一条 ROC 曲线,将 cross_validate 输出的 5 个结果绘制在单个图表上?

提前致谢

【问题讨论】:

请不要交叉发布问题...stats.stackexchange.com/questions/477667/… scoring你用什么? 【参考方案1】:

cross_validate 是一个模型验证工具,而不是一个拆分器类。您需要选择适合您的splitter class。您可能在KFold 之后。像这样的:

from sklearn.model_selection import KFold
cv = KFold(n_splits=5)

【讨论】:

所以你的意思是说使用cross_validate生成的结果不能绘制为Roc_auc图?我这样说是因为我想可视化通过运行 cross_validate 创建的结果。如果我使用随机森林运行拆分器类并绘制 roc_auc 结果,它将与我使用 cross_validate 得到的结果不匹配。这只是我必须接受的事情吗?顺便说一句,谢谢你帮助我。 在您提供的链接中,他们使用StratifiedKFold,您说您想让它用于“5 折交叉验证”而不是分层 K 折交叉验证。 StratifiedKFold 是一个拆分器类,您需要用拆分器类替换 K 折交叉验证 KFold 如果我运行: cv_results = cross_validate(forest, X, y, cv=5,scoring=scoring) 我定义的评分指标之一是 roc_auc。我要做的就是在同一张图上绘制这 5 个不同的 roc_auc 分数。您提到使用 cross_validate 时这是不可能的,因为 cross_validate 是模型验证工具而不是拆分工具。但我读到 cross_validate 自动使用 StratifiedKFold。我只想从 cv_results = cross_validate(forest, X, y, cv=5,scoring=scoring) 中获取结果并将它们绘制在 roc_auc 图上。为什么我需要使用 Kfold 或“拆分器类”?谢谢

以上是关于使用 cross_validate 的结果制作 ROC 曲线?的主要内容,如果未能解决你的问题,请参考以下文章

在 cross_validate() 函数中使用 Pipeline 来测试不同的机器学习算法

Python scikit-learn机器学习工具包学习笔记:cross_validation模块

使用 cross_validate 生成混淆矩阵

SKLEARN 导入 cross_validation 的问题

无法在 python 中实现 cross_validation

ValueError:未知标签类型:使用 cross_validation 时