Ein Modell mit nur Abschnitten als linearen Prädiktoren ($ \ log \ lambda = \ beta_1 $) ist zu einfach. Durch Erhöhen der Anzahl von Parametern, z. B. $ \ log \ lambda = \ beta_1 + \ beta_2 x + \ dots + \ beta_6x ^ 6 $ Die Passform wird sich verbessern.
Der Quellcode für ein Polypoly ist unten geschrieben.
>>> 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 **: "Ein Modell, das gute Vorhersagen macht, ist ein gutes Modell."
Bisher wurden vier Modelltypen auf die Seed-Daten angewendet.
>>> 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')
Über die Statistik ** Abweichung ** (** Abweichung **) $ D $, die eine Transformation der maximalen Log-Wahrscheinlichkeit $ \ log L ^ \ ast $ ist, die gut passt.
D = -2 \log L ^\ast
Ist definiert als. Die "Abweichung" in den vorherigen "Ergebnissen. Zusammenfassung ()" ist ** Restabweichung ** (= Abweichung der minimalen Modellabweichung, ** Restabweichung **).
Der Grad der Abweichung des vollständigen Modells. Ein vollständiges Modell ist ein Modell mit $ \ lambda_i = y_i $. Mit anderen Worten ist die maximale Protokollwahrscheinlichkeit.
\log L = \sum_i \log \frac{y_i ^{y_i} \exp(-y_i}{y_i !}
In Anbetracht des x-Modells,
#x Minimale Abweichung des Modells
>>> dpois = lambda x:sct.poisson.logpmf(x, x)
>>> sum(dpois(d.y))
-192.8897525244958
>>> sum(dpois(d.y)) * (-2)
385.77950504899161
Von oben ist die Restabweichung dieses Modells
>>> 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:Geld, 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
==============================================================================
Die maximale Abweichung, die der minimalen Abweichung entgegengesetzt ist, ist die Abweichung des Nullmodells. Das Nullmodell ist ein Modell, bei dem der lineare Prädiktor nur aus Abschnitten besteht.
Zusammenfassend lässt sich sagen, dass die Anpassung umso besser ist, je größer der Grad der Restabweichung ist, je schlechter die Anpassung ist und je kleiner der Grad der Restabweichung ist (Überlernen?).
** AIC ** (Akaikes Informationskriterium) ist ein Kriterium, das eine gute Vorhersage betont. Wenn die Anzahl der wahrscheinlichsten geschätzten Parameter $ k $ ist
\begin{eqnarray}
AIC &=& -2 \{(Maximale Protokollwahrscheinlichkeit) - (Höchstwahrscheinlich geschätzte Anzahl von Parametern) \} \\
&=& -2(\log L ^ \ast - k) \\
&=& D + 2k
\end{eqnarray}
Modell- | Anzahl der Parameter |
deviance( |
residual deviance | AIC | |
---|---|---|---|---|---|
Konstante | 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 |
Aus der Tabelle geht hervor, dass das x-Modell das kleinste statistische Modell von AIC ist.
Im Allgemeinen verbessert das Erhöhen der erklärenden Variablen (Anzahl der Parameter) die Genauigkeit der Trainingsdaten, verschlechtert jedoch die Vorhersage (der Bias-Unterschied zwischen den verschachtelten Modellen ist konstant). → Wenn Sie etwas wählen, das gut erklärt werden kann, ändert sich die Verzerrung nicht, aber das Ganze verbessert sich. → Der AIC nimmt ab
Die Differenz zwischen der maximalen Log-Wahrscheinlichkeit $ \ log L ^ \ ast $ und der durchschnittlichen Log-Wahrscheinlichkeit ergibt sich aus dem konstanten Modell (k = 1), wenn die Verbesserung des ersteren durch Erhöhen der Anzahl der Parameter (k = 1-> 2) größer als 1 ist. AIC wird kleiner. Ich verstehe diesen Japaner nicht ...
Recommended Posts