Verstehen Sie die lineare Diskriminanzanalyse von Fisher mathematisch und versuchen Sie es mit scicit-learn.
Es wird davon ausgegangen, dass Sie bereits Differentialintegration und lineare Algebra gelernt haben.
Die lineare Diskriminanzanalyse von Fisher ist eine überwachte Technik, bei der $ w $ ermittelt wird, damit sich die Verteilungen zwischen den Kategorien nach der Projektion der Daten nicht überlappen. Obwohl sie als Diskriminante bezeichnet wird, wird sie praktisch zur Dimensionsreduzierung verwendet.
Wenn die Daten $ x $ von $ w $ projiziert werden, sind die projizierten Daten $ y $
y = w^T x
Es wird sein. Zu diesem Zeitpunkt finden wir $ w $, damit die Verteilung der Kategorien in $ y $ so weit wie möglich voneinander entfernt ist. In dem unten gezeigten Fall projiziert das optimale $ w $ die blauen und orangefarbenen Punkte auf die hohlen Punkte auf der schwarzen geraden Linie.
Betrachten Sie nun zwei Kategorien von Daten, wie oben gezeigt. Der durchschnittliche Vektor der Kategorien 1 und 2 kann wie folgt ausgedrückt werden.
\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
Wenn der durch $ w $ projizierte Durchschnittsvektor durch $ m_1 = w ^ T \ mu_1, m_2 = w ^ T \ mu_2 $ dargestellt wird, ist die Differenz zwischen den Durchschnittswerten nach der Projektion
m_1 - m_2 = w^T (\mu_1 - \mu_2)
Je größer der Wert ist, desto größer ist der Grad der Trennung zwischen den Kategorien. Deshalb,
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
Je kleiner die Varianz nach der Projektion ist, desto besser. Daher sollten wir die Varianz innerhalb der Klasse $ s ^ 2 = s ^ 2_1 + s ^ 2_2 $ minimieren, die die Summe von $ s ^ 2_1 und s ^ 2_2 $ ist.
Hier definieren wir die folgenden Fisher-Kriterien $ J (w) $ als Bewertungsfunktion, die sowohl die Maximierung des Mittelwerts nach der Projektion als auch die Minimierung der Varianz nach der Projektion berücksichtigt.
J(w) = \frac{(m_1 - m_2)^2}{s^2_1 + s^2_2}
Wenn die Kovarianzmatrix zwischen den Klassen $ S_B = (\ mu_1- \ mu_2) (\ mu_1- \ mu_2) ^ T $ ist, ist die Variation zwischen den Klassen $ (m_1 - m_2) ^ 2 $
\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}
Kann ausgedrückt werden als. Weiterhin ist die klasseninterne Verteilung $ s ^ 2_k $
\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}
Daher setzt die Verteilung innerhalb aller Klassen $ s ^ 2_1 + s ^ 2_2 $ die Kovarianzmatrix innerhalb aller Klassen auf $ S_W = S_1 + S_2 $.
s^2_1 + s^2_2 = w^T (S_1 + S_2) w = w^T S_W w
Kann ausgedrückt werden als. Daher ist Fischers Referenz $ J (w) $
J(w) = \frac{w^T S_B w}{w^T S_W w}
Und wird dies maximieren.
Da wir den Maximalwert finden müssen, differenzieren wir die Fisher-Referenz $ J (w) $ in Bezug auf $ w $ und lösen sie als 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}
Setzen Sie hier $ \ 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
Daher werden wir das verallgemeinerte Eigenwertproblem der folgenden Gleichung lösen.
S_Bw = \lambda S_Ww
Wenn $ S_W $ eine reguläre Matrix ist,
\lambda w = S^{-1}_WS_Bw
Und es wird ein normales eindeutiges Wertproblem. des Weiteren,
S_Bw = (\mu_1 - \mu_2)(\mu_1 - \mu_2)^Tw \propto (\mu_1 - \mu_2)
Weil es wird
w \propto S^{-1}_WS_Bw \propto S^{-1}_W (\mu_1 - \mu_2)
Sie finden das optimale $ w $ as.
・ CPU Intel (R) Core (TM) i7-6700K 4,00 GHz
・ Windows 10 Pro 1909 ・ Python 3.6.6 ・ Matplotlib 3.3.1 ・ Numpy 1.19.2 ・ Scikit-Learn 0.23.2
Das implementierte Programm wird auf [GitHub] veröffentlicht (https://github.com/sho-watari/MachineLearning/tree/master/Supervised).
fisher_lda.py
Dieses Mal habe ich mich für den Iris-Datensatz von scikit-learn entschieden.
Das Ausführungsergebnis ist wie folgt. Die Setosa ist gut getrennt, und die Versicolor und Virginica sind teilweise bedeckt, aber sie scheinen einigermaßen getrennt zu sein.
1.2. Linear and Quadratic Discriminant Analysis
Yuzo Hirai. "Erste Mustererkennung", Morikita Publishing, 2012.
Recommended Posts