2. Multivariate Analyse in Python 3-2. Hauptkomponentenanalyse (Algorithmus)

Im vorherigen Abschnitt haben wir das Konzept der Hauptkomponentenanalyse mit scicit-learn gelernt. Betrachten wir hier bewusst den Mechanismus der Berechnung der Hauptkomponentenanalyse ohne Scicit-Learn.

Das gleiche Beispiel. Unter der Annahme, dass die Ergebnisse der Tests von 5 Fächern in Mathematik, Naturwissenschaften, Gesellschaft, Englisch und Japanisch für 20 Schüler pro Klasse gelten, werden 5 Fächer = 5 Dimensionen komprimiert und die akademischen Fähigkeiten des Schülers werden einfach in einer kleineren Dimension bewertet. Ich möchte es tun.

5 Subjekte = 5 Variablen sind $ x_ {1}, x_ {2}, x_ {3}, x_ {4}, x_ {5} $, und die gewünschte Hauptkomponente $ z_ {1} $ wird angezeigt.

z = w_{1}x_{1} + w_{2}x_{2} + w_{3}x_{3} + w_{4}x_{4} + w_{5}x_{5}

Die Hauptkomponentenbewertung $ z $ ist die Summe der Werte jeder Komponente, wobei die Koeffizienten $ w_ {1}, w_ {2}, w_ {3}, w_ {4}, w_ {5} $ zu jeder Variablen hinzugefügt werden. .. Was ich wissen möchte ist, dass, wenn Sie diesen Koeffizienten $ w_ {1}, w_ {2}, w_ {3}, w_ {4}, w_ {5} $ durch welches Verhältnis dividieren, die Informationsmenge = Streuung maximiert wird. Das ist. Daher werden die folgenden Bedingungen hinzugefügt.

{w_{1}}^2 + {w_{2}}^2 + {w_{3}}^2 + {w_{4}}^2 + {w_{5}}^2 = 1

Finden Sie das Verteilungsverhältnis, das die Informationsmenge = Dispersion unter der Bedingung maximiert, dass die Summe der quadratischen Werte der Koeffizienten $ 1 $ beträgt. Auf diese Weise gibt es ** Lagranges unbestimmte Multiplikatormethode ** als Methode zum Ermitteln der Maximal- und Minimalwerte einer multivariaten Funktion unter bestimmten Randbedingungen.

** Lagranges unentschlossene Multiplikatormethode **

Wenn sich die Variablen $ x, y $ bewegen, während die Randbedingung $ g (x, y) = 0 $ erfüllt ist, wird die Funktion $ z = f (x, y) $ zu $ x, y $, was der Maximal- / Minimalwert ist. Die folgende Gleichung gilt.

F(x, y, λ) = f(x, y) - λg(x, y)Dann
\displaystyle \frac{∂F}{∂x} = 0, \frac{∂F}{∂y} = 0, \frac{∂F}{∂λ} = 0

Das Obige ist das Konzept der unbestimmten Multiplikatormethode von Lagrange mit den einfachsten zwei Variablen und einer Bedingung. Das Symbol ist $ λ $ (Lambda), aber hier verstehen wir nur, dass dies eine Konstante ist. Auch das Symbol $ ∂ $, das viele Namen wie rund, partiell und del hat, steht für ** partielle Differenzierung **. Um ein Beispiel zu nennen: $ \ displaystyle \ frac {∂F} {∂x} = 0 $ bedeutet, dass der Wert der Funktion $ F $ teilweise durch die Variable $ x $ differenziert wird und $ 0 $ ist.


** Teilweise Differenzierung **

Lassen Sie uns zunächst die Bedeutung der gewöhnlichen Differenzierung überprüfen. Zeichnen wir eine Kurve der Funktion $ y = f (x) $ auf der $ x, y $ -Ebene. Wenn Sie sich auf den Punkt $ x $ auf der $ x $ -Koordinate konzentrieren und die Höhe an diesem Punkt betrachten, ist dies $ f (x) $, da es sich um einen Punkt auf $ y = f (x) $ handelt. Beachten Sie auch, dass $ x + Δx $ leicht von $ x $ abweicht. Die Höhe an diesem Punkt ist die Funktion $ y = f (x) $, die auf $ x + Δx $ angewendet wird, also ist die $ y $ -Koordinate $ f (x + Δx) $. Dann wird die Neigung zwischen den Punkten berechnet. Die Steigung ist der Änderungsbetrag in $ y $ für den Änderungsbetrag in $ x $. Das Ausmaß der Änderung von $ x $ im Nenner beträgt $ Δx $, und das Ausmaß der Änderung von $ y $ im Molekül beträgt $ f (x + Δx) -f (x) $ vor der Subtraktion. 002_0301_013.PNG

Die Differenzierung bestand darin, dieses $ Δx $ näher an $ 0 $ heranzuführen. Mit anderen Worten, wenn sich $ x + Δx $ $ x $ der Grenze nähert, kann eine ** Tangentenlinie ** gezeichnet werden, die die momentane Neigung am Punkt von $ x $ darstellt. Diese Steigung ist die Bedeutung der Differenzierung. 002_0301_014.PNG

\frac{dy}{dx}=\lim_{\Delta x \to 0} \frac{f(x+\Delta x)-f(x)}{\Delta x}

Wie viel $ y $ sich ändert, wenn sich $ x $ ein wenig ändert, und Differenzierung ist das Verhältnis der Änderung von $ y $ zu einer kleinen Änderung von $ x $.

Bisher war es eine Differenzierung im Fall einer Funktion mit einer Variablen, bei der $ y $ bestimmt wird, wenn ein $ x $ bestimmt wird. Es gibt jedoch eine Zwei-Variablen-Funktion $ f (x, y) $, deren Wert nur bestimmt wird, wenn zwei Werte bestimmt werden, und eine Drei-Variablen-Funktion $ f (x, y, z), deren Wert nur bestimmt wird, wenn drei Werte bestimmt werden. Es gibt auch $. Im Allgemeinen gibt es eine Funktion mit mehreren Variablen, und tatsächlich ist es eine ** teilweise Differenzierung **, die Differenzierung der Funktion mit mehreren Variablen zu berücksichtigen. Zeichnen wir ein Diagramm einer Funktion mit zwei Variablen. 002_0301_015.PNG Sobald $ x $ und $ y $ bestimmt sind, wird die Höhe $ z $ bestimmt. Es gibt eine Höhe $ z = f (x, y) $, die jedem Punkt auf der unteren Ebene entspricht, wodurch er wie eine gekrümmte Oberfläche aussieht. Und die Höhe $ z $ ändert sich abhängig davon, ob sie ein wenig entlang der $ x $ -Achse oder ein wenig entlang der $ y $ -Achse verläuft. Es gibt zwei Hauptrichtungen, wie sich die Höhe ändert, wenn Sie sich ein wenig bewegen. Was es um die $ x $ -Achse und was um die $ y $ -Achse geht, ist ** partielle Differenzierung **. 002_0301_016.PNG Die blaue Linie ist die Neigung, wenn $ y $ fest ist und $ x $ sich ein wenig bewegt, dh die Tangentenlinie in Richtung der $ x $ -Achse wird gezeichnet. Es wird in der Formel ausgedrückt.

\frac{∂z}{∂x}=\lim_{\Delta x \to 0} \frac{f(x+\Delta x, y)-f(x, y)}{\Delta x}

$ y $ ist fest. Wie viel sich die Höhe $ z $ bewegt, wenn sie sich ein wenig in Richtung $ x $ bewegt, und das Verhältnis der Änderung von $ z $ zur winzigen Änderung von $ x $ ist ** partielle Differenzierung **. Daher ist die teilweise Differenzierung von $ y $

\frac{∂z}{∂y}=\lim_{\Delta y \to 0} \frac{f(x, y + \Delta y)-f(x, y)}{\Delta y}

Die rote Linie ist das Verhältnis der Änderung von $ z $ zur geringfügigen Änderung von $ y $, wie stark sich die Höhe $ z $ bewegt, wenn $ x $ fest ist und sich ein wenig in Richtung $ y $ bewegt. ist.

Betrachten wir nun die Bedeutung, dass der teilweise differenzierte Wert $ 0 $ ist. Wenn Sie mit der Funktion $ z = f (x, y) $ die Variable $ x $ ein wenig verschieben, beträgt die Änderung von $ z $ $ 0 $. Mit anderen Worten, wenn es keine Änderung gibt und wenn es nicht größer oder kleiner sein kann, ist es das Maximum oder das Minimum. Wie die unbestimmte Multiplikatormethode von Lagrange zeigt, ist der wahre Peak (Maximalwert) oder der wahre Talboden auf der gekrümmten Oberfläche der Funktion mit zwei Variablen, wenn der Wert von $ x $ und $ y $ gleichzeitig $ 0 $ beträgt. Es bedeutet, dass es ist (Mindestwert).


** Ableitung der Dispersions-Co-Dispersionsmatrix aus der partiellen Differentialgleichung **

5 Kehren Sie zum Betreffbeispiel zurück. Wiederum sind die Hauptkomponenten wie folgt: p=ax+by+cu+dv+ew

Die Koeffizienten $ a, b, c, d, e $ der Hauptkomponente $ p $ sind Konstanten und werden so bestimmt, dass die Varianz dieses $ p $ maximiert wird. Was Sie wissen möchten, ist das Gleichgewicht des Verhältnisses der Konstanten $ a, b, c, d, e $, also hat $ a, b, c, d, e $ die folgenden Bedingungen. a^2+b^2+c^2+d^2+e^2=1

Definieren Sie die Hauptkomponentenverteilung $ {s_ {p}} ^ 2 $ für den Maximalwert. Es wird wie folgt ausgedrückt, wobei die Anzahl der Personen $ n $ beträgt. \displaystyle Sp^2=\frac{1}{n} \\{ {(p_{1}-\bar{p})}^2+{(p_{2}-\bar{p})}^2+...+{(p_{n}-\bar{p})}^2\\}

Wenden Sie nun die unbestimmte Multiplikatormethode von Lagrange an, um die Funktion $ L $ zu definieren. \displaystyle L=\frac{1}{n} \\{ {(p_{1}-\bar{p})}^2 + {(p_{2}-\bar{p})}^2 + ... + {(p_{n}-\bar{p})}^2 \\} - λ(a^2 + b^2 + ... + e^2 - 1) Dann gilt die folgende Gleichung. \displaystyle \frac{∂L}{∂a}=0 , \frac{∂L}{∂b}=0 , \frac{∂L}{∂c}=0 , \frac{∂L}{∂d}=0 , \frac{∂L}{∂e}=0

Achten Sie beim Versuch auf die erste Formel. \displaystyle \frac{∂L}{∂a}=0

Bringen Sie die Formel der Funktion $ L $ zum Molekül und setzen Sie $ a $ zur teilweisen Differenzierung in den Nenner. Ich sagte, dass alles außer $ a $ fest ist, aber speziell wird es als Konstante angesehen und $ b, c, d, e $ werden gelöscht. \displaystyle \frac{∂L}{∂a} = \frac{2}{n} \\{ (p_{1}-\bar{p})(x_{1}-\bar{x}) + (p_{2}-\bar{p})(x_{2}-\bar{x}) + ... + (p_{n}-\bar{p})(x_{n}-\bar{x}) \\} - 2λa = 0

Bringen Sie die Formel der Hauptkomponente $ p $, erweitern Sie sie in {} und transformieren Sie sie mit den Definitionen von Varianz und Kovarianz. \displaystyle 2 \\{ a{s_{x}}^2 + bs_{xy} + cs_{xu} + ds_{xv} + es_{xw} \\} - 2λa = 0

Weitere Organisation ergibt die folgende Gleichung: a{s_{x}}^2 + bs_{xy} + cs_{xu} + ds_{xv} + es_{xw} = λa

Ein ähnlicher Ausdruck kann aus den verbleibenden $ b, c, d, e $ erhalten werden. as_{xy} + b{s_{y}}^2 + cs_{yu} + ds_{yv} + es_{yw} = λb as_{xu} + bs_{yu} + c{s_{u}}^2 + ds_{uv} + es_{uw} = λc as_{xv} + bs_{yv} + cs_{uv} + d{s_{v}}^2 + es_{vw} = λd as_{xw} + bs_{yw} + cs_{uw} + ds_{vw} + e{s_{w}}^2 = λe

Das Folgende ist eine Zusammenfassung dieser fünf Gleichungen in einer Matrix.

\begin{pmatrix}
{Sx}^2 & S_{xy} & S_{xu} & S_{xv} & S_{xw}\\
S_{xy} & {Sy}^2 & S_{yu} & S_{yv} & S_{yw}\\
S_{xu} & S_{yu} & {Su}^2 & S_{uv} & S_{uw}\\
S_{xv} & S_{yv} & S_{uv} & {Sv}^2 & S_{vw}\\
S_{xw} & S_{yw} & S_{uw} & S_{vw} & {Sw}^2
\end{pmatrix}
\begin{pmatrix}
a\\
b\\
c\\
d\\
e
\end{pmatrix}
=
λ
\begin{pmatrix}
a\\
b\\
c\\
d\\
e
\end{pmatrix}

Diese quadratische Matrix auf der linken Seite (Matrix mit der gleichen Anzahl von Elementen in Zeilen und Spalten) ist eine ** verteilte, gemeinsam verteilte Matrix **. Die Spaltenvektoren $ a, b, c, d, e $, die diese Gleichung erfüllen, werden als ** Eigenvektoren ** bezeichnet, und $ λ $ wird als ** Eigenwerte ** bezeichnet. Dieser Eigenwert $ λ $ ist die Streuung der Hauptkomponenten.

** ⑴ Bibliothek importieren **

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt

** ⑵ Daten erstellen **

#Erstellen Sie Partituren für 5 Fächer mit 20 Schülern
arr = np.array([[71,64,83,100,71], [34,48,67,57,68], [58,59,78,87,66], [41,51,70,60,72],
                [69,56,74,81,66], [64,65,82,100,71], [16,45,63,7,59], [59,59,78,59,62],
                [57,54,84,73,72], [46,54,71,43,62], [23,49,64,33,70], [39,48,71,29,66],
                [46,55,68,42,61], [52,56,82,67,60], [39,53,78,52,72], [23,43,63,35,59],
                [37,45,67,39,70], [52,51,74,65,69], [63,56,79,91,70], [39,49,73,64,60]])

#Erstellen Sie einen Datenrahmen, indem Sie einen Spaltennamen angeben
df = pd.DataFrame(data = arr,
                  columns = ['Mathematik', 'Wissenschaft', 'Gesellschaft', 'Englisch', 'Landessprache'])

002_0301_001.PNG

** ⑶ Finde die verteilte, gemeinsam verteilte Matrix **

#Konvertieren Sie den Datenrahmen in den Numpy-Array-Typ
arr = np.array(df)

#Suchen Sie die verteilte, gemeinsam verteilte Matrix
cov = np.cov(arr, rowvar=0, bias=0)

Die verteilte, gemeinsam verteilte Matrix (Varianz cov </ font> -Arianitätsmatrix) wird unter Verwendung der Numpy-Funktion "cov" berechnet. In der Form von "numpy.cov (Daten, Rowvar = 0, Bias = 0)" gibt das Argument "Bias = 0" eine unverzerrte Varianz an (Bias = 1 für Stichprobenvarianz). rowvar = 0 ist, wenn die Daten vertikal angeordnet sind, und wenn sie horizontal sind, geben Sie rowvar = 1 an. 002_0301_017.PNG

** ⑷ Eigenwert / Eigenvektor finden **

#Finden Sie den Eigenwert / Eigenvektor
eig_val, eig_vec = np.linalg.eig(cov)

print("Eigenwert:\n", eig_val) 
print("Einzigartiger Vektor:\n", eig_vec)

Die Funktion linalg.eig () von Numpy gibt einfach eine Matrix an und gibt zwei Arrays von Eigenwerten und Eigenvektoren in Tupeln zurück. Ein Taple ist ein Datentyp, der mehrere Daten kombiniert und ein Objekt ist, das nach seiner Erstellung nicht mehr geändert werden kann. Hier wird der Eigenwert separat als "eig_val" und der Eigenvektor separat als "eig_vec" gespeichert. 002_0301_018.PNG Bitte beachten Sie die Reihenfolge der eindeutigen Wertdaten. Sie sind nicht in der Reihenfolge der Beiträge, wie sie in Scikit-Learn zu sehen sind. Daher werden wir sie sortieren und in Datenrahmen konvertieren, damit sie besser sichtbar sind.

#Verketten Sie Eigenwerte und Eigenvektoren zu einem Array
eigen = np.vstack((eig_val,eig_vec))

#Sortieren Sie nach der ersten Zeile
eigen[:, eigen[0,:].argsort()[::-1]]

Vertikal verketten (Achse = 0) mit Numpys Funktion "vstack ((a, b))". Numpys argsort Funktion sortiert nach einer bestimmten Zeile. Zu diesem Zeitpunkt wird die absteigende Reihenfolge durch Hinzufügen von "[:: -1]]" angegeben. 002_0301_019.PNG

#Konvertieren Sie Eigenwerte in Datenrahmen
eval_df = pd.DataFrame(data = eigen[0,:].reshape([1, 5]),
                       columns = ["Hauptbestandteil{}".format(x+1) for x in range(len(df.columns))],
                       index = ["Eigenwert"])
eval_df

002_0301_020.PNG

#Konvertieren Sie die Hauptkomponentenlast in einen Datenrahmen
evec_df = pd.DataFrame(data = eigen[1:,:].reshape([5, 5]),
                       columns = ["Hauptbestandteil{}".format(x+1) for x in range(len(df.columns))],
                       index = ['Mathematik', 'Wissenschaft', 'Gesellschaft', 'Englisch', 'Landessprache'])
evec_df

002_0301_021.PNG


Wir haben das sogenannte Eigenwertproblem, ein Problem, das für die lineare Algebra bekannt ist. Jetzt möchte ich das Eigenwertproblem vertiefen, aber gehen wir weiter. Im nächsten Abschnitt wird die Faktoranalyse mit scikit-learn durchgeführt.

Recommended Posts

2. Multivariate Analyse in Python 3-2. Hauptkomponentenanalyse (Algorithmus)
2. Multivariate Analyse in Python 3-1. Hauptkomponentenanalyse (Scikit-Learn)
2. Multivariate Analyse in Python 1-2. Einfache Regressionsanalyse (Algorithmus)
2. Multivariate Analyse in Python 1-1. Einfache Regressionsanalyse (Scikit-Learn)
2. Multivariate Analyse in Python 7-3. Entscheidungsbaum [Rückgabebaum]
2. Multivariate Analyse in Python 7-1. Entscheidungsbaum (Scikit-Learn)
2. Multivariate Analyse in Python 2-1. Multiple Regressionsanalyse (Scikit-Learn)
2. Multivariate Analyse in Python 8-1. K Nachbarschaftsmethode (Scikit-Learn)
2. Multivariate Analyse in Python 5-3. Logistische Regressionsanalyse (Statistikmodelle)
2. Multivariate Analyse in Python 8-3. K Nachbarschaftsmethode [Schnittstellenüberprüfung]
2. Multivariate Analyse in Python 7-2. Entscheidungsbaum [Unterschied in den Teilungskriterien]
2. Multivariate Analyse in Python 6-2. Ridge-Regression / Lasso-Regression (Scikit-Learn) [Ridge-Regression vs. Lasso-Regression]
2. Multivariate Analyse in Python 2-3. Multiple Regressionsanalyse [COVID-19-Infektionsrate]
2. Multivariate Analyse in Python 6-1. Ridge-Regression / Lasso-Regression (Scikit-Learn) [multiple Regression vs. Ridge-Regression]
2. Multivariate Analyse in Python 8-2. K Nachbarschaftsmethode [Gewichtungsmethode] [Rückgabemodell]
Hauptkomponentenanalyse (PCA) und unabhängige Komponentenanalyse (ICA) mit Python
2. Multivariate Analyse in Python 6-3. Ridge-Regression / Lasso-Regression (Scikit-Learn) [Funktionsweise der Regularisierung]
Coursera-Herausforderungen für maschinelles Lernen in Python: ex7-2 (Primäranalyse)
Visualisieren Sie die Korrelationsmatrix durch Hauptkomponentenanalyse mit Python
Dies und das der Hauptkomponentenanalyse
PRML Kapitel 12 Bayesianische Hauptanalyse Python-Implementierung
Genetischer Algorithmus in Python
Algorithmus in Python (Bellman-Ford-Methode, Bellman-Ford)
Assoziationsanalyse in Python
Hauptkomponentenanalyse (Hauptkomponentenanalyse: PCA)
Algorithmus in Python (Dijkstra)
Regressionsanalyse mit Python
Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus
Hauptkomponentenanalyse mit Python von nim mit nimpy
Algorithmus in Python (Haupturteil)
Axialsymmetrische Spannungsanalyse mit Python
Reproduzieren Sie die euklidische Methode der gegenseitigen Teilung in Python
Algorithmus in Python (Dichotomie)
Lernen ohne Lehrer 3 Hauptkomponentenanalyse
Einfache Regressionsanalyse mit Python
Implementieren Sie den Dijkstra-Algorithmus in Python
Gehirnwellenanalyse mit Python: Python MNE-Tutorial
Algorithmus in Python (Breitenprioritätssuche, bfs)
Erste einfache Regressionsanalyse in Python
Sortieralgorithmus und Implementierung in Python
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
Einführung in die Python-Grundlagen des maschinellen Lernens (unbeaufsichtigtes Lernen / Hauptanalyse)
Schreiben Sie A * (A-Stern) -Algorithmen in Python
Lassen Sie uns mit Python 2 einen Investitionsalgorithmus entwickeln
Algorithmus in Python (Tiefenprioritätssuche, dfs)
Gesichtserkennung mit Hauptkomponentenanalyse
Hauptkomponentenanalyse mit Spark ML
Implementierung eines einfachen Algorithmus in Python 2
Planare Skelettanalyse in Python (2) Hotfix
Algorithmus (Segmentbaum) in Python (Übung)
Führen Sie einen einfachen Algorithmus in Python aus
Hauptkomponentenanalyse mit Livedoor News Corpus --Practice--
Ali Buch in Python: Sec.2-5 Dyxtra-Methode
Algorithmus in Python (ABC 146 C Dichotomie
Schreiben Sie eine einfache Giermethode in Python
<Kurs> Maschinelles Lernen Kapitel 4: Hauptkomponentenanalyse
Restanalyse in Python (Ergänzung: Cochrane-Regeln)
Ausrichtungsalgorithmus durch Einfügemethode in Python