線形モデルの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
のLinearRegression
は予測には適していますが、ご存知のように非常に重要です。 (よく、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
を使用しながら手動で書き込む別の方法を探している場合。