我想在交叉验证期间计算 scikit 中的微平均精度。
这里的文档:
http://scikit-learn.org/0.10/modules/cross_validation.html
假设您可以从指标模块传入自定义评分函数,例如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_true
、y_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/