web-dev-qa-db-ja.com

Pythonで線形回帰モデルのAICを計算する方法は?

線形モデルの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エラー。

8
YNr

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)

ソースは here であり、sklearnを使用しながら手動で書き込む別の方法を探している場合。

11
Brad Solomon