Результаты оценки регрессии резко отличаются для cross_val_score и .score - PullRequest
1 голос
/ 17 марта 2019

Я использую RandomForestRegressor ().Я использую R-квадрат для подсчета очков.Почему я получаю совершенно разные результаты с .score и cross_val_score?Вот соответствующий код:

X = df.drop(['y_var'], axis=1)
y = df['y_var']

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.33)

# Random Forest Regression
rfr = RandomForestRegressor()
model_rfr = rfr.fit(X_train,y_train)
pred_rfr = rfr.predict(X_test)
result_rfr = model_rfr.score(X_test, y_test)

# cross-validation
rfr_cv_r2 = cross_val_score(rfr, X, y, cv=5, scoring='r2')

Я понимаю, что перекрестная проверка оценивается несколько раз по сравнению с единицей для .score, но результаты настолько радикально отличаются, что что-то явно не так.Вот результаты:

R2-dot-score: .99072
R2-cross-val: [0.5349302  0.65832268 0.52918704 0.74957719 0.45649582]

Что я делаю не так?Или чем можно объяснить это несоответствие?

РЕДАКТИРОВАТЬ:

ОК, возможно, я решил это.Кажется, что cross_val_score не перемешивает данные, что может привести к худшим прогнозам, когда данные группируются вместе.Самым простым решением, которое я нашел (через этот ответ ), было просто перетасовать фрейм данных перед запуском модели:

shuffled_df = df.reindex(np.random.permutation(df.index))

После того, как я это сделал, я начал получать похожие результаты.оценка и cross_val_score:

R2-dot-score: 0.9910715555903232
R2-cross-val: [0.99265184 0.9923142  0.9922923  0.99259524 0.99195022]

1 Ответ

1 голос
/ 17 марта 2019

ОК, возможно, я решил это.Кажется, что cross_val_score не рандомизирует данные, что может привести к худшим прогнозам, когда сходные данные группируются вместе.Самым простым решением, которое я нашел (через этот ответ ), было просто перетасовать кадр данных перед запуском модели:

shuffled_df = df.reindex(np.random.permutation(df.index))

После этого я начал получать похожие результаты.оценка и cross_val_score:

R2-dot-score: 0.9910715555903232
R2-cross-val: [0.99265184 0.9923142  0.9922923  0.99259524 0.99195022]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...