Menu
CoddyTech

Choisir eps

Fait partie de la section Apprentissage non supervisé du Journey Machine Learning de Coddy. Leçon 22 sur 51.

eps est une estimation jusqu'à ce que tu observes les données. Pour le parc de Noise Points, mesure la distance de chaque point à son 4e plus proche voisin, en le comptant lui-même, comme avec min_samples=4. Trie et trace le graphique :

Une courbe croissante de 71 distances triées : basse et plate autour de 1 m pour les points de pique-nique, puis un virage brusque à environ 3 m, où une ligne en pointillés indique eps, et une montée raide pour les personnes isolées

Les points regroupés restent bas et à plat ; les points isolés montent en flèche. Le coude, là où la courbe remonte, est une bonne valeur de eps :

from sklearn.neighbors import NearestNeighbors
nn = NearestNeighbors(n_neighbors=4).fit(X)
distances, rows = nn.kneighbors(X)
ax.plot(np.sort(distances[:, -1]))

kneighbors donne à chaque point les distances à ses 4 voisins les plus proches, dans l’ordre du plus proche au plus éloigné, donc la colonne -1 est la 4e. np.sort les classe.

challenge icon

Défi

Moyen

Les sismologues veulent que DBSCAN repère les lignes de faille sous-jacentes à une année de séismes, avec min_samples=5. Choisis son eps.

  1. Ajuste NearestNeighbors(n_neighbors=5) sur X et récupère les distances de chaque séisme.
  2. Trace les distances au 5e plus proche voisin, triées.
  3. Exécute le code et repère le coude. Conserve cette valeur dans eps, trace-la sous forme de ligne grise en pointillés avec ax.axhline, puis affiche le graphique.

Pour une autre région, le coude se situait près de 4 km :

Graphique intitulé Distance jusqu’au 5e séisme le plus proche : une courbe plate près de 2 km pour environ 145 séismes, puis qui grimpe fortement au-delà de 50 km, avec une ligne grise en pointillés à 4 km au niveau du coude

Coddy décrit ton graphique, puis exécute DBSCAN avec ton eps.

Essayez vous-même

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import NearestNeighbors

# Une année de séismes dans une région : chaque épicentre en km
quakes = pd.read_csv("quakes.csv")
X = np.column_stack([quakes["east_km"], quakes["north_km"]])

fig, ax = plt.subplots()
ax.set_title("Distance to the 5th Nearest Quake")
ax.set_xlabel("Quakes, sorted")
ax.set_ylabel("Distance (km)")

# Écrivez votre code ci-dessous
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Apprentissage non supervisé

Entraînez-vous par vous-même : Compilateur Python en ligne