我statsmodels.api.OLS
用来拟合具有 4 个输入特征的线性回归模型。
数据的形状是:
X_train.shape, y_train.shape
Out[]: ((350, 4), (350,))
然后我拟合模型并以 3 种不同的方式计算 r 平方值:
import statsmodels.api as sm
import sklearn
ols = sm.OLS(y_train, X_train).fit()
y_pred = ols.predict(X_train)
res = y_train - y_pred
ss_tot = np.sum( (y_train - y_train.mean())**2 )
ss_res = np.sum( (y_train - y_pred)**2 )
(1 - ss_res/ss_tot), sklearn.metrics.r2_score(y_train, y_pred), ols.rsquared
Out[]: (0.91923900248372292, 0.91923900248372292, 0.99795455683297096)
手动计算的 r 平方值与来自的值sklearn.metrics.r2_score
完全匹配。
然而,这个ols.rsquared
价值似乎被高估了。
为什么会这样?如何statsmodels
计算 rsquared 值?