Среднеквадратичная ошибка логистической регрессии - PullRequest
0 голосов
/ 05 июня 2018

ПРИМЕЧАНИЕ: Я ценю огромное количество комментариев, в которых говорится, что это неуместно для количественной оценки производительности модели.Однако это не имеет отношения к моей ошибке, и эта ошибка возникает для множества других метрик.Кроме того, см. здесь , чтобы узнать, как правильно ответить, когда вы думаете, что ОП "задает неправильный вопрос"

У меня есть логистическая модель sklearn, для которой я пытаюсь получить RMSE.Однако, когда я .predict_proba, я получаю вектор вероятностей.Тем не менее, мой y_test находится в его категориальной форме, с которой sklearn.linear_model.LogisticRegression как бы разбирается автоматически.

Как мне согласовать эти две вещи, чтобы получить СКО?

>>> sklearn.metrics.mean_squared_error(y_test, pred_proba, sample_weight=weights_test)
ValueError: y_true and y_pred have different number of output (1!=13)

Ответы [ 4 ]

0 голосов
/ 05 июня 2018

Можно преобразовать y_test в формат, совместимый с выводом predict_proba, следующим образом:

model = sklearn.linear_model.LogisticRegression().fit(X,y) # or whatever model
label_encoder = sklearn.preprocessing.LabelEncoder()
label_encoder.classes_ = model.classes_
y_test_onehot = sklearn.preprocessing.OneHotEncoder().fit_transform(label_encoder.transform(y_test).reshape((-1,1)))

Теперь вы можете применить любой из показателей в sklearn.metric.Это важно для вычисления, скажем, показателя Brier.

0 голосов
/ 05 июня 2018

Вот как вы можете рассчитать RMSE:

import numpy as np
from sklearn.metrics import mean_squared_error
x = np.range(10)
y = x
rmse = np.sqrt(mean_squared_error(x, y))
0 голосов
/ 05 июня 2018

Оценка Бриера, в основном среднеквадратическая ошибка, является известной и действительной функцией потерь для классификационных моделей, использующих оценки вероятности;Я также хотел бы взглянуть на это.

К вашей конкретной проблеме вы хотите сравнить вероятности, возвращаемые для вашего целевого класса, то есть для проблемы двоичного класса:

from sklearn.metrics import brier_score_loss

probs = your_model.predict_proba(X_test)
brier_score_loss(y_true, probs[:, 1])

Iя не уверен, что brier формально определен для задач мультикласса.Я хотел бы указать на идею средней ошибки неправильной классификации, которая усредняет ошибку по классам.

Чтобы использовать это в API-интерфейсе sklearn, кодируйте свое y_true категорически, то есть каждый класс получает свой собственный столбец, и вызывайте

sklearn.metrics.mean_squared_error (y_true, probs, multioutput ='iform_average ')

0 голосов
/ 05 июня 2018

predict_proba предсказывает вероятность того, что выборка принадлежит классу.Аргументом max этих вероятностей является предсказанный класс (категориальная форма).СКО не является метрикой для классификации.Если вы хотите оценить свою модель, рассмотрите другую метрику, например accuracy_score:

from sklearn.metrics import accuracy_score
predictions = your_model.predict(X_test)
print("Accuracy: %.3f" % accuracy_score(y_test, predictions))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...