我计算了多重线性回归方程,我想查看调整后的 R-squared。我知道 score 函数可以让我看到 R-squared,但它不是调整后的。
我手动检查了,0.87764 是 R-squared;而 0.863248 是调整后的 R-squared。
回答:
计算 R^2
和 调整后的 R^2
有许多不同的方法,以下是其中几种(使用您提供的数据计算):
from sklearn.linear_model import LinearRegressionmodel = LinearRegression()X, y = df[['NumberofEmployees','ValueofContract']], df.AverageNumberofTicketsmodel.fit(X, y)
SST = SSR + SSE (参考定义)
# 使用理论公式计算yhat = model.predict(X)SS_Residual = sum((y-yhat)**2) SS_Total = sum((y-np.mean(y))**2) r_squared = 1 - (float(SS_Residual))/SS_Totaladjusted_r_squared = 1 - (1-r_squared)*(len(y)-1)/(len(y)-X.shape[1]-1)print r_squared, adjusted_r_squared# 0.877643371323 0.863248473832# 使用 sklearn linear_model 计算,尽管在文档中找不到直接计算调整后 R-squared 的函数print model.score(X, y), 1 - (1-model.score(X, y))*(len(y)-1)/(len(y)-X.shape[1]-1)# 0.877643371323 0.863248473832
另一种方法:
# 使用 statsmodels 计算,通过手动添加截距import statsmodels.api as smX1 = sm.add_constant(X)result = sm.OLS(y, X1).fit()#print dir(result)print result.rsquared, result.rsquared_adj# 0.877643371323 0.863248473832
还有一种方法:
# 使用 statsmodels 计算,另一种方式,使用公式import statsmodels.formula.api as smresult = sm.ols(formula="AverageNumberofTickets ~ NumberofEmployees + ValueofContract", data=df).fit()#print result.summary()print result.rsquared, result.rsquared_adj# 0.877643371323 0.863248473832