Почему `scoring =" neg_log_loss "` и `scoring = make_scorer (log_loss)` дают такие разные оценки валидации? - PullRequest
1 голос
/ 28 апреля 2020

Документация Склеарна , похоже, подразумевает, что для оценки neg_log_loss используется log_loss в качестве оценщика. Этот вопрос пытается прояснить, что происходит под капотом, и принятый ответ говорит, что neg_log_loss просто равно - log_loss. Однако прилагаемый пример показывает, что это не так.

Какая связь между scoring = "neg_log_loss" и scoring=make_scorer(log_loss)? Очевидные разрывы заставляют меня думать, что neg_log_loss использует вероятности, а не прогнозы в потере. Как я могу изменить свой код ниже, чтобы каждый метод возвращал одинаковые результаты?


import numpy as np
from sklearn.linear_model import LogisticRegression
from sklearn.metrics import accuracy_score, log_loss, make_scorer, get_scorer
from sklearn.model_selection import GridSearchCV
from sklearn.datasets import make_classification
from sklearn.model_selection import KFold
import pandas as pd

import matplotlib.pyplot as plt
%matplotlib inline

X,y = make_classification(random_state = 0)

cv = KFold(10)


nll = lambda y, ypred: -1*log_loss(y, ypred)


param_grid = {'C':1/np.logspace(-5,2, base = np.exp(1))}
model = LogisticRegression(penalty = 'l1', solver = 'liblinear', max_iter=10_000)

gscv_scoring = GridSearchCV(model, param_grid=param_grid, cv = cv, scoring = 'neg_log_loss').fit(X,y)    
gscv_make_scoring = GridSearchCV(model, param_grid=param_grid, cv = cv, scoring = make_scorer(nll)).fit(X,y)    


fig, ax = plt.subplots(dpi = 120)

r1 = pd.DataFrame(gscv_scoring.cv_results_)
r2 = pd.DataFrame(gscv_make_scoring.cv_results_)


plt.plot(r1.param_C, r1.mean_test_score)
plt.plot(r2.param_C, r2.mean_test_score)


enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...