From ef6d61504aff966372dfaef17ae5d7f2eb04107b Mon Sep 17 00:00:00 2001 From: medina5 Date: Mon, 15 Sep 2025 13:32:42 +0200 Subject: [PATCH] Vecteurs --- tp1.md | 21 +- vecteurs.md | 84 ++++++ vecteurs.readme.md | 447 +++++++++++++++++++++++++++++ vecteurs/distance.svg | 648 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 1191 insertions(+), 9 deletions(-) create mode 100644 vecteurs.md create mode 100644 vecteurs.readme.md create mode 100644 vecteurs/distance.svg diff --git a/tp1.md b/tp1.md index 65afb9c..d2fbd49 100644 --- a/tp1.md +++ b/tp1.md @@ -1,8 +1,14 @@ -# Travaux pratiques 1 +# Travaux pratiques de Cartographie -## Cartographie -1. Créer une table zone +1. Avec le logiciel QGIS + +Ajouter les couches +- AJouter une couche xyz avec OpenStreetMap +- Zommer sur l'ile de Batz (En Bretagne, au nord de Morlaix) + + +2. Créer une table zone ```sql create table zone ( @@ -13,11 +19,8 @@ create table zone ( ); ``` -Avec QGIS +2. Ajouter une zone -### Ajouter les couches -- AJouter une couche xyz avec OpenStreetMap -- Zommer sur l'ile de Batz (En Bretagne, au nord de Morlaix) - Ajouter une couche postgreSQL sur la table zone - Changer le style de remplissage pour avoir une semi transparence (opacité) - Entrer en édition sur la couche avec l'icone crayon @@ -28,7 +31,7 @@ Avec QGIS - Enregistrer - Avec DBeaver vérifier l'existence de l'entité et modifier son nom et sa catégorie - Calculer l'aire du terrain et son périmètre -- Transformer +- Transformer la projection pour avoir le résultat en mètres ### Le marais Poullou - Dessiner le marais Poullou Attention celui ci est en deux partie @@ -49,7 +52,7 @@ Avec QGIS ### POI (Point of Interest) - Ajouter une nouvelle table pour les points - Ajouter un point depuis QGIS : menhir de Kreach ar Bolloch (A) un autre sur le menhir de Porz ar Roc'h -- Calculer la distance entre les 2 menhir +- Calculer la distance entre les 2 menhirs - Importer le fichier point.csv diff --git a/vecteurs.md b/vecteurs.md new file mode 100644 index 0000000..0661f2f --- /dev/null +++ b/vecteurs.md @@ -0,0 +1,84 @@ +# Analyse de données vectorielles et recherche de similarité + +> La multiplication des données numériques (textes, images, vidéos, données issues de capteurs ou d’applications métiers) pose un défi majeur : comment représenter ces données pour les comparer et les analyser efficacement ? + +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 : +- rechercher des objets similaires, +- regrouper ou classifier des individus, +- détecter des anomalies ou recommander des produits. + +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). + +## Fondements mathématiques + +### Vecteurs et espaces vectoriels + +Un **vecteur** est une suite ordonnée de nombres réels : + +$$ +v = [x_1, x_2, \dots, x_n] \in \mathbb{R}^n +$$ + +Un **espace vectoriel** est un ensemble de vecteurs où s’appliquent deux opérations : + +* addition de vecteurs, +* multiplication par un scalaire. + +Exemple : + +* Un produit alimentaire décrit par (protéines, sucres, graisses, sel, fibres) est un vecteur à 5 dimensions. +* Une image de 28×28 pixels peut être représentée par un vecteur de dimension 784. + +### Normes + +En géométrie, la **norme** est une extension de la valeur absolue des nombres aux vecteurs. Elle permet de mesurer la longueur commune à toutes les représentations d'un vecteur dans un espace affine. + +Elle définit aussi une distance entre deux vecteurs, invariante par translation et compatible avec la multiplication externe. + +#### Norme $L_2$ (euclidienne) + +Dans le plan, si le vecteur _u_ a pour coordonnées (x , y), sa norme s'écrit : + +$$ +||\vec{v}|| = \sqrt{x^2 + y^2} +$$ + +par extension à n dimensions + +$$ +||\vec{v}||_2 = \sqrt{\sum_{i=1}^n v_i^2} +$$ + +#### Norme $L_1$ (Manhattan) + +$$ +||\vec{v}||_1 = \sum_{i=1}^n |v_i| +$$ + +### Distances + +À partir d’une norme, on définit une **distance** entre vecteurs $u$ et $v$. Exemple : + +* Distance euclidienne : + +$$ +d(u,v) = ||u-v||_2 +$$ + +### Produit scalaire et similarité cosinus + +Le **produit scalaire** est défini par : + +$$ +u \cdot v = \sum_{i=1}^n u_i v_i +$$ + +La **similarité cosinus** est donnée par : + +$$ +\cos(\theta) = \frac{u \cdot v}{||u|| \cdot ||v||} +$$ + +Utilisé pour comparer deux vecteurs indépendamment de leur taille (ex. documents textuels). diff --git a/vecteurs.readme.md b/vecteurs.readme.md new file mode 100644 index 0000000..4acd89a --- /dev/null +++ b/vecteurs.readme.md @@ -0,0 +1,447 @@ +## **Introduction générale** + +* Contexte : explosion des données multidimensionnelles (texte, images, sons, données produits). +* Besoin : représenter ces objets dans un **espace vectoriel** pour les comparer, les regrouper, les classer. +* Outils modernes : PostgreSQL + `pgvector`, + + +FAISS (Facebook), Milvus, Pinecone, Weaviate. + + + + +1. **** + + * Définitions (vecteur, dimension, norme). + * Produit scalaire, orthogonalité. + * Notions de norme $L_1, L_2, L_\infty$. + +2. **Espaces métriques** + + * Distance euclidienne. + * Similarité cosinus. + * Inégalités triangulaires et propriétés. + +3. **Algèbre linéaire appliquée** + + * Matrices, transformations, réduction de dimension. + * Application : analyse en composantes principales (ACP). + +--- + +## **Chapitre 2 : Statistique multivariée** + +1. **Descriptif** + + * Moyenne, variance, covariance. + * Corrélations entre variables. + +2. **Normalisation** + + * Min-Max scaling. + * Standardisation (z-score). + * Normalisation par norme (unit vector). + +3. **Réduction de dimension** + + * ACP (PCA). + * T-SNE et UMAP (visualisation en 2D des données vectorielles). + +--- + +## Théorie de la similarité + +### Problème des plus proches voisins (k-NN) + + * Définition. + * Algorithme naïf et complexité $O(N)$. + +2. **Malédiction de la dimensionnalité** + + * Définition. + * Impact sur les distances (concentration des mesures). + +3. **Mesures adaptées aux données** + + * Distances pour variables continues. + * Distances pour variables catégorielles (Hamming, Jaccard). + * Cas des vecteurs creux (sparse vectors). + +--- + +## **Chapitre 4 : Classification et clustering** + +1. **Classification supervisée** + + * k-NN classique. + * Analyse discriminante linéaire. + +2. **Clustering (non supervisé)** + + * k-means. + * Hiérarchique. + * DBSCAN. + +3. **Évaluation** + + * Erreur de classification. + * Indice de silhouette. + * Entropie et pureté. + +--- + +## **Chapitre 5 : Indexation pour la recherche vectorielle** + +1. **Structures exactes** + + * kd-tree, ball tree. + * Avantages / limites. + +2. **Index approximatifs** + + * LSH (Locality Sensitive Hashing). + * Graphes de proximité (HNSW). + * IVF (Inverted File). + +3. **HNSW en détail** + + * Construction hiérarchique. + * Navigation dans le graphe. + * Performances (précision vs vitesse). + +--- + +## **Chapitre 6 : Applications modernes** + +1. **Recommandation de produits** + + * Profils nutritionnels (ex. yaourt vs confiture). + * Recommandation basée sur similarité. + +2. **Recherche d’images et de documents** + + * Embeddings textuels (Word2Vec, BERT). + * Embeddings visuels (ResNet, CLIP). + +3. **Détection d’anomalies** + + * Valeurs extrêmes (outliers). + * Détection de fraude. + +--- + +## **Chapitre 7 : Implémentation avec PostgreSQL et pgvector** + +1. **Création d’un type vecteur** + + * `vector(n)`. + * Conversion des données tabulaires en vecteurs. + +2. **Normalisation dans SQL** + + * Moyenne et écart-type avec `AVG` et `STDDEV`. + * Transformation en z-score. + +3. **Indexation** + + * `ivfflat` (batch, nécessite `ANALYZE`). + * `hnsw` (recherche dynamique). + +4. **Requêtes** + + * Recherche de similarité : `ORDER BY v1 <-> v2`. + * Classification par vote majoritaire (k-NN). + +--- + +## **Chapitre 8 : Perspectives et limites** + +1. **Curse of dimensionality** et solutions (réduction dimensionnelle, embeddings spécialisés). +2. **Précision vs performance** (exact vs approximatif). +3. **Perspectives** : + + * Recherche multimodale (texte + image). + * Bases vectorielles distribuées. + * Applications IA générative. + +--- + +## **Conclusion** + +* Les vecteurs permettent d’unifier des données hétérogènes. +* Les mesures de distance et la normalisation sont au cœur de l’analyse. +* L’indexation vectorielle (HNSW, IVF) rend possible des recherches rapides sur des millions d’objets. +* PostgreSQL, via `pgvector`, permet de relier ce monde au SQL traditionnel. + +--- + +## **Exercices finaux** + +1. Créer une base `produits` avec profils nutritionnels. +2. Normaliser les données par z-score. +3. Construire un vecteur par produit. +4. Créer un index HNSW. +5. Classer un nouveau produit (k-NN). +6. Détecter les produits atypiques (outliers). + +--- + +📚 **Références utiles** : + +* Hastie, Tibshirani, Friedman, *The Elements of Statistical Learning*. +* Bishop, *Pattern Recognition and Machine Learning*. +* Les notes de cours "Similarity Search" de Piotr Indyk (MIT). +* Documentation officielle de `pgvector` : [https://github.com/pgvector/pgvector](https://github.com/pgvector/pgvector). + +--- + +👉 Souhaitez-vous que je développe ce plan en **poly de cours complet (texte rédigé, exemples détaillés, schémas)**, ou préférez-vous garder cette structure comme **plan directeur** pour construire vous-même le contenu ? + + +Parfait 👍 Je vais transformer le plan en un **cours rédigé complet**, structuré en chapitres, comme un polycopié universitaire. +On garde un style pédagogique, progressif, avec définitions, théories, exemples et applications. + +--- + +# 📘 Cours complet : Analyse de données vectorielles et recherche de similarité + +--- + +## Introduction générale + +La multiplication des données numériques (textes, images, vidéos, données issues de capteurs ou d’applications métiers) pose un défi majeur : **comment représenter ces données pour les comparer et les analyser efficacement ?** + +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 : + +* rechercher des objets similaires, +* regrouper ou classifier des individus, +* détecter des anomalies ou recommander des produits. + +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). + +--- + +## Chapitre 1 : Fondements mathématiques + +### 1.3 + + + +--- + +## Chapitre 2 : Statistique multivariée + +### 2.1 Moyenne, variance, covariance + +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)$). + +--- + +### 3.2 Malédiction de la dimensionnalité + +Quand la dimension $n$ augmente : + +* les distances entre points tendent à se ressembler, +* les méthodes classiques deviennent inefficaces. + +👉 Nécessite des méthodes adaptées (réduction dimensionnelle, index spécialisés). + +--- + +### 3.3 Mesures adaptées + +* Euclidienne → données continues. +* 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. + +--- + +## Chapitre 6 : Applications + +### 6.1 Recommandation + +Comparer les profils nutritionnels pour recommander des produits proches. + +### 6.2 Recherche multimédia + +Comparer les vecteurs d’images ou de sons. + +### 6.3 Détection d’anomalies + +Identifier des vecteurs très éloignés (fraude, défaut de fabrication). + +--- + +## Chapitre 7 : Implémentation en PostgreSQL avec `pgvector` + +### 7.1 Définir les vecteurs + +```sql +ALTER TABLE produits ADD COLUMN nutrition_vector vector(5); +``` + +### 7.2 Normaliser + +```sql +WITH stats AS ( + SELECT AVG(proteines) AS mu, STDDEV(proteines) AS sigma FROM produits +) +UPDATE produits p +SET nutrition_vector = ARRAY[ + (proteines - mu)/sigma, + (sucre - mu_sucre)/sigma_sucre, + (graisse - mu_graisse)/sigma_graisse, + (sel - mu_sel)/sigma_sel, + (fibres - mu_fibres)/sigma_fibres +]::vector +FROM stats; +``` + +### 7.3 Indexer avec HNSW + +```sql +CREATE INDEX produits_hnsw +ON produits +USING hnsw (nutrition_vector vector_l2_ops); +``` + +### 7.4 Requêtes k-NN + +```sql +SELECT p2.id, p2.nom +FROM produits p1, produits p2 +WHERE p1.id = 42 +ORDER BY p1.nutrition_vector <-> p2.nutrition_vector +LIMIT 5; +``` + +--- + +## Chapitre 8 : Perspectives + +* Recherche multimodale (texte + image). +* Embeddings appris (Word2Vec, BERT, CLIP). +* Bases vectorielles distribuées (Milvus, Pinecone). + +--- + +## Conclusion + +L’analyse vectorielle relie **mathématiques, statistiques et informatique**. +Grâce à des outils comme PostgreSQL + pgvector, on peut manipuler ces techniques directement dans une base relationnelle, ce qui ouvre la voie à des applications concrètes : recommandation, recherche par similarité, détection d’anomalies. + +--- + +## 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. + +--- + +📚 **Bibliographie conseillée** : + +* Hastie, Tibshirani, Friedman – *The Elements of Statistical Learning*. +* Bishop – *Pattern Recognition and Machine Learning*. +* Indyk, Motwani – *Approximate Nearest Neighbor: Towards Removing the Curse of Dimensionality*. +* Documentation [pgvector](https://github.com/pgvector/pgvector). + +--- + +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 ? diff --git a/vecteurs/distance.svg b/vecteurs/distance.svg new file mode 100644 index 0000000..48e86af --- /dev/null +++ b/vecteurs/distance.svg @@ -0,0 +1,648 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +