Документация Склеарна , похоже, подразумевает, что для оценки 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)