
降维
|
203
小于
n
时,它比完全的 SVD 快得多:
rnd_pca = PCA(n_components=154, svd_solver="randomized")
X_reduced = rnd_pca.fit_transform(X_train)
默认情况下,svd_solver 实际上设置为 "auto" :如果
m
或
n
大于 500 并且
d
小于
m
或
n
的 80%,则 Scikit-Learn 自动使用随机 PCA 算法,否则它将使用完全的 SVD 方
法。如果要强制 Scikit-Learn 使用完全的SVD,可以将 svd_solver 超参数设置为
"full"。
8.3.9 增量 PCA
前面的 PCA 实现的一个问题是,它们要求整个训练集都放入内存才能运行算法。幸运
的是已经开发了增量
PCA
(IPCA)算法,它们可以使你把训练集划分为多个小批量,并
一次将一个小批量送入 IPCA 算法。这对于大型训练集和在线(即在新实例到来时动态
运行)应用 PCA 很有用。
以下代码将 MNIST 数据集拆分为 100 个小批量(使用 NumPy 的 array_split() 函
数),并将其馈送到 Scikit-Learn 的 IncrementalPCA 类
注 5
,来把 MNIST 数据集的维
度降低到 154(就像之前做的那样)。请注意,你必须在每个小批量中调用 partial_
fit() 方法,而不是在整个训练集中调用 fit() 方法:
1
from sklearn.decomposition ...