Menu
CoddyTech

用 PCA 降维

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

64 个像素超过了这些数字所需的数量。PCA 可以针对方差占比,而不是组件数量:

前 n 个组件保留的数字方差占比曲线先陡后平;90% 处的虚线与曲线在 21 个组件处相交

n_components=0.9 会保留能涵盖 90% 的最少组件:

pca = PCA(n_components=0.9)
X_small = pca.fit_transform(X)
print(pca.n_components_, X_small.shape)

这会输出 21 (1797, 21):数字的三分之一,却是图片的大部分。

这里不使用缩放器:每个像素都占一个单位,像素值从 0 到 16。缩放会把边缘几乎空白的像素放大成完整的特征。

challenge icon

挑战

中等

该缩小扫描图像了。程序会读取要保留的方差占比,例如 0.8。

  1. 分别打印原始像素和缩放后像素在该占比下所需的主成分数量。
  2. 保留所需主成分较少的版本:打印它的名称和降维后数据的形状。

对于 0.6:

Raw pixels: 7 components
Scaled pixels: 11 components
Keep: raw pixels, shape (1797, 7)

从现在开始,项目会保留 80% 的方差。

亲手试试

from sklearn.datasets import load_digits
from sklearn.decomposition import PCA
from sklearn.preprocessing import StandardScaler

# 来自 Look at the Digits:1,797 张扫描图像,每张有 64 个像素,墨迹值从 0 到 16
digits = load_digits()
X = digits.data
y = digits.target

# 要保留的方差比例,例如 0.8
share = float(input())

# 在下方编写代码
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

无监督学习中的所有课

自己练习: Python 在线编译器