Я очистил и подготовил набор данных для моделирования в 4 различных типах регрессии - Linear, Lasso, Ridge и Random Forest DT.
Проблема заключается в модели линейной регрессии. При запуске CV в k = 5 я получаю:
linreg = LinearRegression()
linreg.fit(X_train, y_train)
y_pred = linreg.predict(X_test)
cv_scores_linreg = cross_val_score(linreg, X_train, y_train, cv=5)
print("R^2: {}".format(linreg.score(X_test, y_test)))
rmse = np.sqrt(mean_squared_error(y_test, y_pred))
print("Root Mean Squared Error: {}".format(rmse))
print("Mean 5-Fold CV Score: {}".format(np.mean(cv_scores_linreg)))
print(cv_scores_linreg)
Который печатает мне счет:
R^2: 0.40113615279035175
Root Mean Squared Error: 0.7845007237654832
Mean 5-Fold CV Score: -8.07591739989044e+19
[ 3.70497335e-01 -9.07945703e+19 3.38625853e-01 3.38206306e-01
-3.13001300e+20]
Для моего случайного леса я использую:
rf_reg = RandomForestRegressor()
rf_reg.fit(X_train, y_train)
y_pred_rf = rf_reg.predict(X_test)
cv_scores_rf = cross_val_score(rf_reg, X_train, y_train, cv=5)
print("R^2: {}".format(rf_reg.score(X_test, y_test)))
rmse = np.sqrt(mean_squared_error(y_test, y_pred_rf))
print("Root Mean Squared Error: {}".format(rmse))
print("Mean 5-Fold CV Score: {}".format(np.mean(cv_scores_rf)))
print(cv_scores_rf)
Что дает:
R^2: 0.42158777391603736
Root Mean Squared Error: 0.770988735248686
Mean 5-Fold CV Score: 0.3894909330419569
[0.39982241 0.39516204 0.37037191 0.38400655 0.39809175]
Я не могу понять, почему все мои другие модели дают мне значения, подобные Случайному Лесу. Единственным выбросом является линейная модель. Когда я изменяю k = 10, 20, 30 и т. Д., Кажется, что 1 новое огромное значение за +10 к k.
Я вынул все нулевые данные, пустые места и поместил свои данные в логарифмическую шкалу, чтобы все это нормализовать.
Что может пойти не так, когда проблемы возникают только из-за линейной модели?