python - 在交叉验证期间将参数传递给 scikit 中的 Score_func

标签 python machine-learning scikit-learn

我想在交叉验证期间计算 scikit 中的微平均精度。

这里的文档:

http://scikit-learn.org/0.10/modules/cross_validation.html

假设您可以从指标模块传入自定义评分函数,例如metrics. precision_score:

http://scikit-learn.org/stable/modules/generated/sklearn.metrics.precision_score.html#sklearn.metrics.precision_score

但默认情况下它会计算每个类(class)的分数。如果我尝试像这样传入 average="micro" :

cross_validation.cross_val_score(clf, x, label, cv=5,
score_func=metrics.precision_score(average="micro"))

我收到以下错误:

TypeError: precision_score() takes at least 2 arguments (1 given)

我无法传入它想要的所有其他参数(y_truey_pred),因为我不知道 y_pred是。

有没有办法从 scikit 中的交叉验证中获得微平均精度?

最佳答案

这里的问题是您调用(使用参数average)metrics. precision_score而不是传递函数本身。解决此问题的临时方法是创建一个函数

def micro_average_precision_score(y_true, y_pred):
    metrics.precision_score(y_true, y_pred, average="micro")

然后将其用作您的score_func,即score_func=micro_average_ precision_score

重要的旁注:score_func已被弃用(如果我没记错的话,从0.13开始)。您指的是 0.10 版本的 scikit learn 文档。你用的是这个版本吗?

传递记分器的新方法是使用记分器对象。关联的关键字是 scoring= 而不是 score_func=。您可以使用 make_scorer

从任何评分函数(例如上面定义的函数)中创建评分器对象
from sklearn.metrics.score import make_scorer
scorer = make_scorer(micro_average_precision_score, greater_is_better=True)

或者,等价:

scorer = make_scorer(metrics.precision_score, 
                     greater_is_better=True, average="micro")

关于python - 在交叉验证期间将参数传递给 scikit 中的 Score_func,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23170874/

相关文章:

python - 导入错误 : cannot import name 'image_dataset_from_directory' from 'tensorflow.keras.preprocessing' (unknown location)

python - Python中标签二值化的逆过程

python-3.x - 为什么单层 MLP 在数字分类器中优于多层?

python - Sklearn MLP 分类器超参数优化 (RandomizedSearchCV)

python - 权限错误: [Errno 13] Permission denied geckodriver. exe

python - 如何使用 Python/Glade 更改主窗口小部件?

algorithm - 数据压缩 - 指数分布的机器学习

machine-learning - Adaboost 与神经网络

python - wxPython:我应该如何在 Controller 中组织每个小部件数据?

python - 我可以从另一个字节对象中获取长度为 1 的字节对象,而不进行切片吗?