Я думаю, что могу ошибаться в своем кодировании метрик оценки моего регрессора случайных лесов.Я хотел бы дважды проверить код и почему я получаю 1 для R2 применительно к тестовому набору.
Я выставляю следующие баллы, чтобы проверить предсказательную силу модели:
Производительность на обучающем наборе
- Средняя квадратическая ошибка
- Средняя квадратная ошибка
- Оценка 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, что заставляет меня думать, что код все еще является проблемой.