J'utilise souvent la régression logistique au travail, mais lorsque j'ai un peu d'inquiétude, j'ai souvent du mal à accéder aux informations que je veux, alors j'aimerais résumer la régression logistique dans mon propre mémo.
La régression logistique semble être souvent utilisée dans le domaine médical. Bien sûr, il est souvent utilisé dans d'autres domaines en raison de sa grande interprétabilité, de la simplicité du modèle et de sa grande précision.
Considérons maintenant le problème de prédire si le vecteur d'entrée $ x $ sera affecté aux deux classes $ C_0 ou C_1 $.
Soit $ y ∈ \ {0,1 \} $ la variable objective (sortie) et $ x ∈ R ^ d $ la variable explicative (entrée). Ici, $ y = 0 $ lorsqu'il est affecté à $ C_0 $ et $ y = 1 $ lorsqu'il est affecté à $ C_1 $.
python
import matplotlib.pyplot as plt
x = [1.3, 2.5, 3.1, 4, 5.8, 6, 7.5, 8.4, 9.9, 10, 11.1, 12.2, 13.8, 14.4, 15.6, 16, 17.7, 18.1, 19.5, 20]
y = [0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1]
plt.scatter(x, y)
plt.xlabel("x")
plt.ylabel("y")
plt.show
Je pense que l'approche la plus simple du problème de classification est la discrimination linéaire.
Dans le modèle linéaire, la sortie $ y $ est linéaire par rapport à l'entrée $ x $ ($ y (x) = \ beta_0 + \ beta_1 x $), et $ y $ est une valeur réelle. Voici une autre étape pour s'adapter au problème de classification.
Par exemple, vous pouvez transformer une fonction linéaire avec la fonction non linéaire $ f (・) $.
y(x) = f(\beta_0 + \beta_1 x)
Par exemple, dans ce cas, la fonction d'activation suivante peut être envisagée.
f(z) = \left\{
\begin{array}{ll}
1 & (z \geq 0.5) \\
0 & (z \lt 0.5)
\end{array}
\right.
Eh bien, cette fois, nous ferons une prédiction en utilisant cette fonction d'activation. Tout d'abord, nous allons former le modèle linéaire. Nous utiliserons la méthode des moindres carrés pour estimer les paramètres.
En passant, ce livre est fortement recommandé comme point de départ pour démarrer l'apprentissage automatique. Cela commence par les mathématiques minimales requises pour commencer à étudier l'apprentissage automatique. Ce type de livre est un peu inconnu. C'est un très bon livre. De plus, le code est très facile à lire. Je pense que je vais utiliser la bibliothèque dans la pratique, mais je pense que c'est le meilleur en termes d'écriture à partir de zéro pour étudier.
Le code original est publié sur la page d'assistance.
import matplotlib.pyplot as plt
import numpy as np
def reg(x,y):
n = len(x)
a = ((np.dot(x,y) - y.sum() * x.sum() / n) /
((x**2).sum() - x.sum()**2 / n))
b = (y.sum() - a * x.sum()) / n
return a,b
x = np.array(x)
y = np.array(y)
a, b = reg(x,y)
print('y =', b,'+', a, 'x')
fig = plt.scatter(x, y)
xmax = x.max()
plt.plot([0, xmax], [b, a * xmax + b])
plt.axhline(0.5, ls = "--", color = "r")
plt.axhline(0, linewidth = 1, ls = "--", color = "black")
plt.axhline(1, linewidth = 1, ls = "--", color = "black")
plt.xlabel("x")
plt.ylabel("y")
plt.show
Le modèle estimé est
est devenu.
Ensuite, compte tenu de la conversion par la fonction d'activation définie précédemment, la ligne de démarcation semble être d'environ $ x = 10 $.
Maintenant, il y a quelques problèmes avec cette méthode. La méthode des moindres carrés équivaut à la méthode la plus probable lorsqu'une distribution normale est supposée pour la distribution de probabilité conditionnelle.
D'un autre côté, un vecteur variable objectif binaire comme celui-ci pose divers problèmes car il est clairement loin de la distribution normale. Pour plus de détails, reportez-vous à "Reconnaissance de formes et apprentissage automatique (Bishop)", mais principalement
-La précision d'approximation du vecteur de probabilité postérieure de classe est médiocre. -La flexibilité du modèle linéaire est faible. ⇒ La valeur de la probabilité dépasse $ [0,1] $ en raison de ces deux.
・ Pénaliser les prédictions trop correctes.
Peut être donné. Par conséquent, nous adoptons un modèle probabiliste approprié et considérons un algorithme de classification qui a de meilleures caractéristiques que la méthode des moindres carrés.
Avant d'entrer dans la régression logistique, réfléchissons beaucoup à la distribution logistique. Étant donné le vecteur d'entrée $ x $, la probabilité conditionnelle de la classe $ C_1 $ est
\begin{eqnarray}
P(y=1|x)&=&\frac{P(x|y=1)P(y=1)}{P(x|y=1)P(y=1)+P(x|y=0)P(y=0)}\\
\\
&=&\frac{1}{1+\frac{P(x|y=0)P(y=0)}{P(x|y=1)P(y=1)}}\\
\\
&=&\frac{1}{1+e^{-\log\frac{P(x|y=0)P(y=0)}{P(x|y=1)P(y=1)}}}\\
\end{eqnarray}
P(y=1|x)=\frac{1}{1+e^{-a}}\\
Sera. Ceci est appelé une distribution logistique et sera représenté par $ \ sigma (a) $.
La forme de la fonction de distribution est la suivante.
import numpy as np
from matplotlib import pyplot as plt
a = np.arange(-8., 8., 0.001)
y = 1 / (1+np.exp(-a))
plt.plot(a, y)
plt.axhline(0, linewidth = 1, ls = "--", color = "black")
plt.axhline(1, linewidth = 1, ls = "--", color = "black")
plt.xlabel("a")
plt.ylabel("σ (a)")
plt.show()
Vous pouvez voir que la plage de valeurs est comprise entre $ (0,1) $.
\sigma(x)=\frac{1}{1+e^{-x}}
Il est représenté par. La fonction de densité de probabilité $ f (x) $ différencie $ \ sigma (x) $ et
\begin{eqnarray}
f(x)&=&\frac{d}{dx}\frac{1}{1+e^{-x}}\\
\\
&=&\frac{e^{-x}}{(1+e^{-x})^2}
\end{eqnarray}
Ce sera. La forme de la fonction de densité de probabilité est la suivante.
import numpy as np
from matplotlib import pyplot as plt
x = np.arange(-8., 8., 0.001)
y = np.exp(-x) / ((1+np.exp(-x))**2)
plt.plot(x, y)
plt.xlabel("x")
plt.ylabel("f (x)")
plt.show()
Étant donné une distribution, les gens veulent connaître la moyenne et la variance. Je vais le calculer immédiatement. La matrice des facteurs de produit $ M (t) $ est
M(t) = \int_{-\infty}^{\infty}e^{tx}\frac{e^{-x}}{(1+e^{-x})^2}dx
En remplaçant $ \ frac {1} {(1 + e ^ {-x})} = y $
\begin{eqnarray}
M(t) &=& \int_{0}^{1}e^{-t\log(\frac{1}{y}-1)}dy\\
\\
&=& \int_{0}^{1}(\frac{1}{y}-1)^{-t}dy\\
\\
&=& \int_{0}^{1}(\frac{1-y}{y})^{-t}dy\\
\\
&=& \int_{0}^{1}(\frac{1}{y})^{-t}(1-y)^{-t}dy\\
\\
&=& \int_{0}^{1}y^t(1-y)^{-t}dy\\
\\
&=& \int_{0}^{1}y^{(t+1)-1}(1-y)^{(-t+1)-1}dy\\
\\
&=& Beta(t+1,1-t)\\
\\
&=& \frac{\Gamma(t+1)\Gamma(1-t)}{\Gamma((t+1)+(1-t))}\\
\\
&=& \frac{\Gamma(t+1)\Gamma(1-t)}{\Gamma(2)}=\Gamma(t+1)\Gamma(1-t)
\end{eqnarray}
(Shindo ...!)
De plus, si l'échange d'ordre de différenciation et d'intégration est autorisé (l'ordre peut être échangé sans preuve), la différenciation de premier ordre de cette matrice de facteurs de produit est
\begin{eqnarray}
\frac{dM(t)}{dt}=\Gamma'(t+1)\Gamma(1-t)-\Gamma(t+1)\Gamma'(1-t)
\end{eqnarray}
Et si $ t = 0 $,
\begin{eqnarray}
M'(0)=\Gamma'(1)\Gamma(1)-\Gamma(1)\Gamma'(1)=0
\end{eqnarray}
Autrement dit, $ E [X] = M '(0) = 0 $. Puis trouvez $ E [X ^ 2] $.
\begin{eqnarray}
\frac{d^2M(t)}{dt^2}&=&\Gamma''(t+1)\Gamma(1-t)-\Gamma'(t+1)\Gamma'(1-t)-\Gamma'(t+1)\Gamma'(1-t)+\Gamma'(t+1)\Gamma''(1-t)\\
\\
&=& \Gamma''(t+1)\Gamma(1-t)-2\Gamma'(t+1)\Gamma'(1-t)+\Gamma(t+1)\Gamma''(1-t)
\end{eqnarray}
Si $ t = 0 $,
\begin{eqnarray}
M''(0)&=&\Gamma''(1)-2\Gamma'(1)^2+\Gamma''(1)\\
\\
&=& 2\Gamma''(1)-2\Gamma'(1)^2
\end{eqnarray}
Ici, mettez $ \ psi (x) = \ frac {d} {dx} \ log \ Gamma (x) = \ frac {\ Gamma '(x)} {\ Gamma (x)} $ et différenciez-le. Puis
\begin{eqnarray}
\frac{d}{dx}\psi(x)=\frac{\Gamma''(x)\Gamma(x)-\Gamma'(x)^2}{\Gamma(x)^2}
\end{eqnarray}
Autrement dit, $ \ psi '(0) = \ Gamma' '(1) - \ Gamma' (1) ^ 2 $. À propos, $ \ psi '(0) = \ zeta (2) $ [probablement](https://ja.wikipedia.org/wiki/%E3%83%9D%E3%83%AA%E3%82 % AC% E3% 83% B3% E3% 83% 9E% E9% 96% A2% E6% 95% B0) [^ 1], donc $ \ psi '(0) = \ frac {\ pi ^ 2} { Il est calculé comme 6} $.
Par conséquent, $ M '' (0) = 2 × \ frac {\ pi ^ 2} {6} $, et $ E [X ^ 2] = M '' (0) = \ frac {\ pi ^ 2} { J'ai pu demander 3} $. Que ça,
\begin{eqnarray}
V[X]&=&E[X^2]-E[X]^2\\
\\
&=& \frac{\pi^2}{3} - 0\\
\\
&=& \frac{\pi^2}{3}
\end{eqnarray}
Il s'avère que la valeur attendue de la distribution logistique est $ 0 $ et la variance est $ \ frac {\ pi ^ 2} {3} $.
À propos, il semble que la dérivée de la fonction gamma logarithmique s'appelle la fonction polygamma. En particulier, on dit que le dérivé du premier ordre est la fonction digamma.
(C'était difficile, et tout à coup la fonction $ ζ $ est sortie et je n'étais pas sûr, donc je ne peux pas dire que je pourrais le calculer ...)
Maintenant, considérons $ p = \ sigma (\ beta x) $ lorsque les paramètres de la distribution logistique sont représentés par une connexion linéaire. Résoudre cela pour $ \ beta x $
\begin{eqnarray}
p &=& \frac{1}{1+e^{-\beta x}}\\
\\
(1+e^{-\beta x})p &=& 1\\
\\
p+e^{-\beta x}p &=& 1\\
\\
e^{-\beta x} &=& \frac{1-p}{p}\\
\\
-\beta x &=& \log\frac{1-p}{p}\\
\\
\beta x &=& \log\frac{p}{1-p}\\
\\
\end{eqnarray}
(Les positions égales sont alignées, mais c'est un peu difficile à voir ...)
Le côté droit est appelé log cotes dans le domaine des statistiques.
Ce que je veux dire, c'est que, inversement, si vous régression linéairement les cotes logarithmiques et résolvez pour $ p $, vous obtiendrez une estimation de la probabilité que chaque classe soit attribuée.
Au fait, pour $ p \ in [0,1] $, les cotes sont $ \ frac {p} {1-p} \ in [0, \ infty) $, et les cotes logarithmiques sont $ \ log \ frac { Puisqu'il est p} {1-p} \ in (- \ infty, \ infty) $, nous pouvons également voir que la plage des cotes logarithmiques est la même que la plage des fonctions linéaires.
Y = \left(
\begin{array}{c}
y_1\\
\vdots\\
y_n
\end{array}
\right),\quad y_i \in \{ 0,1 \},(i=1,...n)
En ce qui concerne $ X $, je voudrais inclure un terme constant dans le paramètre, mais il est difficile de changer la notation, donc
X = \left(
\begin{array}{cccc}
1 & x_{11} & \cdots & x_{1d}\\\
\vdots & \vdots & \ddots & \vdots \\\
1 & x_{n1} & \cdots & x_{nd}
\end{array}
\right)
Je voudrais dire cela. Aussi, pour $ i = 1, ..., n $, soit $ x_i = (1, x_ {i1}, ..., x_ {id}) ^ T $ (c'est-à-dire que $ x_i $ est $ X) Inversion du composant de ligne de $)).
La fonction de vraisemblance pour le vecteur de paramètres $ \ beta = (\ beta_0, \ beta_1, ..., \ beta_d) $
L(\beta) = P(Y | \beta)= \prod_{i=1}^{n} \sigma(\beta x_i)^{y_i}\{1-\sigma(\beta x_i)\}^{1-y_i}
Peut être écrit comme, la fonction de vraisemblance logarithmique,
E(\beta)=-\log L(\beta)= -\sum_{i=1}^{n}\{y_i\log \sigma(\beta x_i)+(1-y_i)\log(1-\sigma(\beta x_i))\}
Peut être écrit comme. Trouvez le paramètre $ \ beta $ en résolvant ce problème de minimisation.
Cependant, en raison de la non-linéarité de $ \ sigma $, la solution la plus probable ne peut pas être dérivée analytiquement.
Cependant, puisque $ E $ est une fonction convexe, elle n'a que la plus petite solution. Trouvez cette solution minimale par la méthode Newton.
La méthode Newton est également appelée méthode Newton-Rafson. Je vous en dirai beaucoup sur la méthode Newton si je demande au professeur Google sans faire de mémo, je vais donc laisser l'explication là-bas. La première histoire est de savoir comment trouver la solution d'une équation par calcul numérique. Dans le livre que j'ai
・ P247 d'Essence d'apprentissage automatique (Kato) ・ Reconnaissance de formes et apprentissage automatique (Bishop) P207 ・ P140 des bases de l'apprentissage statistique (Hastie) ・ P74 de la théorie de Galois (Fujita) qui peut être résolue
Il y a une explication dans etc.
[^ 1]: Si vous le recherchez, vous trouverez diverses choses, mais comme il existe de nombreux liens directs pdf tels que des supports de cours, des liens wikipedia sont fournis.
Recommended Posts