在PCA 中的相对信息丢失一文中,作者在某些时候(在介绍性部分)做了以下陈述:
如果正交矩阵不是先验已知的,但必须从矩阵中收集的一组输入数据向量中估计,PCA 变为非线性运算:
这里,是一个矩阵值函数,它计算旋转数据所需的正交矩阵(例如,使用 QR 算法)。
该陈述与大多数关于 PCA 的陈述形成对比,后者被视为线性变换。
我设计了一个玩具实验来检查线性度(可加性属性): .
import numpy
from sklearn.decomposition import PCA
if __name__ == '__main__':
numpy.random.seed(42)
m = 100
d = 3
X = numpy.random.normal(size = (m, d))
# Center data
X -= numpy.mean(X, axis = 0)
pca = PCA(n_components = d)
pca.fit(X)
Y = pca.transform(X)
# Check linearity, pca(a + b) = pca(a) + pca(b)
for i in range(0, m):
for j in range(0, m):
d = pca.transform([X[i] + X[j]]) - (Y[i] + Y[j])
assert numpy.allclose(d, numpy.array([0.0, 0.0, 0.0]))
表达方式, 在哪里,似乎是零向量,因此我假设变换(PCA)是线性的。
那么我错过了什么,当正交矩阵(主成分的矩阵)从(见上面的报价)?