Même si les [Large Language Models (LLM)](https://datascientest.com/large-language-models-tout-savoir) ont démocratisé ce genre d'outil, l'apprentissage automatique ne date pas d’hier, puisque le terme de *machine learning* a été utilisé pour la première fois par l’informaticien américain *Arthur Samuel* en 1959. Puis, début 2000, l'arrivée des *Big Datas* va contribuer à l'explosion de ce genre de modèle.
### Exemple de Problème de classification avec K-NN
L'algorithme des *k plus proches voisins* permet de résoudre certains problèmes, notamment ceux qui proposent de classer des données et élèments.
Il s'agit d'une méthode de raisonnement à partir de cas connus : ce modèle va aider à prendre des décisions en recherchant un ou des cas similaires déjà résolus.
Attention, KNN est un algorithme dit ***paresseux*** (*lazy learning*) : contrairement à d'autres algorithmes de classification, il n'y a pas de phase d'entraînement où un modèle est construit. L'échantillon d'apprentissage est simplement mémorisé, et tout le travail de calcul se fait au moment de la prédiction.
Il s'agit d'une représentation simplifiée de la réalité en vue de réaliser un traitement avec un ordinateur.
***Dans ce cas, notre modèle = échantillon d’apprentissage + fonction de distance + fonction de choix de la classe en fonction des classes des voisins les plus proches.***
### Pour quels types de variables ?
- Qualitatives
- Quantitatives
------------
### Exemple de l'implémentation de l'algorithme des k plus proches voisins
Pour simplifier, imaginons que les Pokemons ne possèdent que deux caractéristiques : leurs points de vie et leur valeur d'attaque. On peut prendre deux types pour commencer.
- Nous pouvons utiliser cet échantillon afin de prédire la classification d'un Pokémon mystère, selon ses points de vie et sa valeur d'attaque, en représentant ces données sous la forme d'un graphique.
> **Comment choisir k ?** On choisit généralement k impair (pour éviter les égalités lors du vote majoritaire) et une valeur raisonnable comme √n (racine carrée du nombre d'échantillons) ou entre 5 et 7 pour de petits échantillons.
### Application concrète : Google compresse ses modèles IA avec KNN
Vous venez d'apprendre à trouver le voisin le plus proche d'un point dans un espace de coordonnées. Google utilise exactement ce principe pour réduire la mémoire nécessaire à ses modèles d'IA (comme Gemini).
**Le problème :** un modèle d'IA contient des milliards de paramètres — des vecteurs de nombres décimaux très précis. Les stocker tels quels nécessite des dizaines de gigaoctets de RAM.
**La solution (quantification vectorielle) :**
1. On construit un petit **dictionnaire** de vecteurs représentatifs (quelques milliers d'entrées)
2. Pour chaque vecteur du modèle, on cherche lequel dans le dictionnaire est le **plus proche** — en calculant une distance, exactement comme en KNN
3. On stocke uniquement **l'indice** de ce voisin le plus proche, au lieu du vecteur complet
C'est du KNN avec **K = 1**, appliqué non pas à une classification, mais à une **compression**. Le gain en mémoire peut atteindre un facteur 8.
```python
import math
vecteur_du_modele = [0.83, -1.47, 0.21]
dictionnaire = [
[1.0, -1.5, 0.0], # indice 0
[0.8, -1.4, 0.2], # indice 1
[-0.5, 0.3, 1.1], # indice 2
]
def distance(a, b):
return math.sqrt(sum((x - y) ** 2 for x, y in zip(a, b)))
# On cherche le plus proche voisin dans le dictionnaire (K=1)
L'algorithme des k plus proches voisins a pour objectif d'identifier les voisins les plus proches d'un point de requête donné, afin d'attribuer une classe à ce point
<arel="license"href="http://creativecommons.org/licenses/by-nc-sa/4.0/"><imgalt="Licence Creative Commons"style="border-width:0"src="https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png"/></a><br/>Ce cours est mis à disposition selon les termes de la <arel="license"href="http://creativecommons.org/licenses/by-nc-sa/4.0/">Licence Creative Commons Attribution - Pas d’Utilisation Commerciale - Partage dans les Mêmes Conditions 4.0 International</a>.