Menu
CoddyTech

回顾:配送区域

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

challenge icon

挑战

简单

还记得打开本章时看到的区域地图吗?现在画一张属于你的地图。某家面包店的货车要服务 150 个停靠点,而 stops.csv 中的东向距离以 km 为单位,北向距离以米为单位。

  1. 缩放两列数据。
  2. 对从 2 到 7 的每个 k,在缩放后的数据行上拟合 KMeans;输出它的惯性(保留 1 位小数)和轮廓系数(保留 3 位小数)。然后输出轮廓系数最高的 k。
  3. 用实际单位绘制该 k 对应的区域:每个区域的停靠点都要标出数量,例如 50 stops;在每个区域的均值处标出黑色星号,并添加图例。

另一个城市的结果:

k = 2: inertia 109.5, silhouette 0.535
k = 3: inertia 22.8, silhouette 0.737
k = 4: inertia 18.3, silhouette 0.597
k = 5: inertia 14.5, silhouette 0.443
k = 6: inertia 12.7, silhouette 0.368
k = 7: inertia 11.2, silhouette 0.364
Zones: 3

以及它的地图:

标题为 Delivery Zones 的地图,横轴为东向距离(km),纵轴为北向距离(米):有三个停靠点区域,左下方 45 个,右上方 40 个,右下方 25 个;每个区域中间都有一个黑色星号,图例以停靠点数量标出各个区域

然后 Coddy 会描述你的地图。

亲手试试

import pandas as pd
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans
from sklearn.preprocessing import StandardScaler
from sklearn.metrics import silhouette_score

# 每个配送站点占一行:向东距离以 km 为单位,向北距离以米为单位(旧系统使用的单位)
stops = pd.read_csv("stops.csv")
X = stops[["east_km", "north_m"]]

fig, ax = plt.subplots()
ax.set_title("Delivery Zones")
ax.set_xlabel("East (km)")
ax.set_ylabel("North (m)")

# 在下方编写你的代码

无监督学习中的所有课

自己练习: Python 在线编译器