# DBSCAN

DBSCAN (density-based spatial clustering of applications with noise) est un algorithme de partitionnement de données proposé en 1996 par Martin Ester, Hans-Peter Kriegel, Jörg Sander et Xiaowei Xu. Il s'agit d'un algorithme fondé sur la densité dans la mesure qui s’appuie sur la densité estimée des clusters pour effectuer le partitionnement.

## Principe général

L'algorithme DBSCAN utilise 2 paramètres : la distance $\epsilon$ et le nombre minimum de points $MinPts$ devant se trouver dans un rayon $\epsilon$ pour que ces points soient considérés comme un cluster. Les paramètres d'entrées sont donc une estimation de la densité de points des clusters. L'idée de base de l'algorithme est, pour un point donné, de récupérer son $\epsilon$-voisinage et de vérifier qu'il contient bien $MinPts$ points ou plus. Ce point est alors considéré comme faisant partie d'un cluster. On parcourt ensuite l'$\epsilon$-voisinage de proche en proche afin de trouver l'ensemble des points du cluster.

## Structure des solutions

Les points du jeu de données sont séparés en 3 types :
* Les points centraux (core points)
* Les points frontières (border points)
* Les points aberrants (noise points)

### Les points centraux

Un point du jeu de données est dit central si :
* Son voisinage est dense
Ces points forment des composantes connexes indépendantes de l'ordre d'exploration du jeu de données.

### Les points frontières

Un point du jeu de données est dit frontière si :
* Ce n'est pas un point central
* Il appartient au voisinage d'un point central
Ces points viennent s'agréger autour des composantes connexes pour former des groupes. Ces groupes sont couramment appelées par leur nom anglais : Clusters.
Contrairement aux composantes connexes, la formation des clusters est dépendante de l'ordre d'exploration du jeu de données. En effet un point frontière est assigné au premier cluster rencontré lors de l'étape d'expansion. En plus de l'ordre d'exploration, ces points sont sensibles aux différentes implémentations de l'algorithme DBSCAN.

### Les points aberrants

Un point du jeu de données est dit aberrant si :
* Ce n'est pas un point central
* Ce n'est pas un point frontière
Ces points sont donc tous les autres points du jeu de données.
Attention, le nom donné à ces points peut être trompeur car leur désignation dépend des paramètres choisis.

## Concepts mathématiques sous-jacent
### Voisinage d'un point

La notion de voisinage est le concept élémentaire à la base de la méthode DBSCAN. Il permet de définir mathématiquement les voisinages denses qui sont utilisés pour la localisation des points centraux et l'expansion des clusters.

#### Distance entre points

En mathématiques, on appelle distance sur un ensemble E toute application d définie sur le produit E$^2$ = E×E et à valeurs dans l'ensemble ℝ$^+$ des réels positifs,
$d:E\times E\to \mathbb {R} ^{+}$
vérifiant les propriétés suivantes
| Nom | Propriété |
| symétrie | $\forall (a,b)\in E^{2},\ d(a,b)=d(b,a)$ |
| séparation | $\forall (a,b)\in E^{2},\ d(a,b)=0\Leftrightarrow a=b$ |
| inégalité triangulaire | $\forall (a,b,c)\in E^{3},\ d(a,c)\leq d(a,b)+d(b,c)$ |
Le choix de la distance entre points est un paramètre implicite à la méthode DBSCAN.
Dans le cas de DBSCAN, c'est communément la distance euclidienne qui est utilisée.

#### Boule ouverte de rayon de epsilon

Dans l'espace usuel comme dans n'importe quel espace métrique $(E,d)$ :
La boule ouverte est l'ensemble $B(p,\epsilon )\,$ des points $M$ de l'espace $E$ dont la distance au point $p$ est strictement inférieure à $\epsilon$ :
    $B(p,\epsilon )=\left\{M\in E\,\mid \,d(M,p)<\epsilon \right\}$
Le point $p$ est alors appelé centre de la boule ouverte $B(p,\epsilon )\,$et $\epsilon$ est appelé le rayon de la boule ouverte $B(p,\epsilon )\,$.
Les caractéristiques des boules dépendent de deux éléments :
* La forme des boules est liée à la distance $d$ (paramètre implicite à DBSCAN).
* L'espace couvert dépend du rayon $\epsilon$ choisie (paramètre explicite à DBSCAN).
Ci contre une boule ouverte de centre le point $p$ et de rayon $\epsilon$ est représentée dans un espace à deux dimensions pour une distance $d$ euclidienne. La surface bleu représente la boule ouverte $B(p,\epsilon )\,$: Celle-ci correspond à la zone de recherche des voisins pour l'algorithme DBSCAN.

#### Epsilon-voisinage

L'$\epsilon$-voisinage $V_{\epsilon }(p)$ d'un point $p$, est l'ensemble des points $q$ du jeu de données $D$ situés dans la boule ouverte centrée en $p$ et de rayon $\epsilon$ :
    $V_{\epsilon }(p)=\left\{q\in D\,\mid \,d(q,p)<\epsilon \right\}$
Les points du jeu de données sélectionnés reposent sur les boules ouvertes et sont donc dépendants des paramètres suivants :
* La distance $d$ entre les points $p$ et $q$
* Le rayon de recherche $\epsilon$ autour du point $p$
Ci-contre un $\epsilon$-voisinage du point $p$ a été représenté dans un espace de dimension 2 avec une distance euclidienne. Les points rouges sont les points $q$ du jeu de données $D$ qui appartiennent à l' $\epsilon$-voisinage du point $p$, et les points de couleur indigo représentent les points $q$ du jeu de données $D$ qui n'appartiennent pas à l' $\epsilon$-voisinage du point $p$. Pour l'algorithme DBSCAN, c'est le nombre de points rouges qui est important.

#### Epsilon-voisinage dense

Un $\epsilon$-voisinage $V_{\epsilon }(p)$ est dit dense si son cardinal est supérieur ou égal à $minPts$.
    $\mid V_{\epsilon }(p)\mid \geqslant minPts$
Cette définition est la première qui dépend des 3 paramètres de DBSCAN :
* Le nombre minimum de points $minPts$ pour qu'un voisinage soit désigné dense.
* Le rayon du voisinage $\epsilon$ autour du point $p$ considéré.
* La distance $d$ entre points.
En reprenant l'illustration précédente, $\epsilon$ est fixé. Si $minPts$ est fixé à 3 points alors le voisinage considéré est clairement dense. À l’inverse si $minPts$ est fixé à 50 points alors le voisinage n'est clairement pas dense.

### Relations basées sur la densité

Les relations binaires qui suivent sont utilisées pour effectuer des démonstrations sur la méthode DBSCAN, et plus généralement en apprentissage non supervisé basé sur la densité.

#### Directement accessible par densité

Un point $q$ du jeu de données $D$ est directement accessible par densité depuis un autre point $p$ si :
* $V_{\epsilon }(p)$ est dense
* $q\in V_{\epsilon }(p)$
Autrement dit, les points directement accessible par densité sont les points d'un voisinage dense.
Une telle relation est graphiquement représentée par un flèche qui part du point $p$ vers le point $q$.

#### Accessible par densité

Un point $q$ du jeu de données $D$ est accessible par densité depuis un autre point $p$ s'il existe une séquence ordonnée de points $(p_{1},p_{2},...,p_{n})$ tel que :
* $p_{1}=p$
* $p_{i+1}$ est directement accessible par densité depuis $p_{i}$
* $p_{n}=q$
Un point $q$ est accessible par densité depuis un autre points $p$ s'il existe un chemin fléché vers de $p$ vers $q$.

#### Densément connecté

Un point $q$ du jeu de données $D$ est densément connecté à un autre point $p$ si :
* $o\in D$
* $p$ est accessible par densité depuis $o$
* $q$ est accessible par densité depuis $o$
Un point $q$ et un point $p$ sont densément connecté s'il existe deux chemins fléché qui partent d'un même point $o$ pour aller respectivement vers les points $p$ et $q$.

## Estimation des paramètres

L'estimation des paramètres $\epsilon$ et $MinPts$ n'est pas un problème facile, car ces deux valeurs sont intrinsèquement liées à la topologie de l'espace à partitionner. Une trop faible valeur de $\epsilon$ et/ou une trop grande valeur de $MinPts$ peuvent empêcher l'algorithme de propager les clusters. À l'inverse, une trop grande valeur pour $\epsilon$ et/ou une trop faible valeur pour $MinPts$ peuvent conduire l'algorithme à ne renvoyer que du bruit. Une heuristique permettant de déterminer conjointement $\epsilon$ et $MinPts$ pour un certain espace pourrait être donnée par :
* $\epsilon$ : calculer pour chaque point de l'espace la distance à son plus proche voisin. Prendre $\epsilon$ tel qu'une part « suffisamment grande » des points aient une distance à son plus proche voisin inférieure à $\epsilon$;
* $MinPts$ : calculer pour chaque point le nombre de ses voisins dans un rayon de taille $\epsilon$ (la taille de son $\epsilon$-voisinage). Prendre $MinPts$ tel qu'une part « suffisamment grande » des points aient plus de $MinPts$ points dans leur $\epsilon$-voisinage.
Par « suffisamment grand » on entend, par exemple, $95$% ou $90$% des points.
Une autre heuristique pour les cas en 2D (définie dans l'article original de DBSCAN) consiste à fixer la valeur de $MinPts$ à 4, et à tracer la courbe (triée dans l'ordre décroissant) des distances de chaque point à leur 4ème plus proche voisin. On fixe alors $\epsilon$ à la valeur du "point seuil" repéré sur le graphe. Si ce seuil n'est pas clairement identifiable, l'utilisateur peut le fixer en estimant le pourcentage de bruit dans le jeu de données : $\epsilon$ est donc tel que seuls les termes de bruit ont une distance à leur 4ème plus proche voisin plus grande que $\epsilon$.

## Avantages et inconvénients

L'algorithme est très simple et ne nécessite pas qu'on lui précise le nombre de clusters à trouver. Il est capable de gérer les données aberrantes en les éliminant du processus de partitionnement. Les clusters n'ont pas pour obligation d'être linéairement séparables (tout comme pour l'algorithme des k-moyennes par exemple). Cependant, il n'est pas capable de gérer des clusters de densités différentes.