[PYTHON] Apprentissage automatique: analyse discriminante linéaire supervisée

Cible

Comprenez mathématiquement l'analyse discriminante linéaire de Fisher et essayez-la avec scicit-learn.

On suppose que vous avez déjà appris l'intégration différentielle et l'algèbre linéaire.

théorie

L'analyse discriminante linéaire de Fisher est une technique supervisée qui trouve $ w $ de sorte que les distributions entre les catégories ne se chevauchent pas après la projection des données, et bien qu'elle soit nommée discriminante, elle est pratiquement utilisée pour la réduction de dimension.

Analyse de discrimination linéaire de Fisher

Dérivation de l'analyse discriminante linéaire de Fisher

Lorsque les données $ x $ sont projetées par $ w $, les données projetées $ y $ sont

y = w^T x

Ce sera. A ce moment, nous trouverons $ w $ pour que la distribution des catégories dans $ y $ soit la plus éloignée possible. Dans le cas ci-dessous, le $ w $ optimal projette les points bleu et orange vers les points creux de la ligne droite noire.

105_lda_reduction.png

Considérons maintenant deux catégories de données, comme indiqué ci-dessus. Le vecteur moyen des catégories 1 et 2 peut être exprimé comme suit.

\mu_1 = \frac{1}{N_1} \sum^{N_1}_{i \in C_1} x_i \\
\mu_2 = \frac{1}{N_2} \sum^{N_2}_{i \in C_2} x_i

Si le vecteur moyen projeté par $ w $ est représenté par $ m_1 = w ^ T \ mu_1, m_2 = w ^ T \ mu_2 $, la différence entre les valeurs moyennes après projection.

m_1 - m_2 = w^T (\mu_1 - \mu_2)

Plus la valeur est élevée, plus le degré de séparation entre les catégories est élevé. Donc,wSera le maximum. Mais ce que je veux vraiment c'estwParce que c'est la direction de projection de|w|^2 = 1J'ajouterai la restriction. Cependant, cela seul ne fonctionnera pas, alors considérez la distribution de chaque catégorie. Distribution en classe après projection de chaque catégories^2_1, s^2_2Est

s^2_1 = \sum^{N_1}_{i \in C_1} (w^T x_i - w^T \mu_1)^2 \\
s^2_2 = \sum^{N_2}_{i \in C_2} (w^T x_i - w^T \mu_2)^2

Plus la distribution après projection est petite, mieux c'est, il suffit donc de minimiser la distribution intra-classe $ s ^ 2 = s ^ 2_1 + s ^ 2_2 $, qui est la somme de $ s ^ 2_1 et s ^ 2_2 $.

Ici, nous définissons les critères de Fisher suivants $ J (w) $ comme une fonction d'évaluation qui considère à la fois maximiser la valeur moyenne post-projection et minimiser la variance post-projection.

J(w) = \frac{(m_1 - m_2)^2}{s^2_1 + s^2_2}

De plus, si la matrice de covariance interclasse est $ S_B = (\ mu_1- \ mu_2) (\ mu_1- \ mu_2) ^ T $, la variation interclasse $ (m_1 --m_2) ^ 2 $ est

\begin{align}
(m_1 - m_2)^2 &= \left( w^T(\mu_1 - \mu_2) \right)^2 \\
&= \left( w^T(\mu_1 - \mu_2) \right) \left( w^T(\mu_1 - \mu_2) \right)^T \\
&= w^T (\mu_1 - \mu_2)(\mu_1 - \mu_2)^T w \\
&= w^T S_B w
\end{align}

Peut être exprimé comme. De plus, la distribution intra-classe $ s ^ 2_k $ est

\begin{align}
s^2_k &= \sum_{i \in C_k} (y_i - m_k)^2 \\
&= \sum_{i \in C_k} \left( w^T (x_i - \mu_k) \right)^2 \\
&= \sum_{i \in C_k} \left( w^T(x_i - \mu_k) \right) \left( w^T(x_i - \mu_k) \right)^T \\
&= w^T \sum_{i \in C_k} (x_i - \mu_k)(x_i - \mu_k)^T w \\
&= w^T S_k w
\end{align}

Par conséquent, la distribution dans toutes les classes $ s ^ 2_1 + s ^ 2_2 $ définit la matrice de covariance dans toutes les classes à $ S_W = S_1 + S_2 $.

s^2_1 + s^2_2 = w^T (S_1 + S_2) w = w^T S_W w

Peut être exprimé comme. Par conséquent, la référence de Fisher $ J (w) $ est

J(w) = \frac{w^T S_B w}{w^T S_W w}

Et maximisera cela.

Apprendre l'analyse de discrimination linéaire de Fisher

Puisque nous devons trouver la valeur maximale, nous différencions la référence de Fisher $ J (w) $ par rapport à $ w $ et la résolvons comme 0.

\begin{align}
\frac{\partial J(w)}{\partial w} &= \frac{2S_B w \cdot w^TS_Ww - w^TS_Bw \cdot 2S_Ww}{(w^TS_Ww)^2} \\
&= \frac{2}{w^TS_Ww} \left( S_Bw - \frac{w^TS_Bw}{w^TS_Ww} S_Ww \right) = 0
\end{align}

Ici, définissez $ \ lambda = \ frac {w ^ TS_Bw} {w ^ TS_Ww} $

\frac{\partial J(w)}{\partial w} = \frac{2}{w^TS_Ww} (S_Bw - \lambda S_Ww) = 0 \\
(S_Bw - \lambda S_Ww) = 0

Par conséquent, nous allons résoudre le problème généralisé des valeurs propres de l'équation suivante.

S_Bw = \lambda S_Ww

Ici, si $ S_W $ est une matrice régulière,

\lambda w = S^{-1}_WS_Bw

Et cela devient un problème de valeur unique normal. plus loin,

S_Bw = (\mu_1 - \mu_2)(\mu_1 - \mu_2)^Tw \propto (\mu_1 - \mu_2)

Parce que ça devient

w \propto S^{-1}_WS_Bw \propto S^{-1}_W (\mu_1 - \mu_2)

Vous pouvez trouver le $ w $ optimal comme.

la mise en oeuvre

Environnement d'exécution

Matériel

・ Processeur Intel (R) Core (TM) i7-6700K 4,00 GHz

Logiciel

・ Windows 10 Professionnel 1909 ・ Python 3.6.6 ・ Matplotlib 3.3.1 ・ Numpy 1.19.2 ・ Scikit-learn 0.23.2

Programme à exécuter

Le programme implémenté est publié sur GitHub.

fisher_lda.py


résultat

Cette fois, j'ai décidé d'utiliser le jeu de données iris fourni par scikit-learn.

Le résultat de l'exécution est le suivant. Le setosa est bien séparé, et le versicolor et la virginica sont partiellement couverts, mais ils semblent être raisonnablement séparés.

105_fisher_lda.png

référence

1.2. Linear and Quadratic Discriminant Analysis

Yuzo Hirai. «Première reconnaissance de formes», Morikita Publishing, 2012.

Recommended Posts

Apprentissage automatique: analyse discriminante linéaire supervisée
Machine Learning: Supervision - Régression linéaire
Apprentissage automatique: supervisé - AdaBoost
Régression linéaire d'apprentissage automatique
Apprentissage automatique: forêt supervisée - aléatoire
Machine Learning: Supervisé - Support Vector Machine
Machine Learning: Supervisé - Arbre de décision
Python Scikit-learn Analyse de régression linéaire Analyse de régression simple non linéaire Apprentissage automatique
Binarisation d'images par analyse discriminante linéaire
Apprentissage automatique: analyse discriminante linéaire supervisée
Les débutants en apprentissage automatique essaient la régression linéaire
Algorithme d'apprentissage automatique (analyse de régression multiple)
Algorithme d'apprentissage automatique (analyse de régression unique)
Apprentissage automatique
Binarisation d'images par analyse discriminante linéaire
Algorithme d'apprentissage automatique (généralisation de la régression linéaire)
Apprentissage automatique avec python (2) Analyse de régression simple
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau
<Cours> Machine learning Chapitre 1: Modèle de régression linéaire
[Python] Première analyse de données / apprentissage automatique (Kaggle)
<Cours> Machine learning Chapitre 4: Analyse des principaux composants
Algorithme d'apprentissage automatique (résumé de régression linéaire et régularisation)
Prétraitement dans l'apprentissage automatique 1 Processus d'analyse des données
Apprentissage supervisé (classification)
[Memo] Apprentissage automatique
Classification de l'apprentissage automatique
Exemple d'apprentissage automatique
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 2
EV3 x Python Machine Learning Partie 2 Régression linéaire
[Python] Analyse de données, pratique du machine learning (Kaggle) -Prétraitement des données-
[Apprentissage automatique] Apprentissage supervisé utilisant l'estimation de la densité du noyau Partie 3
Analyse de l'utilisation de l'espace partagé par l'apprentissage automatique
Histoire de l'analyse de données par apprentissage automatique
Résumé du didacticiel d'apprentissage automatique
Apprentissage automatique sur le surapprentissage
Régression logistique d'apprentissage automatique
Machine de vecteur de support d'apprentissage automatique
Mémo du cours d'apprentissage automatique
Bibliothèque d'apprentissage automatique dlib
Apprentissage automatique (TensorFlow) + Lotto 6
Coursera Machine Learning Challenge en Python: ex1 (régression linéaire)
Apprenez en quelque sorte le machine learning
Apprendre avec un enseignant (retour) 1 Bases
Python: apprentissage supervisé (retour)
Bibliothèque d'apprentissage automatique Shogun
Défi de lapin d'apprentissage automatique
Introduction à l'apprentissage automatique
Python: apprentissage supervisé (classification)
Apprentissage automatique: k-voisins les plus proches
Qu'est-ce que l'apprentissage automatique?
Mémo d'apprentissage Python pour l'apprentissage automatique par Chainer Chapitre 7 Analyse de régression
Défis d'apprentissage automatique de Coursera en Python: ex7-2 (analyse principale)
Modèle d'apprentissage automatique prenant en compte la maintenabilité
L'apprentissage automatique appris avec Pokemon
Ensemble de données pour l'apprentissage automatique
Apprentissage automatique dans Delemas (s'entraîner)
Une introduction à l'apprentissage automatique
Apprentissage d'ensemble et analyse de paniers
Techniques liées à l'apprentissage automatique / à la classification
Bases de l'apprentissage automatique (mémoire)
Python: Apprentissage supervisé: Hyper Paramètres Partie 1
Un débutant en apprentissage automatique a essayé la RBM