diff --git a/vecteurs.classification.md b/vecteurs.classification.md new file mode 100644 index 0000000..b7e0b3f --- /dev/null +++ b/vecteurs.classification.md @@ -0,0 +1,73 @@ +# Classification et clustering + +Dans l’analyse de données, l’objectif est souvent de **catégoriser les individus** ou mieux encore de **découvrir des structures cachées**. + +Deux grandes approches existent : la **classification supervisée** et le **clustering non supervisé**. + +## Variables cibles et explicatives + +### Variable cible (ou variable dépendante, output, $Y$) + +C’est la variable que l’on cherche à prédire, expliquer ou classifier. + +Elle dépend des autres variables. + +Elle est connue dans l’apprentissage supervisé (ex. classification, régression). + +### Variable explicative (ou variable indépendante, feature, $X$) + +Ce sont les caractéristiques observées qui servent à expliquer ou prédire la variable cible. + +Elles sont indépendantes entre elles (en théorie) mais influencent la variable cible. + +## Classification supervisée + +La **classification** consiste à **attribuer une observation à une classe prédéfinie**. + +On dispose d’un ensemble de données d’apprentissage étiquetées (chaque observation appartient à une classe connue) et l’algorithme apprend une règle de décision. + +### Méthodologie + +1. **Constitution du jeu d’apprentissage** : données avec variables explicatives (âge, revenu, historique d’achat…) et une variable cible (classe : « fidèle », « risque »). +2. **Choix d’un algorithme de classification**. +3. **Apprentissage du modèle** : l’algorithme ajuste ses paramètres pour minimiser l’erreur de prédiction. +4. **Évaluation** : mesurer la précision sur de nouvelles données (validation croisée, matrice de confusion). +5. **Prédiction** : classer les nouvelles observations. + +### Algorithmes courants + +* **Arbres de décision (CART, C4.5, Random Forest)** : règles simples de type « si… alors… ». +* **k-Nearest Neighbors (k-NN)** : un individu est classé selon la majorité de ses plus proches voisins. +* **Naïve Bayes** : modèle probabiliste basé sur le théorème de Bayes. +* **Régression logistique** : adaptée aux classes binaires. +* **SVM (Support Vector Machines)** : séparateurs optimaux entre classes. +* **Réseaux de neurones** : pour des problèmes complexes et volumineux. + + +## Clustering (non supervisé) + +Le **clustering** (ou classification automatique) consiste à **regrouper des individus en classes (clusters) non connues à l’avance**, en fonction de leur similarité. + +Il n’y a pas de variable cible : l’algorithme cherche à découvrir des structures naturelles dans les données. + +### Méthodologie + +1. **Choisir une mesure de similarité** (distance euclidienne, Manhattan, cosinus…). +2. **Appliquer un algorithme de regroupement**. +3. **Évaluer la qualité des clusters** (compacité, séparation, indice de silhouette). +4. **Interpréter les groupes** : leur donner un sens métier (ex. « clients premium », « clients occasionnels »). + +L’indice de silhouette (Silhouette Coefficient) mesure à quel point un objet (une donnée) est bien placé dans son cluster par rapport aux autres clusters. + +Il évalue deux choses : + +Cohésion intra-cluster → à quel point l’objet est proche des autres membres de son cluster. + +Séparation inter-cluster → à quel point il est éloigné des membres des autres clusters. + +### Algorithmes courants + +* **k-Means** : partitionne en *k* clusters en minimisant la variance intra-classe. +* **Clustering hiérarchique** : construit un arbre (dendrogramme) de regroupement. +* **DBSCAN** : identifie des zones de densité et détecte les anomalies. +* **Gaussian Mixture Models (GMM)** : modèles probabilistes où chaque cluster suit une distribution normale. diff --git a/vecteurs.index.md b/vecteurs.index.md new file mode 100644 index 0000000..f4bcc51 --- /dev/null +++ b/vecteurs.index.md @@ -0,0 +1,60 @@ +# Indexation vectorielle + +## Structures exactes + +### Kd-Tree (k-dimensional tree) + +Un Kd-Tree est une structure d’arbre binaire qui permet d’organiser des points dans un espace de dimension k. + +- Chaque nœud de l’arbre représente un point (vecteur). +- À chaque niveau de l’arbre, on découpe l’espace selon une dimension spécifique. + +Ainsi, l’espace est récursivement partitionné en hyperplans (droites en 2D, plans en 3D, hyperplans en kD). + +- On choisit une dimension de séparation (ex. la dimension x). +- On prend le point médian selon cette dimension → il devient le nœud racine. +- Les points avec des coordonnées inférieures vont dans le sous-arbre gauche, les autres dans le sous-arbre droit. +- On recommence récursivement en changeant la dimension (ex. au niveau suivant on coupe selon y, puis z, ... puis de nouveau x). + +Chaque étape partitionne l’espace en rectangles de plus en plus petits. + +### Ball-Tree + +Au lieu de couper par des hyperplans, on coupe par des hypersphères → mieux adapté pour distances euclidiennes. + +Le Kd-Tree est une structure d’indexation exacte, très efficace pour la recherche de voisins proches en faible dimension. Mais il ne passe pas à l’échelle en haute dimension, ce qui a conduit au développement des méthodes approximatives. + +## Structures approximatives + +### Locality Sensitive Hashing (LSH) + +L’idée est de construire des fonctions de hachage probabilistes qui envoient : + +les vecteurs similaires → dans le même seau (bucket) avec forte probabilité, + +les vecteurs différents → dans des seaux distincts avec forte probabilité. + +Contrairement à un hachage classique (qui disperse les données), ici le hachage est conçu pour conserver la notion de proximité. + +### Inverted File (IVF) + +Appliquer k-means pour créer C clusters. + +Assigner chaque vecteur au centroïde le plus proche. + +Dans chaque cluster, stocker uniquement les résidus (différence vecteur – centroïde). + +Utiliser Product Quantization (PQ) pour encoder ces résidus en codes compacts (ex. 8 bits par sous-espace). + +### Hierarchical Navigable Small World (HNSW) + +Basé sur les graphes de proximité : chaque vecteur est un nœud relié à ses voisins proches. + +On construit un graphe navigable qui permet de trouver les plus proches voisins sans explorer toute la base. + +Inspiré des graphes "small-world" : on peut atteindre rapidement un point du graphe en peu de sauts. + + +> Le choix d'un index est un compromis +- Exact = lent mais précis. +- Approximatif = rapide mais avec une petite perte de précision. diff --git a/vecteurs.md b/vecteurs.md index 0661f2f..8a1c7a7 100644 --- a/vecteurs.md +++ b/vecteurs.md @@ -4,10 +4,10 @@ La solution la plus utilisée consiste à projeter ces données dans un **espace vectoriel** : chaque objet est représenté par un vecteur de nombres réels. -Cela permet d’utiliser les outils de l’algèbre linéaire, de la statistique et de l’informatique pour : +Cela permet d’utiliser les outils de l’algèbre linéaire et de la statistique pour : - rechercher des objets similaires, - regrouper ou classifier des individus, -- détecter des anomalies ou recommander des produits. +- identifier des anomalies, fraudes ou défauts de fabrication (vecteurs très éloignés). Aujourd’hui, ces méthodes sont utilisées partout : moteur de recherche, recommandation Netflix/Spotify, détection de fraude bancaire, IA générative (ChatGPT encode les phrases en vecteurs pour raisonner dessus). @@ -18,7 +18,7 @@ Aujourd’hui, ces méthodes sont utilisées partout : moteur de recherche, reco Un **vecteur** est une suite ordonnée de nombres réels : $$ -v = [x_1, x_2, \dots, x_n] \in \mathbb{R}^n +\vec{v} = [v_1, v_2, \dots, v_n] \in \mathbb{R}^n $$ Un **espace vectoriel** est un ensemble de vecteurs où s’appliquent deux opérations : @@ -39,7 +39,7 @@ Elle définit aussi une distance entre deux vecteurs, invariante par translation #### Norme $L_2$ (euclidienne) -Dans le plan, si le vecteur _u_ a pour coordonnées (x , y), sa norme s'écrit : +Dans le plan, si le vecteur $\vec{v}$ a pour coordonnées (x , y), sa norme s'écrit : $$ ||\vec{v}|| = \sqrt{x^2 + y^2} @@ -59,26 +59,143 @@ $$ ### Distances -À partir d’une norme, on définit une **distance** entre vecteurs $u$ et $v$. Exemple : +À partir d’une norme, on définit une **distance** entre vecteurs $\vec{u}$ et $\vec{v}$. -* Distance euclidienne : +La distance euclidienne : $$ -d(u,v) = ||u-v||_2 +d(\vec{u},\vec{v}) = ||\vec{u}-\vec{v}||_2 $$ ### Produit scalaire et similarité cosinus -Le **produit scalaire** est défini par : +Le **produit scalaire** (_inner product_ ou _dot product_ en anglais) est une opération qui prend deux vecteurs et donne un scalaire (nombre). $$ -u \cdot v = \sum_{i=1}^n u_i v_i +\vec{u} \cdot \vec{v} = \sum_{i=1}^n u_i v_i $$ +ou + +$$ +\vec{u} \cdot \vec{v} = ||\vec{u}|| \cdot ||\vec{v}|| \cdot cos(\theta) +$$ + +Le produit scalaire relie longueurs et angles. Il permet d'exploiter les notions de la géométrie euclidienne traditionnelle : longueurs, angles, orthogonalité en deux, trois ou plus de dimensions. + La **similarité cosinus** est donnée par : $$ -\cos(\theta) = \frac{u \cdot v}{||u|| \cdot ||v||} +\cos(\theta) = \frac{\vec{u} \cdot \vec{v}}{||\vec{u}|| \cdot ||\vec{v}||} $$ -Utilisé pour comparer deux vecteurs indépendamment de leur taille (ex. documents textuels). +Elle est utilisée pour comparer deux vecteurs indépendamment de leur taille (ex. documents textuels). + +Si = 0 soit θ = 90°, les vecteurs sont orthogonaux (perpendiculaires) Il n'y a aucune similarité. + +Si = 1 les vecteurs pointent exactement dans la même direction (très similaires). + +Si = -1 les vecteurs pointent dans des directions opposées (complètement dissemblables). + +## Statistique multivariée + +### Moyenne, variance et covariance + +Pour une variable $X$ : + +**Moyenne** : $\mu = \frac{1}{n}\sum x_i$ + +**Variance** : $\sigma^2 = \frac{1}{n}\sum (x_i - \mu)^2$ + +Pour deux variable $X$ et $Y$ + +**Covariance** : $\text{Cov}(X,Y) = E[(X-\mu_X)(Y-\mu_Y)]$ + +La covariance mesure comment deux variables X et Y varient ensemble. +$E$ est l'esperance (ou moyenne théorique). En statistique pratique, on remplace $E[X]$ par la moyenne empirique + +D'où de manière empirique + +$$ +\widehat{\mathrm{Cov}}(X,Y) = \frac{1}{n} \sum_{i=1}^n (x_i - \bar{x})(y_i - \bar{y}) +$$ + +Si $X$ et $Y$ sont corrélés alors la covariance est positive. Si la covariance est nulle il n'y a pas de lien. Si la covariance est négative alors la probabilité est trés faible. + +**Corrélation** est la covariance normalisée sur une échelle de -1 à 1. + +$$ +\rho(X,Y) = \frac{\mathrm{Cov}(X,Y)}{\sigma_X \sigma_Y} +$$ + +Ces mesures servent à comprendre la dispersion et les corrélations. + + +### Normalisation des données + +Avant de comparer des vecteurs, il faut rendre les dimensions comparables en grandeur. + +**Min-Max scaling** : + +$$ +x' = \frac{x - \min}{\max - \min} +$$ + +**Standardisation (z-score)** : + +$$ +x' = \frac{x - \mu}{\sigma} +$$ + +### Réduction de dimension + +Lorsqu’une base de données contient de nombreuses variables (ou dimensions), il devient difficile d’analyser efficacement les données. On parle alors de malédiction de la dimensionnalité : plus il y a de dimensions, plus les calculs sont coûteux, et plus il est difficile de visualiser ou d’interpréter les résultats. + +La réduction des dimensions vise donc à simplifier l’espace de représentation en conservant l’information la plus pertinente. + +- Alléger les données : diminuer la taille et la complexité des tables. +- Améliorer les performances : réduire le temps de calcul dans les requêtes analytiques et les algorithmes. +- Faciliter la visualisation : rendre possible une représentation graphique (2D, 3D). +- Éliminer le bruit : supprimer les variables redondantes ou peu informatives. + +Il existe deux grandes familles d’approches + +**Sélection de variables** (feature selection) : On conserve uniquement les dimensions les plus pertinentes : + +- **Analyse de corrélation** : suppression d'une des variables fortement corrélées. +- **Méthodes statistiques** (tests d’hypothèses, chi², ANOVA) pour éliminer les variables peu discriminantes. +- **Méthodes incrémentales** : ajout ou retrait progressif de variables en fonction de critères de qualité (erreur de prédiction, pouvoir explicatif) + +**Extraction de nouvelles dimensions** (feature extraction) + +On crée de nouvelles variables synthétiques à partir des variables initiales : + +- **ACP (Analyse en Composantes Principales, PCA)** + - Transforme les données en un nouvel espace en combinant linéairement les variables. + - Les premières composantes expliquent la plus grande partie de la variance. + - Très utilisée en statistique et en apprentissage automatique. + +- **Analyse factorielle** : Identifie des facteurs latents expliquant les corrélations entre variables. +- **t-SNE, UMAP** (méthodes modernes) : Plus adaptées pour la visualisation et la détection de structures non linéaires dans des données complexes. + +## Théorie de la similarité + +### Problème des plus proches voisins + +Pour un vecteur $\vec{q}$, trouver les $k$ vecteurs les plus proches parmi une base de données. + +Méthode naïve : comparer $q$ avec tous les vecteurs un par un. + +Mais quand la dimension n augmente, les distances entre points tendent à se ressembler, + +- [Classification et clustering](vecteurs.classification) +- [Indexation vectorielle](vecteurs.index) + + +## Exercice + +1. Construire une base de produits avec vecteurs nutritionnels. +2. Normaliser les données par z-score. +3. Créer un index HNSW. +4. Classer un produit inconnu avec k-NN. +5. Détecter les produits extrêmes. diff --git a/vecteurs.readme.md b/vecteurs.readme.md index 4acd89a..ae00ff4 100644 --- a/vecteurs.readme.md +++ b/vecteurs.readme.md @@ -8,8 +8,6 @@ FAISS (Facebook), Milvus, Pinecone, Weaviate. - - 1. **** * Définitions (vecteur, dimension, norme). @@ -230,53 +228,23 @@ Aujourd’hui, ces méthodes sont utilisées partout : moteur de recherche, reco --- -## Chapitre 2 : Statistique multivariée +## Chapitre 2 : -### 2.1 Moyenne, variance, covariance +### 2.1 -Pour une variable $X$ : - -* Moyenne : $\mu = \frac{1}{n}\sum x_i$ -* Variance : $\sigma^2 = \frac{1}{n}\sum (x_i - \mu)^2$ -* Covariance entre $X$ et $Y$ : $\text{Cov}(X,Y) = E[(X-\mu_X)(Y-\mu_Y)]$ - -👉 Ces mesures servent à comprendre la dispersion et les corrélations. - ---- - -### 2.2 Normalisation des données - -Avant de comparer des vecteurs, il faut rendre les dimensions comparables : - -* **Min-Max scaling** : - - $$ - x' = \frac{x - \min}{\max - \min} - $$ -* **Standardisation (z-score)** : - - $$ - x' = \frac{x - \mu}{\sigma} - $$ 👉 Le z-score est très utilisé pour détecter les valeurs extrêmes. --- -### 2.3 Réduction de dimension + * **ACP (PCA)** : projette les données sur des axes qui maximisent la variance. * **T-SNE, UMAP** : techniques non linéaires pour visualiser des vecteurs en 2D ou 3D. --- -## Chapitre 3 : Théorie de la similarité -### 3.1 Problème des plus proches voisins - -Donné un vecteur $q$, trouver les $k$ vecteurs les plus proches parmi une base de données. - -* Méthode naïve : comparer $q$ avec tous les vecteurs ($O(N)$). --- @@ -297,55 +265,6 @@ Quand la dimension $n$ augmente : * Cosinus → données textuelles ou normalisées. * Jaccard/Hamming → données catégorielles. ---- - -## Chapitre 4 : Classification et clustering - -### 4.1 Classification supervisée - -* **k-NN** : attribue la classe majoritaire parmi les $k$ plus proches voisins. -* Analyse discriminante. - ---- - -### 4.2 Clustering (non supervisé) - -* **k-means** : partitionne les données en $k$ groupes. -* **Clustering hiérarchique**. -* **DBSCAN** : détecte des regroupements denses. - ---- - -### 4.3 Évaluation - -* Taux d’erreur, précision, rappel. -* Indice de silhouette. - ---- - -## Chapitre 5 : Indexation vectorielle - -### 5.1 Structures exactes - -* **kd-tree**, **ball-tree** : efficaces en basse dimension (< 30). - ---- - -### 5.2 Structures approximatives - -* **LSH (Locality Sensitive Hashing)**. -* **IVF (Inverted File)**. -* **HNSW (Hierarchical Navigable Small World)** : - - * Graphe de proximité hiérarchique. - * Recherche rapide et précise. - ---- - -### 5.3 Compromis - -* Exact = lent mais précis. -* Approximatif = rapide mais avec une petite perte de précision. --- @@ -427,11 +346,7 @@ Grâce à des outils comme PostgreSQL + pgvector, on peut manipuler ces techniqu ## Exercices finaux -1. Construire une base de produits avec vecteurs nutritionnels. -2. Normaliser les données par z-score. -3. Créer un index HNSW. -4. Classer un produit inconnu avec k-NN. -5. Détecter les produits extrêmes. + --- @@ -445,3 +360,159 @@ Grâce à des outils comme PostgreSQL + pgvector, on peut manipuler ces techniqu --- Voulez-vous que je complète ce cours avec **schémas explicatifs et illustrations** (par exemple représentation d’un espace vectoriel, graphe HNSW, courbe du z-score), pour en faire un véritable poly visuel ? + + +Très bonne question 👍, car la **covariance** est une des notions centrales de la statistique et elle fait intervenir l’opérateur $E$, qui est l’**espérance mathématique**. + +--- + +# 📘 La covariance et l’espérance + +## 1. L’espérance $E[X]$ + +L’**espérance** (ou **moyenne théorique**) d’une variable aléatoire $X$ est une mesure de sa valeur moyenne à long terme. + +* **Variable discrète** : + +$$ +E[X] = \sum_i x_i \, P(X = x_i) +$$ + +* **Variable continue** : + +$$ +E[X] = \int_{-\infty}^{+\infty} x \, f(x)\, dx +$$ + +où $f(x)$ est la densité de probabilité. + +👉 Intuitivement, $E[X]$ = **moyenne pondérée** par les probabilités. +👉 En statistique pratique, on remplace $E[X]$ par la **moyenne empirique** : + +$$ +\bar{x} = \frac{1}{n} \sum_{i=1}^n x_i +$$ + +--- + +## 2. Définition de la covariance + +La **covariance** mesure comment deux variables $X$ et $Y$ **varient ensemble**. + +$$ +\mathrm{Cov}(X,Y) = E\big[(X - E[X])(Y - E[Y])\big] +$$ + +Autrement dit : + +* Si $X$ est grand quand $Y$ est grand → covariance **positive**. +* Si $X$ est grand quand $Y$ est petit → covariance **négative**. +* Si aucun lien → covariance proche de **0**. + +--- + +## 3. Formule pratique + +On peut développer la définition : + +$$ +\mathrm{Cov}(X,Y) = E[XY] - E[X]E[Y] +$$ + +En version empirique (données observées $(x_i,y_i)$) : + + + +--- + +## 4. Exemple simple + +Données : +$X = (1, 2, 3)$, $Y = (2, 4, 6)$. + +* Moyennes : $\bar{x} = 2$, $\bar{y} = 4$. +* Produits centrés : + $(1-2)(2-4) = (+2)$, + $(2-2)(4-4) = (0)$, + $(3-2)(6-4) = (+2)$. +* Moyenne : $(2 + 0 + 2)/3 = 1.33$. + +👉 Covariance positive : $X$ et $Y$ croissent ensemble. + +--- + +## 5. Interprétation + +* **Unité** : la covariance s’exprime dans les unités combinées de $X$ et $Y$ (ex. kg·cm). +* **Problème** : sa valeur dépend des échelles de mesure → difficile à comparer. +* **Solution** : on utilise la **corrélation** (covariance normalisée) : + +$$ +\rho(X,Y) = \frac{\mathrm{Cov}(X,Y)}{\sigma_X \sigma_Y} +$$ + +où $\sigma_X, \sigma_Y$ sont les écarts-types. + +--- + +## 6. Application à vos vecteurs nutritionnels + +Si $X =$ teneur en sucre et $Y =$ teneur en énergie (kcal) sur une base de produits : + +* $\mathrm{Cov}(X,Y) > 0$ : les produits sucrés apportent plus d’énergie (logique). +* $\mathrm{Cov}(X,Y) \approx 0$ : pas de lien. +* $\mathrm{Cov}(X,Y) < 0$ : plus de sucre = moins d’énergie (peu probable). + +--- + +📌 **Résumé** + +* $E[\cdot]$ = espérance = moyenne théorique. +* $\mathrm{Cov}(X,Y)$ mesure la tendance de deux variables à varier ensemble. +* Corrélation = covariance **normalisée** pour comparer entre variables. + +--- + +Voulez-vous que je montre un **exemple SQL avec PostgreSQL** pour calculer la covariance (et corrélation) entre sucre et énergie dans votre table `produits` ? + + +Parfait 👍 Développons maintenant la partie **classification et clustering**, qui est un volet essentiel de l’analyse multidimensionnelle. + +--- + + +### Applications + +* Segmentation client sans étiquette. +* Analyse de comportements sur un site web. +* Regroupement de documents ou d’images. +* Détection d’anomalies (points isolés). + +--- + +## 3. Comparaison Classification vs Clustering + +| Critère | Classification (supervisée) | Clustering (non supervisée) | +| ----------------------- | --------------------------- | ----------------------------- | +| Données d’apprentissage | Avec classes connues | Sans classes connues | +| Objectif | Prédire une classe | Découvrir des regroupements | +| Exemple | Spam / Non Spam | Segmenter des clients | +| Méthodes | SVM, arbres, k-NN, Bayes | k-Means, DBSCAN, hiérarchique | + +--- + +## 4. Liens avec l’analyse multidimensionnelle + +* **En Data Warehouse** : on peut utiliser la classification pour prédire une variable clé (ex. prédire si une campagne marketing réussira). +* **Dans un cube OLAP** : le clustering peut permettre de **réduire les dimensions** en regroupant des modalités similaires (ex. fusionner des catégories de produits qui se vendent de manière identique). + +--- + +✅ En résumé : + +* La **classification** s’appuie sur des classes connues et cherche à **prédire**. +* Le **clustering** ne connaît pas les classes à l’avance et cherche à **découvrir** des structures cachées. + +--- + +Voulez-vous que je développe un **exemple pratique illustré** (par ex. segmentation de clients avec un tableau de variables, appliquant à la fois classification supervisée et clustering) pour rendre cette partie plus concrète ? diff --git a/vecteurs/kd-tree.png b/vecteurs/kd-tree.png new file mode 100644 index 0000000..e8cd1fd Binary files /dev/null and b/vecteurs/kd-tree.png differ diff --git a/vecteurs/kd-tree.svg b/vecteurs/kd-tree.svg new file mode 100644 index 0000000..54ca7cc --- /dev/null +++ b/vecteurs/kd-tree.svg @@ -0,0 +1,121 @@ + + + + + + + + + + + + + + + Plan 2D — Zones partitionnées + + + + + + + + Level 0 (x) + + + + Level 1 (y) + + + + + + Level 2 (x) + + + + + + + + + + + 1 + + + 4 + + + 7 + + + + + + 2 + + + 5 + + + + + + 3 + + + 6 + + + 8 + + + + + + Kd-Tree (structure) + + + + + + Root (split x) + + + + + + L (split y) + + + + + + R (split y) + + + + + + + + + LL (split x) + + + LR (split y) + + + RR (split x) + + + + + + + Légende : + • Couleur rouge = coupe selon x (verticale). • Couleur bleue = coupe selon y (horizontale). + + +