选择 eps
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 22 课,共 51 课。
eps 只是一个猜测,观察数据后才能确定。对于“噪声点”中的公园,测量每个点到第 4 个最近邻的距离,并把该点自身也计入,就像 min_samples=4。将距离排序并绘图:
密集的点位置低且平缓,孤立的点则会陡然上升。曲线开始向上弯折的“拐点”是选择 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 会对它们排序。
挑战
中等地震学家希望 DBSCAN 能根据一年的地震数据找出断层线,并将 min_samples=5。选择它的 eps。
- 在
X上拟合NearestNeighbors(n_neighbors=5),并获取每次地震的距离。 - 绘制第 5 近邻距离,并按顺序排序。
- 运行代码并找出拐点。将该值保存在
eps中,使用ax.axhline绘制灰色虚线,然后显示图表。
对于另一个地区,拐点大约在 4 km 处:
Coddy 会描述你的图表,然后使用你的 eps 运行 DBSCAN。
亲手试试
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.neighbors import NearestNeighbors
# 某地区一年内的地震:每个震中的位置以 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)")
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器