压缩与重建
本课属于 Coddy Machine Learning 学习旅程的“无监督学习”单元。第 31 课,共 51 课。
扫描的成分得分就像一个配方:从平均扫描图像开始,然后将每种模式乘以对应的得分,再把结果加起来。inverse_transform会按这个配方还原出 64 个像素:
pca = PCA(n_components=10).fit(X)
codes = pca.transform(X) # 每次扫描得到 10 个数字
rebuilt = pca.inverse_transform(codes) # 重新得到 64 个像素下面是用越来越多的数字重建的三次扫描:
少量数字会让平均数字附近变得模糊;每增加一个成分,就能还原更多细节。用 20 个数字而不是 64 个数字,已经能清晰辨认了。
挑战
中等智能笔会将每个数字作为 k 个 PCA 数字无线传输,由程序读取。哪些信息丢失了?
- 在
X上用k个成分拟合 PCA。压缩所有扫描结果,然后将它们重建到rebuilt中。 - 打印下面的内容;误差是与
X的平均绝对差。 - 在
axs[0]上绘制最新扫描结果X[-1],并在axs[1]上绘制其重建结果,两者都使用gray_r。显示图像。
对于 7:
Sent: 7 numbers per scan instead of 64
Average pixel error: 1.739并绘制出以下图像。随后,Coddy 会描述你的图像面板:
亲手试试
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
# 共有 1,797 次扫描,每次扫描包含 64 个像素;笔的最新扫描结果位于最后一行
digits = load_digits()
X = digits.data
k = int(input())
# 不要修改下面的代码行
fig, axs = plt.subplots(1, 2)
axs[0].set_title("Scan")
axs[1].set_title(f"Rebuilt from {k} numbers")
# 在下面编写你的代码
这节课包含一个小测验。开始学习即可作答,并记录你的进度。
无监督学习中的所有课
自己练习: Python 在线编译器