Почему мой тест R2 в этой случайной лесной регрессии? - PullRequest
0 голосов
/ 07 июля 2019

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

Я выставляю следующие баллы, чтобы проверить предсказательную силу модели:

Производительность на обучающем наборе

  1. Средняя квадратическая ошибка
  2. Средняя квадратная ошибка
  3. Оценка OOB R2

Производительность при испытании (истинная производительность)

Средняя квадратичная ошибка Корневая средняя квадратичная ошибка R2 Тест Тест R2 Оценка (OOB для теста)

Я думал 6и 7 были одинаковыми, хотя я использую разные методы для их расчета.Наконец, это регрессия с несколькими выходами с 5 зависимыми переменными.

1. Регрессия случайного леса

from sklearn.ensemble import RandomForestRegressor
rf = RandomForestRegressor(n_estimators =400, random_state = 0, 
                           max_depth=None, max_features = 'auto',
                           oob_score = True, bootstrap = True )
rf.fit(Xtrain, ytrain)
ypred = rf.predict(Xtest)
ypred_train = rf.predict(Xtrain)

2. Определение метрик производительности

from sklearn.metrics import mean_squared_error, r2_score

#evaluation for the training set
def evaluate_train(rf, Xtrain, ytrain):
    mse = 100*mean_squared_error(ytrain, ypred_train)
    rmse = np.sqrt(mse)
    print("Model Performance on Training")
    print("%0.1f = Mean Squared Error"%(mse))
    print("%0.1f = RMSE"%(rmse))

#for the test set
def evaluate_test(rf, Xtest, ytest):
    mse = 100*mean_squared_error(ytest, ypred)
    rmse = np.sqrt(mse)
    r2 = r2_score(ytest, ypred, multioutput='uniform_average')
    print("Model Performance on Test")
    print("%0.1f = Mean Squared Error"%(mse))
    print("%0.1f = RMSE"%(rmse))
    print("%0.1f = R2 test"%(r2))\

3. Вызов функций для оценки производительности модели

evaluate_train(rf, Xtrain, ytrain)
print("%0.3f = OOB R2 Score"%(rf.oob_score_))
evaluate_test(rf, Xtest, ytest)
print("%0.3f = Test R2 Score"%(rf.score(Xtest, ytest)))

С этим кодом, это результатыЯ получаю:

Производительность модели при обучении

  • 41018,8 = Средняя квадратическая ошибка
  • 202,5 ​​= RMSE
  • 0,972 =Оценка OOB R2

Производительность модели при тестировании

  • 209504.3 = средняя квадратическая ошибка
  • 457,7 = среднеквадратичное значение
  • 1,0 = тест R2
  • 0,976 = тест R2 Оценка

редактировать

  • кто-то упомянул, что я переоснащаю модель - ноЯ попытался уменьшить тренировочный набор с 80% до 70% и все еще получил 1 как R2, что заставляет меня думать, что код все еще является проблемой.
...