Menu
CoddyTech

Elegir eps

Parte de la sección Aprendizaje no supervisado del Journey de Machine Learning de Coddy. Lección 22 de 51.

eps es una suposición hasta que observes los datos. Para el parque de Noise Points, mide la distancia de cada punto a su 4.º vecino más cercano, contándose a sí mismo, como en min_samples=4. Ordena y representa los datos:

Una curva ascendente de 71 distancias ordenadas: baja y plana cerca de 1 m para los puntos del pícnic, luego un giro brusco en torno a 3 m, donde una línea discontinua marca eps, y un ascenso pronunciado para las personas que están solas

Los puntos agrupados se mantienen bajos y planos; los puntos aislados se disparan hacia arriba. La rodilla, donde la curva empieza a subir, es un buen 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 da las distancias de cada punto a sus 4 vecinos más cercanos, empezando por el más cercano, así que la columna -1 corresponde al 4.º. np.sort los ordena.

challenge icon

Desafío

Intermedio

Los sismólogos quieren que DBSCAN encuentre las líneas de falla bajo un año de terremotos, con min_samples=5. Elige su eps.

  1. Ajusta NearestNeighbors(n_neighbors=5) a X y obtén las distancias de cada terremoto.
  2. Representa gráficamente las distancias al quinto vecino más cercano, ordenadas.
  3. Ejecútalo y observa el punto de inflexión. Guarda ese valor en eps, dibújalo como una línea gris discontinua con ax.axhline y muestra el gráfico.

En otra región, el punto de inflexión estaba cerca de 4 km:

Un gráfico titulado Distance to the 5th Nearest Quake: una curva plana cerca de 2 km para unos 145 terremotos, que luego asciende pronunciadamente y supera los 50 km, con una línea gris discontinua a 4 km en el punto de inflexión

Coddy describe tu gráfico y luego ejecuta DBSCAN con tu eps.

Pruébalo tú mismo

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

# Un año de terremotos en una región: cada epicentro 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)")

# Escribe tu código a continuación
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Aprendizaje no supervisado

Practica por tu cuenta: Compilador de Python online