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

Produit scalaire et similarité cosinus

Après cette leçon: Je peux utiliser le produit scalaire pour dire à quel point deux vecteurs vont dans le même sens.

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

À quoi sert le produit scalaire ?

Le produit scalaire est un nombre qui dit à quel point deux vecteurs vont dans le même sens. Vous saurez le calculer, en tirer un angle et comparer deux textes avec la similarité cosinus.

Un site de recettes veut proposer des plats proches de celui que vous venez de cuisiner. Il compare des vecteurs d’ingrédients.

À la fin de cette leçon

Remarque

Je peux utiliser le produit scalaire pour dire à quel point deux vecteurs vont dans le même sens.

Mots clés

MotCe que ça veut dire
Produit scalairela somme des produits des composantes de même rang
Orthogonauxdeux vecteurs à angle droit, de produit scalaire nul
Anglel’écart de direction entre deux vecteurs
Cosinusun nombre de −1 à 1 lié à l’angle, 1 pour le même sens
Similarité cosinusle produit scalaire divisé par les deux longueurs

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

Le produit scalaire multiplie puis additionne

Un guichet vend 2 billets adulte à 12 €, 1 billet enfant à 6 € et 3 billets étudiant à 8 €. Les quantités forment le vecteur (2, 1, 3), les prix le vecteur (12, 6, 8).

On multiplie les composantes de même rang, puis on additionne : 24, 6 et 24 font 54 €. Ce calcul est le produit scalaire. Le résultat est un nombre, pas un vecteur.

Exemple travaillé : deux produits scalaires

VecteursProduits de même rangProduit scalaire
(2, 1, 3) et (12, 6, 8)24, 6 et 2454
(1, 2, 3) et (4, 5, 6)4, 10 et 1832
(1, 0) et (0, 1)0 et 00

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

Le total du guichet en Python

Code: python
# Quantités de billets : adulte, enfant, étudiant.
quantites = [2, 1, 3]
# Prix en euros de chaque sorte de billet.
prix = [12, 6, 8]
total = 0
for i in range(len(quantites)):
    total = total + quantites[i] * prix[i]
print("total :", total, "euros")
# Remplacez 3 par 0 dans quantites, puis relancez.
# Le total monte-t-il ou descend-il ?

Un produit scalaire avec NumPy

Commande
docker exec jupyter python3 -c "import numpy as np; print(np.dot([1, 2, 3], [4, 5, 6]))"

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.

Le signe du produit donne le sens

Si deux vecteurs vont à peu près dans le même sens, leur produit scalaire est positif. À angle droit, il vaut 0 : on dit qu’ils sont orthogonaux. Dans des sens opposés, il est négatif.

Le produit scalaire vaut aussi la longueur du premier, fois celle du second, fois le cosinus de l’angle entre eux. On en tire l’angle.

Exemple travaillé : trois directions

VecteursProduit scalaireCe que cela dit
(1, 0) et (2, 0)2même sens
(1, 0) et (0, 3)0angle droit
(1, 0) et (−1, 0)−1sens opposés

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

Cosinus et angle de deux vecteurs

Commande
docker exec jupyter python3 -c "import numpy as np; a = np.array([1, 0]); b = np.array([1, 1]); c = np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)); print(round(c, 3), round(float(np.degrees(np.arccos(c))), 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.

La similarité cosinus compare des textes

Un grand produit scalaire peut venir de grands vecteurs. Pour comparer des directions, on divise par les deux longueurs : c’est la similarité cosinus.

On compte les mots « pain », « lait » et « sucre » dans deux recettes : (2, 1, 0) et (1, 1, 1). Le produit scalaire vaut 3, les longueurs √5 et √3. La similarité vaut 3 divisé par √15, soit 0,775.

Exemple travaillé : deux recettes

ÉtapeCalculRésultat
Produit scalaire2 × 1 + 1 × 1 + 0 × 13
Longueur de la recette A√(4 + 1 + 0)√5, soit 2,236
Longueur de la recette B√(1 + 1 + 1)√3, soit 1,732
Similarité cosinus3 ÷ (2,236 × 1,732)0,775

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

La similarité des deux recettes

Commande
docker exec jupyter python3 -c "import numpy as np; a = np.array([2, 1, 0]); b = np.array([1, 1, 1]); print(round(np.dot(a, b) / (np.linalg.norm(a) * np.linalg.norm(b)), 3))"

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’un grand produit scalaire veut dire des vecteurs très semblables. Il grandit aussi quand les vecteurs sont longs. Pour juger la ressemblance, divisez par les deux longueurs : le résultat reste entre −1 et 1.

Pour aller plus loin

Dans un carnet, comptez trois mots dans vos propres phrases, puis calculez la similarité de deux phrases avec np.dot et np.linalg.norm.

Les moteurs de recherche sur documents et les systèmes de recommandation reposent sur cette idée : un texte devient un vecteur de comptes.

À 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.