Menu
CoddyTech

回顾:城市灯光

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

challenge icon

挑战

中等

还记得 DBSCAN 的山谷地图吗?现在由你来制作一张。卫星拍摄了夜晚的山谷照片;把灯光分成城镇,并找出零散的灯光:农场、灯塔和露营车。程序会读取以 km 为单位的 eps。

  1. 使用该 eps 和 min_samples=5 运行 DBSCAN。
  2. 输出城镇数量、零散灯光数量,以及最大城镇的规模。
  3. 绘制地图:每个城镇单独绘制散点,并标记为 town of N lights;零散灯光用灰色的 x 标记,并标记为 lone lights;添加图例并显示地图。

换一个山谷,并将 eps 设为 1.3:

Towns: 3
Lone lights: 10
Biggest town: 77 lights

标题为 Valley at Night 的图表:一个由 77 盏灯组成的长弯形城镇、一个由 47 盏灯组成的圆形城镇和一个由 20 盏灯组成的村庄,各自使用不同颜色;另有 10 盏零散的灯光以灰色 x 标记显示,并附有图例

Coddy 会描述你的地图。然后试试 eps 5:哪些城镇会合并?

亲手试试

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import DBSCAN

# 卫星拍摄的山谷夜景照片:每个光点占一行,位置单位为 km
lights = pd.read_csv("lights.csv")
X = np.column_stack([lights["east_km"], lights["north_km"]])
eps = float(input())

fig, ax = plt.subplots()
ax.set_title("Valley at Night")
ax.set_xlabel("East (km)")
ax.set_ylabel("North (km)")

# 在下方编写你的代码

无监督学习中的所有课

自己练习: Python 在线编译器