当P值= 0.000时是什么意思?使用statsmodel的OLS回归结果中的Rsquared = 0.012;但是sklearn Rsquared = 0.839?

时间:2018-12-12 15:26:19

标签: python-3.x scikit-learn linear-regression statsmodels p-value

我使用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()

enter image description here

2 个答案:

答案 0 :(得分:1)

我找到了我的错误的答案,第一,使用statsmodels时需要添加常量,第二-我正在使用OneHotEncoder编码分类功能,该功能根据列所包含的类别数量向该数组添加额外的列。牢记这些,并在sklearn和statsmodel这两个库中调整X_train,两者的结果相同。

感谢所有帮助我解决自己问题的问题!

答案 1 :(得分:0)

我无法在评论中放置图片,因此请将其放在此处。这些系数具有完全相同的值似乎令人怀疑,这可能是一个线索。

same values