2. Analyse multivariée décrite dans Python 3-2. Analyse en composantes principales (algorithme)

Dans la section précédente, nous avons appris le concept d'analyse en composantes principales à l'aide de scicit-learn. Ici, considérons délibérément le mécanisme de calcul de l'analyse en composantes principales sans scicit-learn.

Le même exemple. En supposant que les résultats des tests de 5 matières de mathématiques, sciences, société, anglais et japonais sont pour 20 élèves par classe, 5 matières = 5 dimensions sont compressées et la capacité académique de l'étudiant est évaluée dans une dimension plus petite. Je veux le faire.

5 sujets = 5 variables sont $ x_ {1}, x_ {2}, x_ {3}, x_ {4}, x_ {5} $, et le composant principal souhaité $ z_ {1} $ est affiché.

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

Le score du composant principal $ z $ est la somme des valeurs de chaque composant avec les coefficients $ w_ {1}, w_ {2}, w_ {3}, w_ {4}, w_ {5} $ ajoutés à chaque variable. .. Ce que je veux savoir, c'est que si vous divisez ce coefficient $ w_ {1}, w_ {2}, w_ {3}, w_ {4}, w_ {5} $ par quel rapport, la quantité d'information = dispersion sera maximisée. C'est. Par conséquent, les conditions suivantes sont ajoutées.

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

Trouvez le rapport de distribution qui maximise la quantité d'information = dispersion à la condition que la somme des valeurs au carré des coefficients soit de 1 $. De cette façon, il existe la ** méthode du multiplicateur indéterminé de Lagrange ** comme méthode pour trouver les valeurs maximales et minimales des fonctions multivariées sous certaines conditions de contraintes.

** Méthode du multiplicateur indécis de Lagrange **

Lorsque les variables $ x, y $ se déplacent tout en satisfaisant la condition de contrainte $ g (x, y) = 0 $, la fonction $ z = f (x, y) $ devient $ x, y $ qui est la valeur maximale / minimale. L'équation suivante est valable.

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

Ce qui précède est le concept de la méthode du multiplicateur indéterminé de Lagrange avec les deux variables les plus simples et une condition. Le symbole est $ λ $ (lambda), mais ici nous comprenons seulement qu'il s'agit d'une constante. De plus, le symbole $ ∂ $, qui a de nombreux noms tels que round, partial et del, représente la ** différenciation partielle **. Pour donner un exemple, $ \ displaystyle \ frac {∂F} {∂x} = 0 $ signifie que la valeur de la fonction $ F $ est partiellement différenciée par la variable $ x $ est $ 0 $.


** Différenciation partielle **

Tout d'abord, vérifions le sens de la différenciation ordinaire. Dessinons une courbe de la fonction $ y = f (x) $ sur le plan $ x, y $. En vous concentrant sur le point $ x $ sur la coordonnée $ x $, si vous regardez la hauteur à ce point, c'est $ f (x) $ car c'est un point sur $ y = f (x) $. Notez également que $ x + Δx $ est légèrement hors de $ x $. La hauteur à ce point est la fonction $ y = f (x) $ appliquée à $ x + Δx $, donc la coordonnée $ y $ est $ f (x + Δx) $. Ensuite, l'inclinaison entre les points est calculée. La pente est le montant du changement en $ y $ pour le montant du changement en $ x $. Le montant du changement en $ x $ dans le dénominateur est $ Δx $, et le montant du changement en $ y $ dans la molécule est $ f (x + Δx) -f (x) $ avant soustraction. 002_0301_013.PNG

La différenciation consiste à rapprocher ce $ Δx $ de 0 $. En d'autres termes, lorsque $ x + Δx $ approche $ x $ de la limite, une ** ligne tangente ** qui représente l'inclinaison momentanée au point de $ x $ peut être dessinée. Cette pente est le sens de la différenciation. 002_0301_014.PNG

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

Combien $ y $ change quand $ x $ change un peu, et la différenciation est le rapport de changement de $ y $ à un petit changement de $ x $.

Jusqu'à présent, il y a eu une différenciation dans le cas d'une fonction à une variable, où $ y $ est déterminé si un $ x $ est déterminé. Cependant, il existe une fonction à deux variables $ f (x, y) $ dont la valeur n'est déterminée qu'après que deux valeurs ont été déterminées, et une fonction à trois variables $ f (x, y, z) dont la valeur n'est déterminée que lorsque trois valeurs sont déterminées. Il y a aussi $. Généralement, il existe une fonction multi-variable, et en fait, c'est une ** différenciation partielle ** pour considérer la différenciation de la fonction multi-variable. Dessinons un graphique d'une fonction à deux variables. 002_0301_015.PNG Une fois que $ x $ et $ y $ sont déterminés, la hauteur $ z $ est déterminée. Il y a une hauteur $ z = f (x, y) $ correspondant à chaque point du plan inférieur, ce qui le fait ressembler à une surface courbe. Et la hauteur $ z $ change selon qu'elle suit un peu l'axe $ x $ ou un peu l'axe $ y $. Il y a deux directions principales pour la façon dont la hauteur change lorsque vous vous déplacez un peu. Ce qu'il s'agit de l'axe $ x $ et ce qu'il s'agit de l'axe $ y $ est la ** différenciation partielle **. 002_0301_016.PNG La ligne bleue est l'inclinaison lorsque $ y $ est fixe et que $ x $ se déplace un peu, c'est-à-dire que la ligne tangente dans la direction de l'axe $ x $ est dessinée. Il est exprimé dans la formule.

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

$ y $ est fixe. De combien la hauteur $ z $ bouge lorsqu'elle se déplace un peu dans la direction $ x $, et le rapport du changement de $ z $ au changement minute de $ x $ est ** différenciation partielle **. Par conséquent, la différenciation partielle de $ y $ est

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

La ligne rouge est le rapport entre le changement de $ z $ et le léger changement de $ y $, combien la hauteur $ z $ se déplace lorsque $ x $ est fixe et se déplace un peu dans la direction de $ y $. est.

Maintenant, considérons la signification que la valeur partiellement différenciée est $ 0 $. Avec la fonction $ z = f (x, y) $, si vous déplacez un peu la variable $ x $, le changement de $ z $ est $ 0 $. En d'autres termes, s'il n'y a pas de changement, et s'il ne peut pas être plus grand ou plus petit, c'est le maximum ou le minimum. De plus, comme le montre la méthode du multiplicateur indéterminé de Lagrange, lorsque la valeur de $ x $ et $ y $ est en même temps $ 0 $, le vrai pic (valeur maximale) ou le vrai fond de la vallée sur la surface courbe de la fonction à deux variables. Cela signifie que c'est (valeur minimale).


** Dérivation de la matrice de co-dispersion de dispersion à partir d'une équation différentielle partielle **

5 Revenez à l'exemple du sujet. Encore une fois, les principaux composants sont les suivants: p=ax+by+cu+dv+ew

Les coefficients $ a, b, c, d, e $ de la composante principale $ p $ sont des constantes et sont déterminés de façon à maximiser la variance de ce $ p $. Ce que vous voulez savoir est le solde du rapport des constantes $ a, b, c, d, e $, donc $ a, b, c, d, e $ a les conditions suivantes. a^2+b^2+c^2+d^2+e^2=1

Définissez la distribution du composant principal $ {s_ {p}} ^ 2 $ pour laquelle vous voulez la valeur maximale. Il est exprimé comme suit avec le nombre d'individus comme $ n $. \displaystyle Sp^2=\frac{1}{n} \\{ {(p_{1}-\bar{p})}^2+{(p_{2}-\bar{p})}^2+...+{(p_{n}-\bar{p})}^2\\}

Appliquez maintenant la méthode du multiplicateur indéterminé de Lagrange pour définir la fonction $ L $. \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) Ensuite, l'équation suivante est vraie. \displaystyle \frac{∂L}{∂a}=0 , \frac{∂L}{∂b}=0 , \frac{∂L}{∂c}=0 , \frac{∂L}{∂d}=0 , \frac{∂L}{∂e}=0

Faites attention à la première formule de la tentative. \displaystyle \frac{∂L}{∂a}=0

Apportez la formule de la fonction $ L $ à la molécule et placez $ a $ dans le dénominateur pour une différenciation partielle. J'ai dit qu'il est fixe sauf pour $ a $, mais spécifiquement, il est considéré comme une constante et $ b, c, d, e $ sont supprimés. \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

Apportez la formule du composant principal $ p $, développez-la dans {} et transformez-la en utilisant les définitions de variance et de covariance. \displaystyle 2 \\{ a{s_{x}}^2 + bs_{xy} + cs_{xu} + ds_{xv} + es_{xw} \\} - 2λa = 0

Une organisation plus poussée donne l'équation suivante: a{s_{x}}^2 + bs_{xy} + cs_{xu} + ds_{xv} + es_{xw} = λa

Une expression similaire peut être obtenue à partir des $ b, c, d, e $ restants. 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

Ce qui suit est un résumé de ces cinq équations dans une matrice.

\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}

Cette matrice carrée sur le côté gauche (matrice avec le même nombre d'éléments en lignes et en colonnes) est une ** matrice co-distribuée **. Les vecteurs de colonne $ a, b, c, d, e $ qui satisfont cette équation sont appelés ** vecteurs propres **, et $ λ $ est appelé ** valeurs propres **. Cette valeur propre $ λ $ est la dispersion des composantes principales.

** ⑴ Importer la bibliothèque **

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

** ⑵ Créer des données **

#Créer des scores pour 5 matières avec 20 étudiants
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]])

#Créer un bloc de données en spécifiant un nom de colonne
df = pd.DataFrame(data = arr,
                  columns = ['Math', 'Science', 'société', 'Anglais', 'langue nationale'])

002_0301_001.PNG

** ⑶ Trouvez la matrice de co-distribution de distribution **

#Convertir la trame de données en type de tableau Numpy
arr = np.array(df)

#Trouvez la matrice distribuée co-distribuée
cov = np.cov(arr, rowvar=0, bias=0)

La matrice distribuée co-distribuée (matrice de variance cov </ font> ariance) est calculée en utilisant la fonction cov de Numpy. Sous la forme «numpy.cov (data, rowvar = 0, bias = 0)», l'argument «bias = 0» spécifie une distribution non biaisée (biais = 1 pour la distribution de l'échantillon). rowvar = 0 est lorsque les données sont disposées verticalement, et lorsqu'elles sont horizontales, spécifiez rowvar = 1. 002_0301_017.PNG

** ⑷ Trouver valeur propre / vecteur propre **

#Trouver valeur propre / vecteur propre
eig_val, eig_vec = np.linalg.eig(cov)

print("valeur propre:\n", eig_val) 
print("Vecteur unique:\n", eig_vec)

La fonction linalg.eig () de Numpy spécifie simplement une matrice et renvoie deux tableaux de valeurs propres et de vecteurs propres en tuples. Un taple est un type de données qui combine plusieurs données et est un objet qui ne peut pas être modifié une fois qu'il est créé. Ici, la valeur propre est stockée séparément comme ʻeig_val et le vecteur propre est stocké séparément comme ʻeig_vec. 002_0301_018.PNG Veuillez noter la séquence des données de valeur unique. Ils ne sont pas dans l'ordre des contributions comme on le voit dans scikit-learn. Par conséquent, nous allons les trier et les convertir en blocs de données pour les rendre plus faciles à voir.

#Concaténer les valeurs propres et les vecteurs propres en un seul tableau
eigen = np.vstack((eig_val,eig_vec))

#Trier en fonction de la première ligne
eigen[:, eigen[0,:].argsort()[::-1]]

Concaténez verticalement (axe = 0) avec la fonction vstack ((a, b)) de Numpy. Trier par une ligne spécifique avec la fonction ʻargsortde Numpy. A ce moment, l'ordre décroissant est spécifié en ajoutant[:: -1]]`. 002_0301_019.PNG

#Convertir les valeurs propres en cadres de données
eval_df = pd.DataFrame(data = eigen[0,:].reshape([1, 5]),
                       columns = ["Composant principal{}".format(x+1) for x in range(len(df.columns))],
                       index = ["valeur propre"])
eval_df

002_0301_020.PNG

#Convertir la charge du composant principal en bloc de données
evec_df = pd.DataFrame(data = eigen[1:,:].reshape([5, 5]),
                       columns = ["Composant principal{}".format(x+1) for x in range(len(df.columns))],
                       index = ['Math', 'Science', 'société', 'Anglais', 'langue nationale'])
evec_df

002_0301_021.PNG


Nous nous retrouvons avec le problème dit des valeurs propres, un problème célèbre pour l'algèbre linéaire. Je voudrais maintenant approfondir le problème des valeurs propres, mais passons à autre chose. Dans la section suivante, l'analyse factorielle sera effectuée à l'aide de scikit-learn.

Recommended Posts

2. Analyse multivariée décrite dans Python 3-2. Analyse en composantes principales (algorithme)
2. Analyse multivariée expliquée dans Python 3-1. Analyse en composantes principales (scikit-learn)
2. Analyse multivariée décrite dans Python 1-2. Analyse de régression simple (algorithme)
2. Analyse multivariée définie dans Python 1-1. Analyse de régression simple (scikit-learn)
2. Analyse multivariée expliquée dans Python 7-3. Arbre de décision [arbre de retour]
2. Analyse multivariée décrite dans Python 7-1. Arbre de décision (scikit-learn)
2. Analyse multivariée décrite dans Python 2-1. Analyse de régression multiple (scikit-learn)
2. Analyse multivariée expliquée dans Python 8-1. Méthode de voisinage k (scikit-learn)
2. Analyse multivariée expliquée dans Python 5-3. Analyse de régression logistique (modèles statistiques)
2. Analyse multivariée énoncée dans Python 8-3. Méthode de voisinage K [vérification d'intersection]
2. Analyse multivariée expliquée dans Python 7-2. Arbre de décision [différence de critères de division]
2. Analyse multivariée définie dans Python 6-2. Régression Ridge / Régression Lasso (scikit-learn) [Régression Ridge vs régression Lasso]
2. Analyse multivariée détaillée dans Python 2-3. Analyse de régression multiple [taux d’infection au COVID-19]
2. Analyse multivariée décrite dans Python 6-1. Régression de crête / Régression de lasso (scikit-learn) [régression multiple vs régression de crête]
2. Analyse multivariée expliquée dans Python 8-2. Méthode de voisinage k [méthode de pondération] [modèle de retour]
Analyse en composants principaux (PCA) et analyse en composants indépendants (ICA) avec python
2. Analyse multivariée décrite dans Python 6-3. Régression Ridge / Régression Lasso (scikit-learn) [Fonctionnement de la régularisation]
Python: apprentissage non supervisé: analyse principale
Défis d'apprentissage automatique de Coursera en Python: ex7-2 (analyse principale)
Visualisez la matrice de corrélation par l'analyse des composants principaux avec Python
Ceci et cela de l'analyse en composantes principales
PRML Chapitre 12 Mise en œuvre de l'analyse principale bayésienne Python
Algorithme génétique en python
Algorithme en Python (méthode Bellman-Ford, Bellman-Ford)
Analyse d'association en Python
Analyse en composantes principales (Analyse en composantes principales: ACP)
Algorithme en Python (Dijkstra)
Analyse de régression avec Python
Défiez l'analyse des composants principaux des données textuelles avec Python
Analyse des composants principaux à l'aide de python de nim avec nimpy
Algorithme en Python (jugement premier)
Analyse des contraintes symétriques axiales avec Python
Reproduire la méthode de division mutuelle euclidienne en Python
Algorithme en Python (dichotomie)
Apprendre sans enseignant 3 Analyse des principales composantes
Analyse de régression simple avec Python
Implémenter l'algorithme de Dijkstra en python
Analyse des ondes cérébrales avec Python: tutoriel Python MNE
Algorithme en Python (recherche de priorité de largeur, bfs)
Première analyse de régression simple en Python
Algorithme de tri et implémentation en Python
[Python] PCA scratch dans l'exemple de "Introduction à la méthode d'analyse multivariée"
Introduction aux bases de Python de l'apprentissage automatique (apprentissage non supervisé / analyse principale)
Ecrire des algorithmes A * (A-star) en Python
Développons un algorithme d'investissement avec Python 2
Algorithme en Python (recherche de priorité en profondeur, dfs)
Reconnaissance faciale à l'aide de l'analyse des composants principaux
Analyse des composants principaux avec Spark ML
Implémentation d'un algorithme simple en Python 2
Analyse du squelette planaire dans Python (2) Hotfix
Algorithme (arborescence de segments) en Python (s'entraîner)
Exécutez un algorithme simple en Python
Analyse des composants principaux avec le corpus d'actualités Livedoor - Pratique--
Livre Ali en python: méthode Dyxtra Sec.2-5
Algorithme en Python (ABC 146 C Dichotomy
Ecrire une méthode de cupidité simple en Python
<Cours> Machine learning Chapitre 4: Analyse des principaux composants
Analyse résiduelle en Python (Supplément: règles Cochrane)
Algorithme d'alignement par méthode d'insertion en Python