Почему cross_val_score в sklearn отображает значение метрики? - PullRequest
0 голосов
/ 19 ноября 2018

Подхожу к этой модели от 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]) для оценки перекрестной проверки.

1 Ответ

0 голосов
/ 20 ноября 2018

Примечание: отредактировано после плодотворной цепочки комментариев с Вивек Кумар и piccolbo .

О LinearRegressionCV score странные результаты метода

Вы нашли ошибку, которая была исправлена ​​в версии 0.20.0.

Из changelog :

Исправлено: Исправлена ​​ошибка в linear_model.LogisticRegressionCV, когда метод оценки всегда вычисляет точность, а не показатель, заданный параметром оценки., # 10998 Томаса Фана.

Кроме того, документация sklearn 0.19 LogisticRegressionCV говорит:

оценка (X, y,sample_weight = нет)

Возвращает среднюю точность для данных и этикеток с данными испытаний.

В то время как из версии 0.20.0, документы обновляются с исправлением:

оценка (X, y, sample_weight = нет)

Возвращает оценку с использованием опции оценки в данном тестеданные и метки.


Об отрицательных значениях, возвращаемых в cross_val_score

cross_val_score, отображает значение результата для error или loss метрик, пока оносохраняет знак для метрики score.Из документации :

Все объекты счетчика следуют соглашению, что более высокие возвращаемые значения лучше, чем более низкие возвращаемые значения.Таким образом, метрики, которые измеряют расстояние между моделью и данными, такие как metrics.mean_squared_error, доступны как neg_mean_squared_error, которые возвращают отрицательное значение метрики.

...