перекрестная проверка rmse с использованием sklearn

#python #machine-learning #scikit-learn

Вопрос:

 from sklearn.model_selection import KFold
from sklearn.model_selection import cross_val_score

cv = KFold(n_splits=10, random_state=1, shuffle=True)

scores = cross_val_score(regressor, X, y, scoring='neg_mean_absolute_error',
                         cv=cv, n_jobs=-1)
np.mean(np.abs(scores))
 

регрессор-это встроенная модель, X-независимые функции, а y-зависимая функция. Правильный ли код? Также я в замешательстве, может ли rmse быть больше 100? Я получаю такие значения, как 121, из некоторых регрессионных моделей. Используется ли rmse для того, чтобы сообщить вам, насколько хороша ваша модель в целом, или только для того, чтобы сообщить вам, насколько хороша ваша модель по сравнению с другими моделями?

rmse = 121

Ответ №1:

Значение RMSE можно рассчитать, используя sklearn.metrics следующее:

 from sklearn.metrics import mean_squared_error
mse = mean_squared_error(test, predictions)
rmse = math.sqrt(mse)
print('RMSE: %f' % rmse)
 

С точки зрения интерпретации, вам необходимо сравнить RMSE со средним значением ваших тестовых данных, чтобы определить точность модели. Стандартные ошибки являются мерой того, насколько точным может быть среднее значение данной выборки по сравнению с истинным средним значением популяции.

Например, RMSE 5 по сравнению со средним значением 100 является хорошим показателем, так как размер RMSE довольно мал по сравнению со средним значением.

С другой стороны, RMSE 5 по сравнению со средним значением 2 не будет хорошим результатом — средняя оценка слишком широка по сравнению со средним значением теста.

Комментарии:

1. from sklearn.metrics import mean_squared_error mse = mean_squared_error(y_test, y_pred) rmse = np.sqrt(mse) print('RMSE: %f' % rmse) и m_test = np.mean(y_test) print('MEAN: %f' % m_test) правильно ли я вас понял?

2. Да, соглашение немного отличается от моего, но это выглядит нормально. Конечная цель состоит в том, чтобы сравнить RMSE со средним баллом теста, что вы явно делаете.

3. Большое вам спасибо!

Ответ №2:

Если вам нужен RMSE, почему вы используете среднюю абсолютную ошибку для подсчета очков? Измените его на этот:

 scores = cross_val_score(regressor, X, y, scoring = 'neg_mean_squared_error',
                         cv = cv, n_jobs = -1)
 

Поскольку RMSE-это квадратный корень из среднеквадратичной ошибки, мы должны сделать это:

 np.mean(np.sqrt(np.abs(scores)))
 

Комментарии:

1. Не могу поддержать ваш комментарий, потому что я новичок, но спасибо за помощь