Неожиданное значение потерь R ^ 2 в corss_val_score

Я имею дело с набором данных регрессии, и я хочу подогнать конкретную модель к моему набору данных после оценки производительности различных моделей. Для этого я использовал cross_val_score из sklearn.model_selection. После того, как я выбрал параметр оценки как «r2», я получил очень отрицательные значения для некоторых из моих моделей.

demo = pd.read_csv('demo.csv')
X_train = demo.iloc[0:1460, : ]
Y_train = pd.read_csv('train.csv').loc[:, 'SalePrice':'SalePrice']
X_test = demo.iloc[1460: , : ]

regressors = []
regressors.append(LinearRegression())
regressors.append(Ridge())
regressors.append(Lasso())
regressors.append(ElasticNet())
regressors.append(Lars())
regressors.append(LassoLars())
regressors.append(OrthogonalMatchingPursuit())
regressors.append(BayesianRidge())
regressors.append(HuberRegressor())
regressors.append(RANSACRegressor())
regressors.append(SGDRegressor())
regressors.append(GaussianProcessRegressor())
regressors.append(DecisionTreeRegressor())
regressors.append(RandomForestRegressor())
regressors.append(ExtraTreesRegressor())
regressors.append(AdaBoostRegressor())
regressors.append(GradientBoostingRegressor())
regressors.append(KernelRidge())
regressors.append(SVR())
regressors.append(NuSVR())
regressors.append(LinearSVR())

cv_results = []
for regressor in regressors:
cv_results.append(cross_val_score(regressor, X = X_train, y = Y_train, scoring = 'r2', verbose = True, cv = 10))

После того, как упомянутый выше код скомпилирован и запущен, cv_results будет выглядеть следующим образом. Это список массивов float64. Каждый массив содержит 10 значений 'r2' (из-за cv = 10).

После компиляции и запуска вышеуказанного кода cv_results выглядит следующим образом. Это список массивов float64. Каждый массив содержит 10 значений 'r2' (из-за cv = 10).

Я открываю первый массив и замечаю, что для этой конкретной модели некоторые значения «r2» крайне отрицательны.

введите описание изображения здесь

Поскольку значения «r2» должны быть от 0 до 1, почему бывают очень большие отрицательные значения?


person Aman Jain    schedule 18.07.2018    source источник


Ответы (1)


Вот в чем дело: значения R^2 на самом деле не обязательно должны быть в [0, 1].

По сути, R^2 имеет базовый уровень 0, поскольку 0 означает, что ваша модель работает не лучше и не хуже, чем просто взятие среднего значения переменной ответа. В OLS, где у вас есть термин перехвата, это означает, что R^2 находится в [0, 1].

Однако для других моделей это в целом неверно; например, если вы исправите свой перехват в модели линейной регрессии, у вас может получиться гораздо хуже, чем просто взять среднее значение вашего ответа.

person Kevin Li    schedule 19.07.2018