Un modèle avec uniquement des sections comme prédicteurs linéaires ($ \ log \ lambda = \ beta_1 $) est trop facile. En augmentant le nombre de paramètres, tels que $ \ log \ lambda = \ beta_1 + \ beta_2 x + \ dots + \ beta_6x ^ 6 $ L'ajustement s'améliorera.
Le code source d'un polypole est écrit ci-dessous.
>>> import numpy
>>> import pandas
>>> import matplotlib.pyplot as plt
>>> import statsmodels.api as sm
>>> import statsmodels.formula.api as smf
>>> d = pandas.read_csv("data3a.csv")
>>> model = smf.glm('y ~ x + I(x**2) + I(x**3) + I(x**4) + I(x**5) + I(x**6)', data=d, family=sm.families.Poisson())
>>> result = model.fit()
>>> result.summary()
>>> params = result.params
>>> fit = lambda x: numpy.exp(params[0] + params[1] * x + params[2] * x ** 2 + params[3] * x ** 3 + params[4] * x ** 4 + params[5] * x ** 5 + params[6] * x ** 6)
>>> xx = numpy.linspace(min(d.x), max(d.x), 100)
>>> plt.plot(xx, fit(xx))
>>> plt.plot(d.x[d.f == 'T'], d.y[d.f == 'T'], 'ro')
>>> plt.plot(d.x[d.f == 'C'], d.y[d.f == 'C'], 'bo')
>>> plt.show()
** AIC **: "Un modèle qui fait de bonnes ** prédictions ** est un bon modèle."
Jusqu'à présent, quatre types de modèles ont été appliqués aux données d'amorçage.
--Modèle sans effet (modèle constant) --Modèle affecté par l'effet de la taille du corps (modèle x) --Modèle affecté par l'application d'engrais (modèle f) --Modèles affectés par l'effet de la taille du corps et l'effet de l'application d'engrais (modèle x + f)
>>> plt.subplot(221)
>>> model = smf.glm('y ~ 1', data=d, family=sm.families.Poisson())
>>> result = model.fit()
>>> plt.plot(xx, [numpy.exp(result.params[0]) for _ in range(100)])
>>> plt.subplot(222)
>>> model = smf.glm('y ~ f', data=d, family=sm.families.Poisson())
>>> result = model.fit()
>>> plt.plot(xx, [numpy.exp(result.params[0] + result.params[1]) for _ in range(100)], 'r')
>>> plt.plot(xx, [numpy.exp(result.params[0]) for _ in range(100)], 'b')
>>> plt.subplot(223)
>>> model = smf.glm('y ~ x', data=d, family=sm.families.Poisson())
>>> result = model.fit()
>>> fit = lambda x: numpy.exp(result.params[0] + result.params[1] * x)
>>> plt.plot(xx, fit(xx))
>>> plt.subplot(224)
>>> model = smf.glm('y ~ x + f', data=d, family=sm.families.Poisson())
>>> result = model.fit()
>>> fit = lambda x: numpy.exp(result.params[0]+ result.params[2] * x)
>>> plt.plot(xx, fit(xx), 'b')
>>> fit = lambda x: numpy.exp(result.params[0]+ result.params[1] + result.params[2] * x)
>>> plt.plot(xx, fit(xx), 'r')
À propos de la statistique ** écart ** (** écart **) $ D $ qui est une transformation de la vraisemblance logarithmique maximale $ \ log L ^ \ ast $, ce qui est un bon ajustement.
D = -2 \log L ^\ast
Est défini comme. L'écart dans les résultats précédents.
Le degré de déviation du modèle complet. Un modèle complet est un modèle avec $ \ lambda_i = y_i $. En d'autres termes, la probabilité logarithmique maximale est.
\log L = \sum_i \log \frac{y_i ^{y_i} \exp(-y_i}{y_i !}
Considérant le modèle x,
#x Écart minimum du modèle
>>> dpois = lambda x:sct.poisson.logpmf(x, x)
>>> sum(dpois(d.y))
-192.8897525244958
>>> sum(dpois(d.y)) * (-2)
385.77950504899161
D'après ce qui précède, l'écart résiduel de ce modèle est
>>> result.llf * (-2) - sum(dpois(d.y))*(-2)
84.992996490729922
>>> result.summary()
Generalized Linear Model Regression Results
==============================================================================
Dep. Variable: y No. Observations: 100
Model: GLM Df Residuals: 98
Model Family: Poisson Df Model: 1
Link Function: log Scale: 1.0
Method: IRLS Log-Likelihood: -235.39
Date:Argent, 05 6 2015 Deviance: 84.993
Time: 13:12:50 Pearson chi2: 83.8
No. Iterations: 7
==============================================================================
coef std err z P>|z| [95.0% Conf. Int.]
------------------------------------------------------------------------------
Intercept 1.2917 0.364 3.552 0.000 0.579 2.005
x 0.0757 0.036 2.125 0.034 0.006 0.145
==============================================================================
L'écart maximum, qui est l'opposé de l'écart minimum, est l'écart du modèle Null. Le modèle Null est un modèle dans lequel le prédicteur linéaire n'est que des sections.
En résumé, plus le degré de déviation des résidus est élevé, plus l'ajustement est mauvais et plus le degré de déviation des résidus est petit, meilleur est l'ajustement (surapprentissage?).
** AIC ** (critère d'information d'Akaike) est un critère qui met l'accent sur une bonne prédiction. Lorsque le nombre de paramètres estimés les plus probables est de $ k $
\begin{eqnarray}
AIC &=& -2 \{(Probabilité logarithmique maximale) - (Nombre estimé de paramètres le plus probable) \} \\
&=& -2(\log L ^ \ast - k) \\
&=& D + 2k
\end{eqnarray}
modèle | Nombre de paramètres |
deviance( |
residual deviance | AIC | |
---|---|---|---|---|---|
Constant | 1 | -237.6 | 475.3 | 89.5 | 477.3 |
f | 2 | -237.6 | 475.3 | 89.5 | 479.3 |
x | 2 | -235.4 | 470.8 | 85.0 | 474.8 |
x+f | 3 | -235.3 | 470.6 | 84.8 | 476.6 |
full | 100 | -192.9 | 385.6 | 0.0 | 585.8 |
D'après le tableau, le modèle x est le plus petit modèle statistique de l'AIC.
En général, l'augmentation des variables explicatives (nombre de paramètres) améliore la précision des données d'apprentissage, mais aggrave la prédiction (la différence de biais entre les modèles imbriqués est constante). → Si vous choisissez quelque chose qui s'explique bien, le biais ne changera pas, mais l'ensemble s'améliorera → AIC diminuera
La différence entre la vraisemblance logarithmique maximale $ \ log L ^ \ ast $ et la vraisemblance logarithmique moyenne provient du modèle constant (k = 1) si la première amélioration en augmentant le nombre de paramètres (k = 1-> 2) est supérieure à 1. L'AIC devient plus petit. Je ne comprends pas ce japonais ...
Recommended Posts