Menu
CoddyTech

Scelta di eps

Fa parte della sezione Apprendimento non supervisionato del percorso Machine Learning di Coddy. Lezione 22 di 51.

eps è un valore ipotetico finché non lo osservi. Per il parco di Noise Points, misura la distanza di ogni punto dal suo 4º vicino più prossimo, contando il punto stesso, come con min_samples=4. Ordina e traccia il grafico:

Una curva crescente di 71 distanze ordinate: bassa e piatta vicino a 1 m per i punti del picnic, poi una svolta brusca intorno a 3 m, dove una linea tratteggiata indica eps, e una salita ripida per le persone sole

I punti raggruppati sono bassi e piatti; i punti isolati salgono. Il gomito, dove la curva si impenna, è un buon 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 restituisce le distanze di ogni punto dai suoi 4 vicini più prossimi, dal più vicino al più lontano, quindi la colonna -1 è la 4ª. np.sort le ordina.

challenge icon

Sfida

Medio

I sismologi vogliono che DBSCAN trovi le linee di faglia sotto un anno di terremoti, con min_samples=5. Scegli il suo eps.

  1. Adatta NearestNeighbors(n_neighbors=5) a X e ottieni le distanze di ogni terremoto.
  2. Traccia le distanze dal 5º vicino, ordinate.
  3. Esegui il codice e individua il gomito. Mantieni quel valore in eps, traccialo come linea grigia tratteggiata con ax.axhline e mostra il grafico.

Per un'altra regione, il gomito si trovava vicino a 4 km:

Un grafico intitolato Distanza dal 5º terremoto più vicino: una curva piatta vicino a 2 km per circa 145 terremoti, poi in ripida salita oltre i 50 km, con una linea grigia tratteggiata a 4 km in corrispondenza del gomito

Coddy descrive il tuo grafico, poi esegue DBSCAN con il tuo eps.

Provalo tu

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 iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Apprendimento non supervisionato

Esercitati da solo: Compilatore Python online