首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与sklearn一起交叉验证精确度、召回率和f1

与sklearn一起交叉验证精确度、召回率和f1
EN

Stack Overflow用户
提问于 2015-06-06 21:29:17
回答 2查看 3.1K关注 0票数 8

有没有什么简单的方法可以交叉验证分类器,并立即计算精度和召回率?目前我使用的函数是

代码语言:javascript
复制
cross_validation.cross_val_score(classifier, designMatrix, classes, cv=5, scoring="precision")

然而,它只计算一个指标,所以我必须调用它2次来计算精度和召回率。对于大型ML模型,计算时间不必要地增加了2倍。有没有内置的更好的选项,或者我必须自己实现交叉验证?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2015-06-07 05:59:53

我不确定事件的当前状态(这个特性已经讨论过了),但是你总是可以通过下面的可怕的hack逃脱惩罚。

代码语言:javascript
复制
from sklearn.metrics import recall_score, precision_score
from sklearn.metrics.scorer import make_scorer
recall_accumulator = []
def score_func(y_true, y_pred, **kwargs):
    recall_accumulator.append(recall_score(y_true, y_pred, **kwargs))
    return precision_score(y_true, y_pred, **kwargs)
scorer = make_scorer(score_func)

然后在交叉验证中使用scoring=scorer。您应该可以在recall_accumulator数组中找到回调值。不过要当心,这个数组是全局的,所以请确保您没有以无法解释结果的方式写入它。

票数 1
EN

Stack Overflow用户

发布于 2016-01-31 14:52:21

cross_val_score()的参数n_job设置为1时,eickenberg的答案是有效的。要支持并行计算(n_jobs > 1),必须使用共享列表而不是全局列表。这可以在多处理模块的Manager类的帮助下完成。

代码语言:javascript
复制
from sklearn.metrics import precision_recall_fscore_support
from sklearn.metrics.scorer import make_scorer
from multiprocessing import Manager

recall_accumulator = Manager().list()
def score_func(y_true, y_pred, **kwargs):
    recall_accumulator.append(precision_recall_fscore_support(y_true, y_pred))
    return 0
scorer = make_scorer(score_func)

然后每个折叠的结果将被存储在recall_accumulator中。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30683433

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档