Я так растерялся.Я сравниваю лассо и линейную регрессию на модели, которая предсказывает цены на жилье.Я не понимаю, как, когда я запускаю линейную модель в sklearn, я получаю отрицательное значение для R ^ 2, но когда я запускаю ее в лассо, я получаю разумное значение R ^ 2.Я знаю, что вы можете получить отрицательное значение R ^ 2, если линейная регрессия плохо подходит для вашей модели, поэтому я решил проверить это с помощью OLS в statsmodels, где я также получаю высокое значение R ^ 2.Я просто запутался, как это возможно и что происходит?Это из-за мультиколлинеарности?
Кроме того, да, я знаю, что могу использовать поиск по сетке cv, чтобы найти альфу для лассо, но мой профессор хотел, чтобы мы попробовали это таким образом, чтобы получить практическое кодирование.Я - специалист по математике, и это для курса статистики.
# Linear regression in sklearn
X = df.drop('SalePrice',axis=1)
y = df['SalePrice']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=60)
lm = LinearRegression()
lm.fit(X_train, y_train)
predictions_linear = lm.predict(X_test)
print('\nR^2 of linear model is {:.5f}\n'.format(metrics.r2_score(y_test, predictions_linear)))
>>>>R^2 of linear model is -213279628873266528256.00000
# Lasso in sklearn
r2_alpha_lasso = [None]*200
i=0
for num in np.logspace(-4,1,len(r2_alpha_lasso)):
lasso = linear_model.Lasso(alpha=num, random_state=50)
lasso.fit(X_train, y_train)
predictions_lasso = lasso.predict(X_test)
r2 = metrics.r2_score(y_test, predictions_lasso)
r2_alpha_lasso[i] = [num, r2]
i+=1
r2_maximized_lasso = sorted(r2_alpha_lasso, key=itemgetter(1))[-1]
print("\nR^2 maximized where:\n Alpha: {:.5f}\n R^2: {:.5f}\n".format(r2_maximized_lasso[0], r2_maximized_lasso[1]))
>>>>R^2 maximized where:
Alpha: 0.00120
R^2: 0.90498
# OLS in statsmodels
df['Constant'] = 1
X = df.drop('SalePrice',axis=1)
y = df['SalePrice']
mod = sm.OLS(endog=y, exog=X, data=df)
res = mod.fit()
print(res.summary()) # only printed the relevant results, not the entire table
>>>>R-squared: 0.921
Adj. R-squared: 0.908
[2] The smallest eigenvalue is 1.26e-29. This might indicate that there are
Сильные проблемы мультиколлинеарности или что матрица дизайна является единственной.