Menu
CoddyTech

Выбор eps

Часть раздела Обучение без учителя путешествия по Machine Learning на Coddy. Урок 22 из 51.

eps — это предположение, пока ты не посмотришь. Для парка из упражнения Noise Points измерь расстояние от каждой точки до её 4-го ближайшего соседа, считая саму точку, как при min_samples=4. Отсортируй и построй график:

Растущая кривая из 71 отсортированного расстояния: для точек места для пикника значения низкие и почти не меняются, около 1 м, затем примерно на 3 м происходит резкий поворот, где пунктирная линия отмечает eps, а дальше расстояние стремительно растёт для людей, пришедших в одиночку

Скопления точек располагаются низко и плоско; одиночные точки резко поднимаются вверх. Колено, где кривая поворачивает вверх, — хороший вариант для 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 возвращает расстояния от каждой точки до 4 ближайших соседей в порядке от ближайшего, поэтому столбец -1 — это 4-й сосед. np.sort упорядочивает их.

challenge icon

Задание

Средне

Сейсмологи хотят, чтобы DBSCAN нашёл линии разломов за год землетрясений, используя min_samples=5. Выбери значение eps.

  1. Обучи NearestNeighbors(n_neighbors=5) на X и получи расстояния для каждого землетрясения.
  2. Построй график расстояний до 5-го ближайшего соседа, отсортированных по возрастанию.
  3. Запусти код и найди колено графика. Сохрани это значение в eps, проведи на графике пунктирную серую линию с помощью ax.axhline и покажи график.

Для другого региона колено находилось примерно на 4 км:

График с заголовком «Расстояние до 5-го ближайшего землетрясения»: кривая остаётся почти плоской на уровне около 2 км для примерно 145 землетрясений, затем резко поднимается выше 50 км; в точке колена проходит пунктирная серая линия на уровне 4 км

Coddy опишет твой график, а затем запустит DBSCAN с выбранным тобой значением eps.

Попробуйте сами

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

# Землетрясения за год в одном регионе: координаты каждого эпицентра в км
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)")

# Напишите свой код ниже
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Обучение без учителя

Потренируйтесь самостоятельно: Онлайн-компилятор Python