对数字进行聚类
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 45 课,共 51 课。
现在开始探索。让 k-means 把这组由 13 个数字组成的扫描数据分成 10 组,每组对应一个你希望它找出的数字。它看不到任何标签:
km = KMeans(n_clusters=10, n_init=10, random_state=0).fit(X_small)中心位于 k-means 运行的空间,也就是 PCA 空间中:它由 13 个数字组成,不是一张图片。pca.inverse_transform 会重建它的 64 个像素:
value_counts() 会按从大到小列出各个簇,因此中心点画廊看起来就像是在对扫描图像进行人口普查。
挑战
中等初始内容包含这些扫描图和 X_small,也就是它们用 13 个数表示的版本。
- 用 k-means 在
X_small中找到 10 个簇。 - 重建每个中心的 64 个像素。
- 绘制一个 2 行 5 列的画廊,按簇大小从大到小排列:每个中心显示为一张 8 × 8 的
gray_r图片,并用簇大小作为标题,例如120 scans。整理布局并显示。
如果有 5 个簇,结果会像这样:
你的结果有 10 个簇。Coddy 会描述每张图表。k-means 自动找出了哪些数字?
亲手试试
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
# 来自“观察数字”:1,797 张扫描图,每张有 64 个像素,墨迹值从 0 到 16
digits = load_digits()
X = digits.data
y = digits.target
# 来自“用 PCA 缩减数据”:每张扫描图用 13 个数字保留 80% 的方差
pca = PCA(n_components=0.8)
X_small = pca.fit_transform(X)
# 在下方编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器