PCA 是非线性变换吗?

机器算法验证 主成分分析 Python 降维 线性的 非线性
2022-03-25 19:58:22

PCA 中的相对信息丢失一文中,作者在某些时候(在介绍性部分)做了以下陈述:

如果正交矩阵不是先验已知的,但必须从矩阵中收集的一组输入数据向量中估计X_,PCA 变为非线性运算:

Y_=w_(X_)X_

这里,w_是一个矩阵值函数,它计算旋转数据所需的正交矩阵(例如,使用 QR 算法)。

该陈述与大多数关于 PCA 的陈述形成对比,后者被视为线性变换

我设计了一个玩具实验来检查线性度(可加性属性): f(a+b)=f(a)+f(b).

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]))

表达方式f(a+b)(f(a)+f(b)), 在哪里f=PCA,似乎是零向量,因此我假设变换(PCA)是线性的。

那么我错过了什么,当正交矩阵(主成分的矩阵)从X(见上面的报价)?

1个回答

我认为混淆是由于这里的确切含义是线性或非线性。

使用您的报价符号,操作w(X)映射数据矩阵X进入投影仪Pk在第一个k的主轴X. 让我们完全清楚这里的符号;为简单起见,让我们修复k=1并假设X居中。然后XRn×pPPpRp×p, 其中由Pp我的意思是形式的所有矩阵的空间P=uuuRpu=1.

现在:

  • 手术w:Rn×pPp是非线性的。
  • 手术P:RpR是线性的。

引文谈到了w()功能; 它将数据矩阵转换为投影算子。它是非线性的。您的脚本调查P()功能; 给定一个固定的数据集,它将高维向量转换为低维 PCA 投影它是线性的。

所以w()是到线性投影的非线性映射。

没有矛盾。