由于最近刚好由于要求写了一下PCA
其实还是很简单的
本篇介绍一个jacobi的方法
令X样本集,行向量为样本,列向量为特征
先对X的特征进行中心化, 即每一列特征减去其期望(均值)
奇异值分解
X = Un,n Σn,m VTm,m
选取奇异值最大的 k 个主成分,即
X ≈ Un,k Σk,k VTk,m
<=>
X Vm,k ≈ Un,k Σk,k其中Un,k Σk,k 即为X的低维空间投影
Vm,k为降维矩阵
至此PCA过程就结束了特征值分解与奇异值分解
XTX = P λ PT = V ΣTΣ VT
其中P是正交阵, λ 为特征值对角正阵, 特征值从大到小排序
所以只需令P = V , ΣTΣ = λ 即可
再用U = ΣT V X 即可求出 U计算特征向量
基本想法是通过不断使用givens变换 (初等旋转变换) 将X的非对角元素变为0
P = ∏i Pi (Pi 是givens变换)
PT XTX P = λ
其中Pi中未知量的选取见下图
接着直至收敛
接着将λ中的特征值从大到小排序,P中的特征向量依据λ的顺序进行排序
从而得到了Vend 很简单hh 从头至尾就是一些矩阵乘法运算
givens和X的乘法只涉及到两行两列的元素故为O(n)的复杂度