惯性
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 6 课,共 51 课。
本章介绍如何选择 k。学完后,你将为一家面包店的配送选择 k,并绘制区域图:
首先,看一个分数。惯性会累加每个点到其中心的距离的平方:点越靠近中心,这个值就越小。
KMeans 会将它保存在 inertia_ 中。对于 180 个苹果:
for k in [1, 2, 3, 4]:
km = KMeans(n_clusters=k, n_init=10, random_state=0)
km.fit(X)
print(k, round(km.inertia_))这会输出:
1 1718
2 752
3 230
4 196中心越多,辐条越短:随着 k 增大,惯性总会减小。每个点都有一个中心时,惯性为 0,所以最小并不代表最好。
挑战
简单一家陶器作坊把花瓶装进几种尺寸的盒子里。每个花瓶都会选最接近的尺寸;惯性衡量它们的匹配程度。程序读取 budget,也就是这家作坊能接受的最大不匹配程度。
- 依次尝试 k = 1、2、3 等:在
vases上拟合 KMeans,并打印每个 k 对应的惯性,四舍五入后显示。 - 当惯性首次不超过预算时停止,并打印这个 k。
对于另一家陶器作坊:
k = 1, inertia 15120
k = 2, inertia 4811
k = 3, inertia 1290
Box sizes needed: 3亲手试试
import numpy as np
from sklearn.cluster import KMeans
# 不要修改下面的代码
rng = np.random.default_rng(8)
# 四种花瓶:典型高度和宽度(单位:厘米),以及各自的数量
kinds = [(15, 8, 25), (38, 13, 25), (22, 22, 20), (58, 26, 10)]
parts = []
for h, w, n in kinds:
parts.append(np.column_stack([rng.normal(h, 2.5, n), rng.normal(w, 2, n)]))
# 80 个花瓶,每行一个:高度和宽度(单位:厘米)
vases = np.round(np.concatenate(parts), 1)
# 陶器店能接受的最大不匹配程度,用惯性衡量
budget = int(input())
# 在下面编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器