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.
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 $.
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.
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.
\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. 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 **. 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).
5 Revenez à l'exemple du sujet.
Encore une fois, les principaux composants sont les suivants:
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.
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 $.
Appliquez maintenant la méthode du multiplicateur indéterminé de Lagrange pour définir la fonction $ L $.
Faites attention à la première formule de la tentative.
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.
Apportez la formule du composant principal $ p $, développez-la dans {} et transformez-la en utilisant les définitions de variance et de covariance.
Une organisation plus poussée donne l'équation suivante:
Une expression similaire peut être obtenue à partir des $ b, c, d, e $ restants.
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.
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#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'])
#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.
#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
.
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]]`.
#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
#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
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.