Menu
CoddyTech

Escolhendo eps

Parte da seção Aprendizado não supervisionado do Journey de Machine Learning da Coddy. Lição 22 de 51.

eps é uma estimativa até você observar os dados. Para o parque de Noise Points, meça a distância de cada ponto até seu 4º vizinho mais próximo, contando o próprio ponto, como em min_samples=4. Ordene e faça o gráfico:

Uma curva crescente de 71 distâncias ordenadas: baixa e quase plana perto de 1 m para os pontos do piquenique, depois uma virada acentuada em cerca de 3 m, onde uma linha tracejada marca eps, e uma subida íngreme para as pessoas sozinhas

Os pontos agrupados ficam baixos e planos; os pontos isolados disparam para cima. O cotovelo, onde a curva começa a subir, é um bom valor 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 fornece as distâncias de cada ponto aos seus 4 vizinhos mais próximos, em ordem crescente, então a coluna -1 é a 4ª. np.sort os ordena.

challenge icon

Desafio

Médio

Os sismólogos querem que o DBSCAN encontre as linhas de falha em um ano de terremotos, com min_samples=5. Escolha seu eps.

  1. Ajuste NearestNeighbors(n_neighbors=5) em X e obtenha as distâncias de cada terremoto.
  2. Plote as distâncias até o 5º vizinho mais próximo, em ordem crescente.
  3. Execute e identifique o cotovelo. Mantenha esse valor em eps, desenhe-o como uma linha cinza tracejada com ax.axhline e exiba o gráfico.

Para outra região, o cotovelo ficou perto de 4 km:

Um gráfico intitulado Distância até o 5º terremoto mais próximo: uma curva plana perto de 2 km para cerca de 145 terremotos, depois subindo acentuadamente até passar de 50 km, com uma linha cinza tracejada em 4 km no cotovelo

O Coddy descreve seu gráfico e, em seguida, executa o DBSCAN com seu eps.

Experimente você mesmo

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

# Um ano de terremotos em uma região: cada epicentro em 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)")

# Escreva seu código abaixo
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Aprendizado não supervisionado

Pratique por conta própria: Compilador de Python online