交叉验证精度,召回和f1以及sklearn

时间:2015-06-06 13:29:17

标签: python scikit-learn

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

cross_validation.cross_val_score(classifier, designMatrix, classes, cv=5, scoring="precision")

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

2 个答案:

答案 0 :(得分:1)

我不确定目前的状况(已经讨论过这个功能),但是你可以随时使用以下内容 - 糟糕 - 黑客

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 :(得分:1)

cross_val_score() 的参数 n_job 设置为1时,

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

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 中。