Menu
CoddyTech

噪声点

本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 21 课,共 51 课。

并不是每个点都属于某个群体。DBSCAN 会将这些点标记为 -1:噪声。在公园里,野餐的人群是群体,独自坐着的人则是噪声:

公园地图上有四群紧密聚集的彩色圆点,分别有 16、12、20 和 14 个;还有 9 个独自一人的灰色 x 标记散落在各群之间

两种都要计数:

labels = DBSCAN(eps=3, min_samples=4).fit_predict(X)
print((labels == -1).sum())
print(labels.max() + 1)

这会打印 9 和 4。噪声是 -1,所以最大的标签仍会统计人群。

噪声并不代表失败。那些孤立的点往往才是故事所在:一位偏离路线的徒步者,或一个与其他读数不同的读数。

challenge icon

挑战

中等

驯鹿戴着 GPS 项圈。鹿群是聚集在一起的驯鹿;独自行动的驯鹿可能迷路或受伤,所以牧鹿人会先去查看它们。入门代码会运行 DBSCAN,并从输入中读取 min_samples。

  1. 打印鹿群的数量。
  2. 打印独自行动的驯鹿数量。
  3. 将它们的标签作为列表打印出来,以便查看。

对于另一位牧鹿人的项圈:

Herds: 2
Lone reindeer: 3
Check on: ['R011', 'R027', 'R040']

试试更大的 min_samples:更严格的群体规则会让更多驯鹿独自行动。

亲手试试

import numpy as np
import pandas as pd
from sklearn.cluster import DBSCAN

# 黎明时的 GPS 项圈数据:每只驯鹿的标签和位置,单位为 km
reindeer = pd.read_csv("reindeer.csv")
X = np.column_stack([reindeer["east_km"], reindeer["north_km"]])
min_samples = int(input())
labels = DBSCAN(eps=0.6, min_samples=min_samples).fit_predict(X)

# 在下方编写你的代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

无监督学习中的所有课

自己练习: Python 在线编译器