Отвечая на ваш первый вопрос, я думаю, что вы весьма обмануты показателями производительности, которые вы выбрали для оценки вашей модели.И 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 , чтобы найти оптимальные настройки.Трудно сказать, являются ли вышеуказанные значения приемлемыми или нет, просто взглянув на этот случай.
Надеюсь, это поможет!