我想计算线性模型的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错误。

最佳答案

正如你所发现的那样,sklearnsLinearRegressionis good for prediction but pretty barebones as you have discovered.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时正在寻找手动写入的替代方法,则source为here

08-19 09:16