我想计算线性模型的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
错误。 最佳答案
正如你所发现的那样,sklearn
sLinearRegression
is 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。