在GridSearchCV中可以使用log_loss度量吗?
我看到一些帖子中提到neg_log_loss
,它和log_loss
相同吗?如果不相同,是否可以直接在GridSearchCV中使用log_loss?
回答:
如文档中所述,评分可以接受不同的输入:字符串、可调用对象、列表/元组、字典或None。如果使用字符串,可以在这里找到可能的输入列表这里。
在字符串中,log loss的代表是”neg_log_loss”,即负的log loss,它只是log loss乘以-1。这是一种简单处理最大化问题的方法(这是GridSearchCV所期望的,因为它需要一个评分参数,而不是损失参数),而不是最小化问题(你想要最小的log loss,这等同于最大的负log loss)。
如果你想直接将log loss函数传递给GridSearchCV,你只需使用Scikit-learn的log_loss函数,通过make_scorer创建一个评分器:
from sklearn import svm, datasetsfrom sklearn.model_selection import GridSearchCVfrom sklearn.metrics import log_loss, make_scoreriris = datasets.load_iris()parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]}svc = svm.SVC(gamma="scale", probability=True)LogLoss = make_scorer(log_loss, greater_is_better=False, needs_proba=True)clf = GridSearchCV(svc, parameters, cv=5, scoring=LogLoss)clf.fit(iris.data, iris.target)print(clf.best_score_, clf.best_estimator_)