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.
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.
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.
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,
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.
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.
・ Processeur Intel (R) Core (TM) i7-6700K 4,00 GHz
・ Windows 10 Professionnel 1909 ・ Python 3.6.6 ・ Matplotlib 3.3.1 ・ Numpy 1.19.2 ・ Scikit-learn 0.23.2
Le programme implémenté est publié sur GitHub.
fisher_lda.py
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.
1.2. Linear and Quadratic Discriminant Analysis
Yuzo Hirai. «Première reconnaissance de formes», Morikita Publishing, 2012.
Recommended Posts