如何在Python中计算线性回归模型的AIC?

2024-05-15 07:48:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我想计算线性模型的AIC来比较它们的复杂性。我做的如下:

regr = linear_model.LinearRegression()
regr.fit(X, y)

aic_intercept_slope = aic(y, regr.coef_[0] * X.as_matrix() + regr.intercept_, k=1)

def aic(y, y_pred, k):
   resid = y - y_pred.ravel()
   sse = sum(resid ** 2)

   AIC = 2*k - 2*np.log(sse)

return AIC

但我收到一个divide by zero encountered in log错误。


Tags: 模型logmodel线性aicfitsse复杂性
1条回答
网友
1楼 · 发布于 2024-05-15 07:48:52

sklearnLinearRegression有助于预测,但正如您所发现的那样,这是非常简单的。(人们常说sklearn远离所有的统计推断。)

statsmodels.regression.linear_model.OLS有一个属性属性AIC和许多其他预先设置好的属性。

但是,请注意,您需要手动向X矩阵添加一个单位向量,以便在模型中包含一个截距。

from statsmodels.regression.linear_model import OLS
from statsmodels.tools import add_constant

regr = OLS(y, add_constant(X)).fit()
print(regr.aic)

如果您正在寻找在使用sklearn时手动编写的替代方法,则源代码为here

相关问题 更多 >