[PYTHON] Retour logistique

Dans cet article, je présenterai l'idée de base de la régression logistique et du code pratique en python! J'ai l'intention de résumer ce que j'étudiais quand j'étais étudiant d'une manière très facile à comprendre, donc j'espère que tout le monde, des débutants à ceux qui écrivent habituellement du code, pourra s'y référer.

Concept de base de la régression logistique

La régression logistique est une méthode couramment utilisée pour la classification binaire. Pour expliquer l'idée de régression logistique, considérons, par exemple, le célèbre exemple du Titanic.

logit

n variables $ (x_0, x_1, x_2 ,, x_n) $ (PassengerID dans l'exemple Titanic)

X =
\begin{bmatrix}
x_0 \\
x_1 \\
x_2 \\
\vdots \\
x_n \\
\end{bmatrix}
W =
\begin{bmatrix}
β_0 \\
β_1 \\
β_2 \\
\vdots \\
β_n \\
\end{bmatrix}

Comme

Z=β_0+β_1x_1+β_2x_2+...+β_nx_n …① \\
= w^{T}X

Dans ce cas, la régression logistique exprime la probabilité p comme suit.

p=\frac{1}{1+e^{-(β_0+β_1x_1+β_2x_2+...+β_nx_n)}}
=\frac{1}{1+e^{-Z}} …②

Et pour le p obtenu $ y = \begin{cases} 1 & x ≧ 0.5 \\\ 0 & x < 0.5 \end{cases} $

Le flux de base de la régression logistique consiste à classer selon que p dépasse ou non la valeur de la plage (certaine ligne).

(1) devient la formule suivante par transformation de valeur égale.

\log\frac{p}{1-p}=β_0+β_1x_1+β_2x_2+...+β_nx_n

p=\frac{e^Z}{1+e^Z}\\
⇔e^Z=p(1+e^Z)\\
⇔e^Z=\frac{p}{1-p}\\
⇔\log\frac{p}{1-p}=Z=β_0+β_1x_1+β_2x_2+...+β_nx_n …③

Le côté gauche de ③, c'est-à-dire

\log\frac{p}{1-p}

Est appelé "log odds" (ou "logit"). La régression logistique est, en d'autres termes, un facteur donné

x_1,x_2,x_3,...x_n

D'autre part, le paramètre optimum tel que la variable objective p satisfait l'équation (3).

β_1,β_2,β_3,...β_n

C'est un calcul à trouver.

À propos, la formule (2) est la suivante lorsqu'elle est représentée graphiquement. sigmoid Comme vous pouvez le voir sur le graphique, la valeur d'entrée $ Z $ prend $ -∞ ≤ Z ≤ ∞ $, tandis que la valeur de sortie $ y $ prend $ 0 <y <1 $.

Différence par rapport à l'analyse de régression multiple

Contrairement à l'analyse de régression multiple, qui suppose essentiellement une analyse normale des résidus, la régression logistique ne suppose pas, de manière pratique, une distribution normale pour la distribution d'erreur.

Méthode d'estimation optimale des paramètres par la méthode la plus probable

Alors, comment trouvez-vous les paramètres optimaux? La partie calcul de ce chapitre est calculée automatiquement si vous utilisez LogisticRegression () en python, mais lorsque vous l'utilisez pour une analyse dans une entreprise réelle, "Cela s'est produit lorsque j'ai calculé à l'aide de la bibliothèque, de sorte que Si vous dites "Je ne sais pas comment ça marche", ce sera une boîte noire.

Il existe différentes méthodes pour optimiser les paramètres, mais ici je voudrais vous présenter la "méthode Newton".

Regardons à nouveau la formule (1) ci-dessus.

p=\frac{1}{1+e^{-(β_0+β_1x_1+β_2x_2+...+β_nx_n)}}
=\frac{1}{1+e^{-Z}} …②

n jeux de données (p et $ x_0, x_1, ... x_n $)

La fonction de vraisemblance logarithmique est

L(w)=log(\prod_{i = 0}^{n}p^Y(1-p)^{1-Y})\\\
⇔L(w)=Y\sum_{i=0}^{n}log{p}+(1-Y)\sum_{i=0}^{n}log{(1-p)}\\\
⇔L(w)=Y\sum_{i=0}^{n}log{\frac{1}{1+e^{-w^Tx}}}+(1-Y)\sum_{i=0}^{n}log{(1-\frac{1}{1+e^{-w^Tx}})}\\\

Vous pouvez trouver $ w $ qui maximise cela. C'est synonyme de minimisation de $ -L (w) $ (= $ E (w) $).

Alors, comment pouvons-nous trouver le paramètre $ w $ qui minimise $ E (w) $? Ici, un certain $ w ^ {(t)} $ est provisoirement mis au début, et selon la situation, $ w ^ {(t + 1)} ← w ^ {(t)} - d ^ {(t)} Réfléchissons à la façon de se rapprocher de la matrice optimale en mettant à jour $ w $ comme $. Alors, comment trouvez-vous $ d ^ {(t)} $? Par déploiement de Taylor

E(w+d)∼E(w)+\frac{δE(w)}{δw}d^{(t)}+\frac{1}{2}\frac{δ^2E(w)}{δwδw}{d^{(t)}}^2 …④

Puisqu'il suffit de trouver d ^ {(t)} qui minimise cela, il est partiellement différencié par $ d ^ {(t)} $.

\frac{δE(w)}{δw}+\frac{δ^2E(w)}{δwδw}{d^{(t)}}=0 \\\
⇔{d^{(t)}}=\left(\frac{δ^2E(w)}{δwδw}\right)^{-1}\frac{δE(w)}{δw}
w^{(t+1)}←w^{(t)}-\left(\frac{δ^2E(w)}{δwδw}\right)^{-1}\frac{δE(w)}{δw} …⑤

C'est la méthode Newton.

ici,

\frac{δE(w)}{δp}=-\frac{δY\sum_{i=0}^{n}log{p}+(1-Y)\sum_{i=0}^{n}log{(1-p)}}{δp}\\\
=-\frac{Y}{p}+\frac{1-Y}{1-p} \\\
=\frac{p-Y}{p(1-p)}
\frac{δp}{δw}=\frac{δ}{δw}\frac{1}{1+e^{-w^Tx}} \\\
=\frac{δ}{δw}(1+e^{-w^Tx})^{-1} \\\
=\frac{xe^{-w^Tx}}{(1+e^{-w^Tx})^2} \\\
=\frac{xe^{-w^Tx}}{(1+e^{-w^Tx})^2} \\\
=px(1-p)

Donc,

\frac{δE(w)}{δw}=\frac{p-Y}{p(1-p)}px(1-p)=x(p-Y) …⑥

De plus, la différenciation de second ordre de $ E (w) $ est

\frac{δ^2E(w)}{δwδw}=\frac{δ}{δw}x\left(\frac{1}{1+e^{-w^Tx}}-Y\right) \\\
=px^2(1-p) …⑦

⑥ À partir de ⑦, remplacez ⑤

w^{(t+1)}←w^{(t)}-\frac{1}{px^2(1-p)}x(p-Y) …⑧
L(w+d)∼L(w)+L'(w)h

Sur la base de ce qui précède, les paramètres sont optimisés par l'algorithme suivant.

  1. Définissez le paramètre initial $ w ^ {(0)} $.
  2. Mettez à jour la fonction de vraisemblance logarithmique par la méthode ci-dessus.
  3. Mettez à jour le paramètre $ w $ en fonction de ⑧.
  4. Sur la base du $ w $ mis à jour, recommencez la mise à jour de la fonction de vraisemblance logarithmique.
  5. Arrêtez la mise à jour lorsqu'il n'y a pas de changement dans la mise à jour de la fonction de vraisemblance logarithmique. A ce moment, $ w $ est le paramètre optimal.

Jusqu'à présent, j'ai expliqué la méthode Newton. Puisque cette méthode de Newton utilise une double différenciation, elle présente l'inconvénient que la quantité de calcul est très importante, tandis que la vitesse de convergence est rapide.

Implémentation en python

logistic.py


from sklearn.linear_model import LogisticRegression
lr = LogisticRegression(C=10, solver : {‘newton-cg’})
lr.fit(X_train, y_train)

En python, vous pouvez implémenter une régression logistique avec le code simple ci-dessus en utilisant une bibliothèque appelée scicit-learn. Dans le code ci-dessus, je bricoler avec les nombres pour deux paramètres, C et solveur. Parmi ceux-ci, le solveur définit la méthode pour trouver les paramètres optimaux décrits ci-dessus. Ici, la méthode Newton expliquée ci-dessus est utilisée. Vient ensuite l'explication de C. Ce C est appelé régularisation et est généralement le paramètre le plus déterminé.

Qu'est-ce que C (régularisation)?

Exemple d'application de régression logistique

Jusqu'à présent, j'ai expliqué l'idée mathématique de la régression logistique et comment écrire du code simple en python basé sur l'exemple de Titanic, mais en fait, la régression logistique est également appliquée dans divers domaines des sciences sociales.

Par exemple, dans le domaine comptable, lors de l'enquête sur le risque de faillite d'une entreprise, en plus de la valeur numérique PL telle que la marge bénéficiaire d'exploitation, la présence ou l'absence d'une note concernant GC (Going Concern: Assumption of a Continuous Company) est considérée comme un facteur de retour logique du risque de faillite. Des recherches sont en cours pour analyser dans.

Recommended Posts

Retour logistique
Retour logistique
Qu'est-ce que l'analyse de régression logistique?
Algorithme d'apprentissage automatique (régression logistique)
Implémentation de la régression logistique avec NumPy
Appliquer la fonction d'influence à la régression logistique
Régression linéaire
Qu'est-ce que l'analyse de régression logistique à plusieurs termes?
Analyse de régression logistique Self-made avec python
PRML Chapitre 4 Implémentation Python de la régression logistique bayésienne
<Subject> Machine learning Chapitre 3: Modèle de régression logistique
[Kaggle pour les super débutants] Titanic (retour logistique)
J'ai essayé d'implémenter la régression logistique de Cousera en Python
Analyse de régression de Poisson
Comprendre la régression logistique (1) _ À propos des cotes et de la transformation logistique
Essayez Theano avec les données MNIST de Kaggle ~ Retour logistique ~
Méthode d'analyse de régression
Implémenter un modèle de régression logistique en temps discret avec stan
Implémentation de la régression logistique avec la méthode d'optimisation des groupes de particules
Précautions lors de l'exécution de la régression logistique avec Statsmodels
Défis d'apprentissage automatique de Coursera en Python: ex2 (retour logistique)
Régression linéaire multiple, régression logistique, perceptron multicouche, encodeur automatique, Chainer Yo!
Résolution du problème de l'iris avec scikit-learn ver1.0 (régression logistique)