P值=0.000是什么意思;使用 statsmodel 的 OLS 回归结果中的 Rsquared = 0.012;但是 sklearn Rsquared = 0.839?
What does it mean when P value = 0.000; Rsquared = 0.012 in OLS regression results using statsmodel; but sklearn Rsquared = 0.839?
我 运行 使用 sci-kit learn 的线性回归模型对我的数据进行线性回归(2 个分类变量和 6 个数字变量),我发现了以下回归结果。
regressor = LinearRegression()
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)
r2_score(y_test, y_pred)
--> 0.8399
np.sqrt(mean_squared_error(y_test, y_pred))
--> 149.066
当我运行同样的数据使用statsmodels时,结果完全不同,Rsquared疯狂下降,p值为0.000。
这是什么意思,我做错了什么?
import statsmodels.formula.api as sm
#X = np.append(arr = np.ones((X.shape[0], 1)).astype(int), values = X, axis = 1)
X_opt = X[:, [0,1,2,3,4,5,6,7,8]]
regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit()
regressor_OLS.summary()
我不能在评论中放图片,所以放在这里。这些系数具有完全相同的值似乎很可疑,这可能是一个线索。
我找到了我的错误的答案,第一,使用 statsmodels 时需要添加常量,第二 - 我正在使用 OneHotEncoder 编码分类特征,它根据列的类别数向数组添加额外的列熊。牢记这些并调整两个库中的 X_train - sklearn 和 statsmodel - 得到了相同的结果。
感谢所有帮助我解决问题的问题!
我 运行 使用 sci-kit learn 的线性回归模型对我的数据进行线性回归(2 个分类变量和 6 个数字变量),我发现了以下回归结果。
regressor = LinearRegression()
regressor.fit(X_train, y_train)
y_pred = regressor.predict(X_test)
r2_score(y_test, y_pred)
--> 0.8399
np.sqrt(mean_squared_error(y_test, y_pred))
--> 149.066
当我运行同样的数据使用statsmodels时,结果完全不同,Rsquared疯狂下降,p值为0.000。
这是什么意思,我做错了什么?
import statsmodels.formula.api as sm
#X = np.append(arr = np.ones((X.shape[0], 1)).astype(int), values = X, axis = 1)
X_opt = X[:, [0,1,2,3,4,5,6,7,8]]
regressor_OLS = sm.OLS(endog = y, exog = X_opt).fit()
regressor_OLS.summary()
我不能在评论中放图片,所以放在这里。这些系数具有完全相同的值似乎很可疑,这可能是一个线索。
我找到了我的错误的答案,第一,使用 statsmodels 时需要添加常量,第二 - 我正在使用 OneHotEncoder 编码分类特征,它根据列的类别数向数组添加额外的列熊。牢记这些并调整两个库中的 X_train - sklearn 和 statsmodel - 得到了相同的结果。
感谢所有帮助我解决问题的问题!