web-dev-qa-db-fra.com

Comment calculer l'AIC pour le modèle de régression linéaire en Python?

Je veux calculer l'AIC pour les modèles linéaires afin de comparer leur complexité. Je l'ai fait comme suit:

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

Mais je reçois un divide by zero encountered in log Erreur.

8
YNr

sklearn's LinearRegression est bon pour la prédiction mais assez simple comme vous l'avez découvert. (On dit souvent que sklearn reste à l'écart de tout ce qui concerne l'inférence statistique.)

statsmodels.regression.linear_model.OLS a un attribut de propriété AIC et un certain nombre d'autres attributs prédéfinis.

Cependant, notez que vous devrez ajouter manuellement un vecteur unitaire à votre matrice X pour inclure une interception dans votre modèle.

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

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

La source est ici si vous cherchez une autre façon d'écrire manuellement tout en utilisant sklearn.

11
Brad Solomon