Я примеряю эту модель от sklearn
.
LogisticRegressionCV(
solver="sag", scoring="neg_log_loss", verbose=0, n_jobs=-1, cv=10
)
Подгонка приводит к model.score
(на тренировочном наборе) 0,67 и изменению. Поскольку нет способа (или я не знаю, как) получить доступ к результатам перекрестной проверки, выполненной как часть подбора модели, я запускаю отдельную перекрестную проверку на той же модели с помощью
cross_val_score(model, X, y, cv=10, scoring="neg_log_loss")
Это возвращает массив отрицательных чисел
[-0.69517214 -0.69211235 -0.64173978 -0.66429986 -0.77126878 -0.65127196
-0.66302393 -0.65916281 -0.66893633 -0.67605681]
который, если бы знаки были перевернуты, оказался бы в диапазоне, совместимом с тренировочной оценкой. Я читал обсуждение в вопросе о том, что cross_val_score переворачивает знак данной функции подсчета очков, и решение казалось, что метрики neg_*
были введены, чтобы сделать такое переключение ненужным, и я использую neg_log_loss
. В выпуске говорится о mse
, но аргументы, похоже, применимы и к log_loss
. Есть ли способ заставить cross_val_score
возвращать ту же метрику, что и указанная в ее аргументах? Или это ошибка, которую я должен зарегистрировать? Или это недоразумение с моей стороны и от cross_val_score
все же стоит ожидать смены знака?
Я надеюсь, что это достаточно конкретный вопрос для SO. Sklearn
разработчики перенаправляют пользователей на SO по вопросам, которые не являются четкими отчетами об ошибках или требованиями к функциям.
Добавление минимального кода воспроизведения для каждого запроса в комментариях (sklearn v 0.19.1 python 2.7):
from numpy.random import randn, seed
from sklearn.linear_model import LogisticRegressionCV
from sklearn.model_selection import cross_val_score
seed (0)
X = randn(100,2)
y = randn(100)>0
model = LogisticRegressionCV(
solver="sag", scoring="neg_log_loss", verbose=0, n_jobs=-1, cv=10
)
model.fit(X=X, y=y)
model.score(X,y)
cross_val_score(model, X, y, cv=10, scoring="neg_log_loss")
С этим кодом это больше не похоже на простое изменение знака для метрики. Выходные данные: 0,59 для оценки и array([-0.70578452, -0.68773683, -0.68627652, -0.69731349, -0.69198876, -0.70089103, -0.69476663, -0.68279466, -0.70066003, -0.68532253])
для оценки перекрестной проверки.
model.score()
? Я не могу продублировать его во встроенных наборах данных scikit-learn. - person Vivek Kumar   schedule 20.11.2018model.score()
. Это было изменено в версии 0.20. Смотрите ответ ниже. - person Vivek Kumar   schedule 21.11.2018