2. Multivariate Analyse in Python 3-1. Hauptkomponentenanalyse (Scikit-Learn)

** Hauptkomponentenanalyse ** ist eine Technik zum Zusammenfassen einer großen Anzahl von Variablen in einer kleinen Anzahl neuer Variablen. Mit anderen Worten kann gesagt werden, dass es sich um eine Technik handelt, die die allgemeine Tendenz und die individuellen Eigenschaften aufzeigt, indem die von mehreren Variablen gehaltenen Informationen komprimiert, neue Variablen synthetisiert und die Daten rekonstruiert werden. Diese neue Variable wird als ** Hauptkomponente ** bezeichnet.

Angenommen, die Ergebnisse der Tests für 5 Fächer, Mathematik, Naturwissenschaften, Sozialkunde, Englisch und Japanisch, beziehen sich auf 20 Schüler pro Klasse. Wenn Sie wissen möchten, wie viel akademische Fähigkeiten Sie haben, sehen Sie sich normalerweise die "Gesamtpunktzahl" an. Lassen Sie uns die fünf Themen als Variablen $ x_ {1}, x_ {2}, x_ {3}, x_ {4}, x_ {5} $ ausdrücken.

Gesamtpunktzahl= 1×x_{1} + 1×x_{2} + 1×x_{3} + 1×x_{4} + 1×x_{5}

Ich habe absichtlich $ 1 × $ geschrieben, aber die Gesamtpunktzahl ist die Summe der fünf Fächer multipliziert mit dem gleichen Gewicht von $ 1 $. Was hier passiert ist, dass die Informationen, die ursprünglich 5 Subjekte = 5 Dimensionen hatten, in 1 Dimension zusammengefasst werden, die als "schulische Fähigkeit" bezeichnet wird. Die Methode zur Betrachtung der akademischen Fähigkeiten basierend auf dieser Gesamtpunktzahl basiert auf der Idee, dass jeder mit akademischen Fähigkeiten in jedem Fach eine gute Punktzahl hat. Mit anderen Worten, es wird eine Korrelation zwischen jedem Thema geben.

Lassen Sie uns daher Dummy-Daten für 20 Personen in einer Klasse vorbereiten und die gesamten Daten vorerst anzeigen.

** ⑴ Bibliothek importieren **

#Bibliothek für numerische Berechnungen und Datenrahmenoperationen
import numpy as np
import pandas as pd

#Bibliothek zum Zeichnen von Grafiken
import matplotlib.pyplot as plt
%matplotlib inline

#Bibliothek für maschinelles Lernen
import sklearn
from sklearn.decomposition import PCA

** ⑵ Daten vorbereiten **

#Testergebnisse für 20 Personen
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]])

#In Datenrahmen konvertieren
df = pd.DataFrame(data = arr, columns = ['Mathematik', 'Wissenschaft', 'Gesellschaft', 'Englisch', 'Landessprache'])

002_0301_002.PNG

** ⑶ Zeichnen Sie ein Streudiagramm, um einen Überblick über die Daten zu erhalten **

#Pandas-Plot-Methode importieren
from pandas import plotting

#Zeichnen Sie ein Streudiagramm
plotting.scatter_matrix(df, alpha=0.5, figsize=(8, 8))
plt.show()

Von dem Code "pandas.plotting.scatter_matrix (frame, alpha, figsize)", der ein Streudiagramm zeichnet, ist das Argument "alpha" die Transparenz der Zeichnungsfarbe (0 bis 1) und "figsize" die Zeichnungsgröße (Breite, Höhe). ) Wird in Zoll angegeben.

002_0301_003.PNG

Wie wäre es mit. Beispielsweise können Sie eine nach rechts ansteigende lineare Verteilung sehen, z. B. Naturwissenschaften und Mathematik. Höhere wissenschaftliche Ergebnisse haben tendenziell höhere mathematische Ergebnisse, was bedeutet, dass eine Korrelation zwischen den Daten besteht. In diesem Fall besteht die Idee der ** Hauptkomponentenanalyse ** darin, dass Informationen kompakter komprimiert werden können.

Hauptkomponentenanalyse (PCA)

Ziel der Hauptkomponentenanalyse ist es, die Daten zu komprimieren, ohne so viele Informationen wie möglich zu verlieren. Wir möchten den Informationsverlust minimieren, der durch die Reduzierung der Anzahl der Dimensionen verursacht wird. Mit anderen Worten, wir suchen nach einer neuen Variablen, die die ursprüngliche Informationsmenge maximiert. Lassen Sie uns nun bestätigen, dass die Hauptkomponentenanalyse tatsächlich in diesen Schritten durchgeführt wird.

Stellen Sie zunächst den Vektor von 5 Probanden = 5 Variablen wie folgt ein.

  x = \left(
    \begin{array}{ccc}
      x_{1} \\
      x_{2} \\
      x_{3} \\
      x_{4} \\
      x_{5} 
    \end{array}
  \right)

** Berechnung der ersten Hauptkomponente ** Die Hauptkomponente ist wie folgt definiert als "der Wert jeder Komponente mit einem zu jeder Variablen hinzugefügten Koeffizienten".

z_{1} = w_{11}x_{1} + w_{12}x_{2} + w_{13}x_{3} + w_{14}x_{4} + w_{15}x_{5} = w_{1}・ X.

Wenn $ w_ {1} $ auf der rechten Seite durch einen Vektor dargestellt wird, sieht es wie folgt aus, aber im vorherigen Beispiel für Gesamtpunkte war hier alles $ 1 $ enthalten.

  w_{1} = \left(
    \begin{array}{ccc}
      w_{11} \\
      w_{12} \\
      w_{13} \\
      w_{14} \\
      w_{15} 
    \end{array}
  \right)

Dann sollte nach "$ w_ {1} $, das die Informationsmenge maximiert" gesucht werden. Was ist diese Informationsmenge? In der Hauptkomponentenanalyse "Information = Dispersion". Dispersion ist der Grad der Datenverteilung, aber warum ist die Informationsmenge groß, wenn die Verteilung groß ist? Es ist nur eine Analogie, aber nehmen wir an, jeder hat am Ende des Kurses bei einem sehr einfachen Quiz eine perfekte Punktzahl von 10 erreicht. Mit anderen Worten, die Verteilung ist $ 0 $, aber in diesem Fall gibt es keine Informationen, die die Person charakterisieren. Wenn andererseits die Streuung wie bei den 5 Probanden im Beispiel angemessen ist, kann bewertet werden, dass beispielsweise 90 Punkte oder mehr gut und 20 Punkte nicht gut sind. Deshalb können wir sagen, dass "maximale Verteilung = maximale Information".

Obwohl die Streuung maximal ist, kann sie tatsächlich so groß sein, wie Sie möchten. Wenn Sie alle Werte von $ w_ {1} $ bis $ w_ {5} $ mit 100 multiplizieren, wird $ z_ {1} $ ebenfalls mit 100 multipliziert und die Verteilung mit 10000 multipliziert. Es ist nicht so, dass Sie es unendlich groß machen können, aber was Sie wissen möchten, ist das Gewichtsverhältnis für jedes Thema. Ich möchte wissen, in welchem Verhältnis die Informationsmenge am größten ist. Halten Sie also die Größe konstant.

\|w_{1}\| = 1

Finden Sie $ w_ {1} $, das die Informationsmenge $ V [z_ {1}] $ unter einer bestimmten Regel maximiert, bei der das Hinzufügen aller Gewichte $ 1 $ ergibt. Mit anderen Worten, wenn Sie herausfinden, in welche Richtung und in welchem Verhältnis die Informationsmenge maximiert wird, wird dies als ** erste Hauptkomponente ** bezeichnet. Dies wird wiederholt.

** Berechnung der zweiten Hauptkomponente ** Ich weiß jedoch bereits, dass die maximale Informationsmenge $ w_ {1} $ beträgt. Daher möchte ich dieses Mal eine andere Art der Gewichtungsmethode als $ w_ {1} $ finden, die die Informationsmenge maximiert. .. Daher möchte ich, dass $ w_ {2} $ in eine andere Richtung als $ w_ {1} $ zeigt, daher füge ich eine Bedingung hinzu.

\|w_{2}\| = 1, w_{2}\perp{w_{1}}

Die Bedingung ist, dass $ w_ {2} $ orthogonal zu $ w_ {1} $ ist. Jetzt hat $ w_ {2} $ eine andere Art von Informationen als $ w_ {1} $. Wenn es $ w_ {3} $ ist, stellen Sie als Nächstes eine Bedingung, dass es sowohl zu $ w_ {1} $ als auch zu $ w_ {2} $ orthogonal ist, und wenn es $ w_ {4} $ ist, stellen Sie eine Bedingung wie ... Durch Wiederholen während des Hinzufügens kann das Folgende erhalten werden.

  \left(
    \begin{array}{ccc}
      z_{1} \\
      \vdots \\
      z_{5} 
    \end{array}
  \right)
  = \left(
    \begin{array}{cccc}
      w_{11} & \ldots & w_{15} \\
      \vdots & \ddots & \vdots \\
      w_{51} & \ldots & w_{55}
    \end{array}
  \right)x
z=Wx

** Hauptanalyse ** verwendet diese Formeln, um Zehntausende oder Hunderttausende von Dimensionen von Daten auf Hunderte von Dimensionen zu komprimieren, damit die ursprünglichen Informationen so weit wie möglich erhalten bleiben. Mit anderen Worten ist die k-te Hauptkomponente die Richtung, in der die Datenvariation die k-te größte ist. Übrigens werden die Gewichte $ w_ {1}, w_ {2}, w_ {3}, w_ {4}, w_ {5} $ jeder Variablen auch als ** Hauptkomponentenlast ** bezeichnet. Mit scikit-learn der Bibliothek für maschinelles Lernen laden diese ** Hauptkomponente $ z_ {1} $ ** und ** Hauptkomponente $ w_ {1}, w_ {2}, w_ { Finde 3}, w_ {4}, w_ {5} $ **.

** ⑷ Hauptkomponentenanalyse durchführen **

#Erstellen Sie eine Instanz des Modells
pca = PCA()

#Erstellen Sie ein Modell basierend auf den Daten
pca.fit(df)

#Wenden Sie Daten auf das Modell an
values = pca.transform(df)

Die Hauptkomponentenanalyse wird im Englischen als Hauptkomponentenanalyse bezeichnet und wird daher als PCA abgekürzt. ➀ Erstellen Sie zunächst eine Instanz, die als Modell für das Modell dient, und with übergeben Sie Daten mit der Funktion fit an diese Instanz, um das Modell zu generieren. ➂ Es gibt drei Schritte: Wenn Sie die Daten erneut auf dieses Modell anwenden, wird die Bewertung für jede Hauptkomponente berechnet.

002_0301_004.PNG

Es ist schwer zu sehen, deshalb werde ich es in einen Datenrahmen konvertieren.

df_pca = pd.DataFrame(data = values,
                      columns = ["Hauptbestandteil{}".format(x+1) for x in range(len(df.columns))])

002_0301_005.PNG

Von der 1. Hauptkomponente bis zur 5. Hauptkomponente hat jeder Schüler 5 Punkte. Diese Bewertung wird als ** Hauptkomponentenbewertung ** bezeichnet. Da das Original 5 Motive und 5 Dimensionen umfasst, besteht die Hauptkomponente auch aus den 5 Dimensionen.

** ⑸ Beitragssatz berechnen **

#Berechnen Sie den Beitragssatz des Modells pca
ev_ratio = pca.explained_variance_ratio_

#Beitrag zum Datenrahmen konvertieren
df_evr = pd.DataFrame(data = ev_ratio, 
                      columns = ['Beitragssatz'],
                      index = ["Hauptbestandteil{}".format(x+1) for x in range(len(df.columns))])

002_0301_006.PNG

Der Beitragssatz ist ein Index, der die Aussagekraft jeder Hauptkomponente zeigt. Der Wert von $ 0 ≤ c ≤ 1 $ wird angenommen, weil das Verhältnis der Informationsmenge, die die Daten ursprünglich haben, = die Verteilung der Hauptkomponente = der Prozentsatz der Informationsmenge ist. Auf jeden Fall hat die erste Hauptkomponente die größte Informationsmenge, und die anderen mit der größten Informationsmenge werden gesucht, und die nächstgrößere ist ... Die Summe aller Beiträge beträgt $ 1 $. Sie können dies sehen, indem Sie ein Diagramm mit dem Namen ** Kumulativer Beitragssatz ** erstellen.

#Beitragssatz akkumulieren
cc_ratio = np.cumsum(ev_ratio)

#Verketten Sie 0
cc_ratio = np.hstack([0, cc_ratio])

#Zeichnen Sie ein Diagramm
plt.plot(cc_ratio, "-o")
plt.xlabel("Hauptbestandteil")
plt.ylabel("Kumulativer Beitragssatz")
plt.grid()
plt.show()

Da der Beitragssatz der ersten Hauptkomponente allein 90% übersteigt, halte ich die zweite Hauptkomponente und darüber hinaus für nicht erforderlich, aber dies ist nicht immer der Fall. 002_0301_007.PNG

** ⑹ Interpretieren Sie die Hauptkomponente **

#Berechnen Sie die Dispersion der Hauptkomponenten
eigen_value = pca.explained_variance_
pd.DataFrame(eigen_value, 
             columns = ["Verteilt"], 
             index = ["Hauptbestandteil{}".format(x+1) for x in range(len(df.columns))])

002_0301_008.PNG

Sie sehen, dass die Größe der Streuung den Beitragssatz widerspiegelt. Die Streuung der ersten Hauptkomponente ist überwiegend größer als die der anderen Hauptkomponenten und enthält eine große Menge an Informationen.

#Berechnen Sie die Hauptkomponentenlast
eigen_vector = pca.components_
#In Datenrahmen konvertieren
pd.DataFrame(eigen_vector,
             columns = [df.columns],
             index = ["Hauptbestandteil{}".format(x+1) for x in range(len(df.columns))])

002_0301_009.PNG

Was bedeutet die Hauptkomponente? ** 1. Hauptkomponente **: Alle 5 Probanden sind mit einem Minuszeichen gekennzeichnet. Dies ist wie das Umkehren der Gesamtpunkte, und der Punkt ist, dass die Daten am stärksten in die Richtung gestreut sind, ob sie alle hoch oder alle niedrig sind. Da es ein Minus gibt, ist die Hauptkomponentenbewertung umso kleiner, je höher die Gesamtpunktzahl ist. Unter diesen ist der englische Koeffizient besonders groß, dh selbst wenn sich die englische Bewertung geringfügig unterscheidet, unterscheidet sich die Bewertung der Hauptkomponente erheblich. ** Zweite Hauptkomponente **: Englisch / Japanisch ist negativ und groß und Mathematik / Naturwissenschaften sind positiv und groß. Je höher die Punktzahl für Mathematik / Naturwissenschaften ist, desto höher ist die Punktzahl für die Hauptkomponente, und je niedriger die Punktzahl für Englisch / Japanisch ist, desto höher ist die Punktzahl für die Hauptkomponente. Die Daten sind sozusagen in Richtung Wissenschaft oder Geisteswissenschaften verstreut, und je mehr Menschen gut in naturwissenschaftlichen Fächern und nicht gut in Fächern der freien Künste sind, desto höher ist die Bewertung der Hauptkomponente. ** Dritte Hauptkomponente **: Die Landessprache ist hervorragend und negativ. Mit anderen Worten, die Daten werden in die Richtung gestreut, ob Sie die Landessprache sprechen können oder nicht. Je höher die Punktzahl der Landessprache ist, desto kleiner ist die Punktzahl der Hauptkomponente.

Ist die Gesamtpunktzahl in der Richtung, in der die Daten am stärksten verteilt sind, hoch oder niedrig (** 1. Hauptkomponente )? Die nächste ( 2. Hauptkomponente ) ist näher am literarischen System oder am Wissenschaftssystem, und die Richtung mit der nächstgrößeren Variation ( 3. Hauptkomponente **) ist, ob Sie Japanisch sprechen können oder nicht. Es scheint, dass die Daten verstreut sind. Diese Analyse zeigt, dass Sie mit diesen drei Hauptkomponenten die umfangreichsten Informationen für die dreidimensionale Komprimierung erhalten.

** ⑺ Vergleichen Sie die Gesamtpunktzahl mit der Punktzahl der ersten Hauptkomponente **

Wie unterscheidet sich das akademische Fähigkeitsranking des Schülers am Ende zwischen der Gesamtpunktzahl, die einfach die Summe der Punktzahlen der fünf Fächer ist, und der Punktzahl der ersten Hauptkomponente, die 90% der Informationsmenge für die fünf Fächer ausmacht? Ich würde gerne bestätigen.

##Erstellen Sie ein Ranking nach Gesamtpunktzahl
#Berechnen Sie die Gesamtpunktzahl
sum = np.sum(np.array(df), axis=1)
#In ein zweidimensionales 20x1-Array konvertieren
sum.reshape(len(sum), 1)
#In Datenrahmen konvertieren
df_sum = pd.DataFrame(sum,
                      columns = ['Gesamtpunktzahl'],
                      index = ["ID{}".format(x+1) for x in range(len(df.index))])
#Absteigende Sorte
df_sum_rank = df_sum.sort_values('Gesamtpunktzahl', ascending=False)

##Erstellen Sie ein Ranking nach der Bewertung der 1. Hauptkomponente
#Komponente 1 extrahieren
df_PC1 = df_pca["Hauptkomponente 1"]
#In Array konvertieren
pc1 = np.array(df_PC1)
#In ein zweidimensionales 20x1-Array konvertieren
pc1 = pc1.reshape(len(pc1), 1)
#Geben Sie einen Ausweis
df_pca = pd.DataFrame(pc1,
                      columns = ['Hauptkomponente 1'],
                      index = ["ID{}".format(x+1) for x in range(len(df.index))])
#Aufsteigende Sorte
df_pca_rank = df_pca.sort_values('Hauptkomponente 1')

002_0301_012.PNG

Die ** 1. Hauptkomponente ** ist, ob die Gesamtpunktzahl hoch oder niedrig ist, sodass die Ranglisten der oberen und der unteren Gruppe gleich sind. In der Zwischenzeit ist die Mittelschicht etwas anders, aber ich fand, dass das Gefühl der Gesamtpunktzahl "Ich denke, Menschen mit akademischen Fähigkeiten können jedes Fach machen" im Allgemeinen angemessen ist.


Im nächsten Abschnitt möchte ich den Mechanismus der Berechnung der Hauptkomponentenanalyse ohne Verwendung von scicit-learn weiter erläutern.

Recommended Posts

2. Multivariate Analyse in Python 3-1. Hauptkomponentenanalyse (Scikit-Learn)
2. Multivariate Analyse in Python 3-2. Hauptkomponentenanalyse (Algorithmus)
2. Multivariate Analyse in Python 1-1. Einfache Regressionsanalyse (Scikit-Learn)
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 6-1. Ridge-Regression / Lasso-Regression (Scikit-Learn) [multiple Regression vs. Ridge-Regression]
2. Multivariate Analyse in Python 6-3. Ridge-Regression / Lasso-Regression (Scikit-Learn) [Funktionsweise der Regularisierung]
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 2-3. Multiple Regressionsanalyse [COVID-19-Infektionsrate]
2. Multivariate Analyse in Python 8-2. K Nachbarschaftsmethode [Gewichtungsmethode] [Rückgabemodell]
Hauptkomponentenanalyse (PCA) und unabhängige Komponentenanalyse (ICA) mit Python
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
Assoziationsanalyse in Python
Hauptkomponentenanalyse (Hauptkomponentenanalyse: PCA)
Regressionsanalyse mit Python
Fordern Sie die Hauptkomponentenanalyse von Textdaten mit Python heraus
Hauptkomponentenanalyse mit Python von nim mit nimpy
Axialsymmetrische Spannungsanalyse mit Python
Lernen ohne Lehrer 3 Hauptkomponentenanalyse
Einfache Regressionsanalyse mit Python
Gehirnwellenanalyse mit Python: Python MNE-Tutorial
Erste einfache Regressionsanalyse in Python
[Python] PCA-Scratch im Beispiel "Einführung in die multivariate Analysemethode"
Gesichtserkennung mit Hauptkomponentenanalyse
Hauptkomponentenanalyse mit Spark ML
Scikit-learn kann nicht in Python installiert werden
Planare Skelettanalyse in Python (2) Hotfix
Lineare Regression in Python (Statmodelle, Scikit-Learn, PyMC3)
Restanalyse in Python (Ergänzung: Cochrane-Regeln)
Beginnen wir mit der multivariaten Analyse und der Hauptkomponentenanalyse mit Pokemon! Zusammenarbeit zwischen R und Tableau
Hauptkomponentenanalyse mit Python (Scikit-Lernversion, Pandas & Numpy-Version) ([Informationen zur Informationsabteilung der High School II] Unterrichtsmaterialien für die Lehrerausbildung)
Hauptkomponentenanalyse mit Livedoor News Corpus - Vorbereitung--
Ich habe versucht, die Hauptkomponenten mit Titanic-Daten zu analysieren!
Überlebensanalyse mit Python 2-Kaplan-Meier-Schätzung
Führen Sie eine Entitätsanalyse mit spaCy / GiNZA in Python durch
Datenanalyse in Python: Ein Hinweis zu line_profiler
[Umgebungskonstruktion] Abhängigkeitsanalyse mit CaboCha mit Python 2.7
Aufgezeichnete Umgebung für die Datenanalyse mit Python
Geben Sie eine kurze URL-ähnliche Zeichenfolge in Python aus