Допустимо ли масштабировать целевые значения для регрессоров? - PullRequest
0 голосов
/ 20 июня 2019

Я получаю очень высокие RMSE и MAE для MLPRegressor, ForestRegression и Linear регрессии с масштабированием только входных переменных (30 000+), однако когда я масштабирую целевые значения, я получаю RMSE (0,2), я хотел бы знать, приемлемо ли эточто нужно сделать.

Во-вторых, нормально ли иметь лучшие значения R в квадрате для теста (т. е. 0,98 и 0,85 для поезда)

Спасибо

Ответы [ 2 ]

0 голосов
/ 20 июня 2019

Отвечая на ваш первый вопрос, я думаю, что вы весьма обмануты показателями производительности, которые вы выбрали для оценки вашей модели.И RMSE, и MAE чувствительны к диапазону, в котором вы измеряете целевые переменные, если вы собираетесь уменьшить вашу целевую переменную, то наверняка значения RMSE и MAE снизятся, давайте рассмотрим пример, чтобы проиллюстрировать это.

def rmse(y_true, y_pred):
    return np.sqrt(np.mean(np.square(y_true - y_pred)))

def mae(y_true, y_pred):
    return np.mean(np.abs(y_true - y_pred))

Я написал две функции для вычисления RMSE и MAE.Теперь давайте подключим некоторые значения и посмотрим, что произойдет,

y_true = np.array([2,5,9,7,10,-5,-2,2])
y_pred = np.array([3,4,7,9,8,-3,-2,1])

В настоящее время давайте предположим, что истинные и предсказанные значения равны, как показано выше.Теперь мы готовы вычислить RMSE и MAE для этих данных.

rmse(y_true,y_pred)
1.541103500742244

mae(y_true, y_pred)
1.375

Теперь давайте уменьшим нашу целевую переменную в 10 раз и снова вычислим ту же меру.

y_scaled_true = np.array([2,5,9,7,10,-5,-2,2])/10
y_scaled_pred = np.array([3,4,7,9,8,-3,-2,1])/10

rmse(y_scaled_true,y_scaled_pred)
0.15411035007422444

mae(y_scaled_true,y_scaled_pred)
0.1375

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

Итак, MAPE (средняя абсолютная ошибка в процентах) может быть лучшим способом измерения производительности модели и нечувствителен к шкале, в которой измеряются переменные.Если вы вычислите MAPE для обоих наборов значений, мы увидим, что они одинаковы,

def mape(y, y_pred):
    return np.mean(np.abs((y - y_pred)/y))

mape(y_true,y_pred)
0.28849206349206347

mape(y_scaled_true,y_scaled_pred)
0.2884920634920635

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

Отвечая на ваш второй вопрос, поскольку вы имеете дело с некоторыми сложными моделями, такими как MLPRegressor и ForestRegression, в которых есть некоторые гиперпараметры, которые необходимо настроить, чтобы избежать перебора, лучший способНайти идеальные уровни гиперпараметров - это разделить данные на обучающие, проверочные и проверочные и использовать такие методы, как K-Fold Cross Validation , чтобы найти оптимальные настройки.Трудно сказать, являются ли вышеуказанные значения приемлемыми или нет, просто взглянув на этот случай.

Надеюсь, это поможет!

0 голосов
/ 20 июня 2019

Во многих случаях принято масштабировать целевые значения.

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

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

Вам следует попытаться разделить ваши данные на три части: наборы поездов, перекрестной проверки и тестирования. Изучите ваши данные и настройте параметры в соответствии с их эффективностью при перекрестной проверке, а затем, после того как вы закончите настройку, запустите его на тестовом наборе, чтобы получить прогноз его работы с невидимыми данными и пометить его как точность вашей модели.

...