Plus facile à lire avec un fond crème, une teinte, plus de contraste ou un texte plus grand ? Choisissez vos couleurs et votre texte, une fois pour toutes les pages.

Leçon gratuite

Vecteurs propres et apprentissage automatique

Après cette leçon: Je peux dire ce qu’est un vecteur propre et pourquoi l’apprentissage automatique s’en sert.

Leçon de 65 min3 commandesLab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Qu’est-ce qu’un vecteur propre ?

Un vecteur propre est une direction qu’une matrice étire sans la tourner, et le facteur d’étirement est sa valeur propre. Vous saurez reconnaître un vecteur propre, en approcher un par itération et dire pourquoi l’apprentissage automatique s’en sert.

Un service de photos garde mille mesures par image, ce qui est lourd. Il cherche les quelques directions qui portent l’essentiel.

À la fin de cette leçon

Remarque

Je peux dire ce qu’est un vecteur propre et pourquoi l’apprentissage automatique s’en sert.

Mots clés

MotCe que ça veut dire
Vecteur propreun vecteur que la matrice étire sans changer sa direction
Valeur proprele facteur par lequel le vecteur propre est étiré
Itération de la puissancemultiplier un vecteur par la matrice, encore et encore
Direction dominantecelle de la plus grande valeur propre
Réduction de dimensiongarder moins de nombres par exemple

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Un vecteur propre garde sa direction

Prenons la matrice A = [[2, 1], [1, 2]]. Multipliée par le vecteur (1, 1), elle donne (3, 3), soit 3 fois (1, 1) : la direction est la même, la longueur est triplée.

Le vecteur (1, 1) est donc un vecteur propre de A, et 3 est sa valeur propre. Avec (1, −1), A donne (1, −1) : un autre vecteur propre, de valeur propre 1.

Exemple travaillé : trois vecteurs et la matrice A

VecteurA fois le vecteurMême direction ?
(1, 1)(3, 3)oui, valeur propre 3
(1, −1)(1, −1)oui, valeur propre 1
(1, 0)(2, 1)non, il a tourné

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Deux produits de A avec NumPy

Commande
docker exec jupyter python3 -c "import numpy as np; A = np.array([[2, 1], [1, 2]]); print(A @ np.array([1, 1]), A @ np.array([1, -1]))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Les valeurs propres de A avec NumPy

Commande
docker exec jupyter python3 -c "import numpy as np; print(np.linalg.eigvalsh(np.array([[2, 1], [1, 2]])))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Multiplier encore et encore révèle la direction dominante

Partons de (1, 0) et multiplions-le par A à plusieurs reprises. Le vecteur grandit, mais surtout il se rapproche de la direction (1, 1).

C’est l’itération de la puissance : la plus grande valeur propre l’emporte à chaque tour. Pour garder des nombres petits, on divise par la longueur après chaque produit.

Exemple travaillé : les premiers produits

TourVecteurRapport de la seconde à la première composante
0(1, 0)0
1(2, 1)0,5
2(5, 4)0,8
3(14, 13)0,93

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

L’itération de la puissance en Python

Code: python
# Matrice de départ et vecteur de départ.
a = [[2, 1], [1, 2]]
v = [1, 0]
for etape in range(10):
    w = [a[0][0] * v[0] + a[0][1] * v[1], a[1][0] * v[0] + a[1][1] * v[1]]
    longueur = (w[0] ** 2 + w[1] ** 2) ** 0.5
    # On divise par la longueur pour que les nombres restent petits.
    v = [w[0] / longueur, w[1] / longueur]
print("direction :", round(v[0], 3), round(v[1], 3))
# Remplacez 10 par 1, puis relancez.
# La direction est-elle déjà la même qu’avec 10 ?

A puissance 10 fois (1, 0) avec NumPy

Commande
docker exec jupyter python3 -c "import numpy as np; A = np.array([[2, 1], [1, 2]]); print(np.linalg.matrix_power(A, 10) @ np.array([1, 0]))"

Affichée ici, non exécutée. Créez un compte gratuit pour appuyer sur Exécuter et la saisir dans le terminal de votre propre labo.

Une erreur fréquente

Attention

Beaucoup pensent qu’une matrice tourne tous les vecteurs. Elle change presque tous les vecteurs de direction. Seuls les vecteurs propres restent sur leur droite : ils sont étirés ou retournés, jamais tournés.

L’apprentissage automatique garde les directions utiles

Des mesures nombreuses se ressemblent souvent. On construit une matrice qui dit comment les mesures varient ensemble. Son vecteur propre de plus grande valeur propre est la direction où les données s’étalent le plus.

On garde cette direction et quelques autres, et on laisse le reste. C’est la réduction de dimension : moins de nombres par exemple, presque la même information.

Exemple travaillé : de mille nombres à deux

ÉtapeCe que fait l’ordinateur
1Il mesure comment les mille valeurs varient ensemble
2Il cherche les vecteurs propres de cette matrice
3Il garde les deux de plus grandes valeurs propres
4Chaque image est résumée par deux nombres

Les cellules que les étudiants remplissent restent vides dans cet aperçu.

Pour aller plus loin

Dans un carnet, appelez np.linalg.eig sur la matrice de votre choix. Il rend les valeurs propres et, en colonnes, les vecteurs propres.

Vérifiez qu’une colonne multipliée par la matrice donne la même colonne fois sa valeur propre.

À propos de ce labo et de sa source: Lab JupyterLab de science des données : pandas, Matplotlib et scikit-learn dans le navigateur

Vous enseignez à une classe ? Proposez ce module à vos étudiants avec un guide de l'enseignant, des devoirs corrigés et un laboratoire pour chaque étudiant.