原始数据通常具有较高的维数导致维数灾难,通过降维(Dimensionality reduction)可以消除数据冗余与数据噪声,降低算法的计算开销,使得数据更加易用,结果更加易懂。
1. 主成分分析
主成分分析(PCA,Principal Component Analysis)将数据从原来的坐标系转换到新的坐标系,新坐标系的选择由数据本身决定。
1.1 问题定义
n维正交空间中,坐标系Wn={w1,w2,...,wn},其中w是标准正交基,即∣∣w∣∣2=1,wiTwj=0。
m个样本数据(x(1),x(2),...,x(m)),i=1∑mx(i)=0(已中心化)。
其中x(i)=(x1(i),x2(i),...,xn(i))T,i=1,2,...,m
将m个数据的维度从n维降到n′维(通常由用户指定),新的坐标系W={w1,w2,...,wn′},
样本点x(i)在新的n′维坐标系中投影:
z(i)=(z1(i),z2(i),...,zn′(i))T,i=1,2,...,m其中zj(i)=wjTx(i),i=1,2,...,m,j=1,2,...,n′
是xi在低维坐标系中第j维的坐标。
使用zi恢复原始数据xi,则得到的恢复数据
x(i)=j=1∑n′zj(i)wj=Wz(i)
1.2 优化目标
降维相当于使用一个超平面对样本进行表达,该超平面具有以下性质
- 最近重构性:样本点到这个超平面距离足够近
- 最大可分性:样本点在这个超平面上的投影尽可能分开
(1)基于最小投影距离
希望m个n′维的数据集尽可能的代表原始数据集,即数据从n维降到n′维的损失尽可能小,优化目标为
mini=1∑m∣∣x(i)−x(i)∣∣22
i=1∑m∣∣x(i)−x(i)∣∣22=i=1∑m∣∣Wz(i)−x(i)∣∣22=−tr(WTXXTW)+i=1∑mx(i)Tx(i) 由于i=1∑mx(i)x(i)T是数据集的协方差矩阵,为常量,优化目标等价于:
Wmin−tr(WTXXTW)s.t.WTW=I
(2)基于最大投影方差
对于任意一个样本x(i),在新的坐标系中的投影为WTx(i),在新坐标系中的投影方差为WTx(i)x(i)TW,
要使所有的样本的投影方差和最大,也就是最大化i=1∑mWTx(i)x(i)TW的迹,即:
Wmaxtr(WTXXTW)s.t.WTW=I
可以看出最近重构性等价于最大可分性。
1.3 问题求解
使用拉格朗日乘子法,引入拉格朗日函数J(W)=−tr(WTXXTW+λ(WTW−I))
对W求导,令导数等于0得,XXTW=λW
W为XXT的n′个特征向量组成的矩阵,而λ为XXT的若干特征值组成的矩阵,特征值在主对角线上,其余位置为0。将数据集从n维降到n′维时,需要找到最大的n′个特征值对应的特征向量。
对协方差矩阵XXT进行特征值分解,将求得的特征值排序:
λ1≥λ2≥...≥λn取前n′个特征值对应的特征向量构成解
W∗=(w1,w2,...wn′)
实践中,一般对X进行奇异值分解代替协方差矩阵的特征值分解。
2. SVD
奇异值分解(SVD,Singular Value Decomposition)是以用于降维算法中的特征分解,还可以用于推荐系统,以及自然语言处理等领域,是很多机器学习算法的基石。
2.1 特征分解
A是一个n阶矩阵,若λ和n维非零向量x满足:Ax=λx则λ是矩阵A的一个特征值,x是矩阵A对应特征值λ的特征向量。
∣λE−A∣称为A的特征多项式,当特征多项式等于0的时候,称为A的特征方程,特征方程是一个齐次线性方程组,求解特征值的过程就是求解特征方程的解。
矩阵A的n个特征值λ1≤λ2≤...≤λn,以及这n个特征值所对应的特征向量{w1,w2,...wn},如果这n个特征向量线性无关,那么矩阵A就可以用下式的特征分解表示:A=WΣW−1
其中,W是这n个特征向量所张成的n×n矩阵,而Σ为这n个特征值为主对角线的n×n阶矩阵。
一般会把W的n个特征向量标准化,即满足∣∣wi∣∣2=1 或者说wiTwi=1,此时W的n个特征向量为标准正交基,满足WTW=I,即WT=W−1, 也就是说W为酉矩阵。
此时特征分解表达式可以写成:A=WΣWT
2.2 SVD
要进行特征分解,矩阵A必须为方阵,那么如果A不是方阵,即行和列不相同时,需要使用SVD。
假设矩阵A是一个m×n的矩阵,定义矩阵A的SVD为:A=UΣVT
其中U是一个m×m的矩阵,V是一个n×n的矩阵。U和V称为A的左/右奇异向量矩阵,都是酉矩阵,即满足UTU=I,VTV=I。
Σ是一个m×n的矩阵,除了主对角线上的元素以外全为0,主对角线上的每个元素都称为奇异值,通常将奇异值由大到小排列,这样Σ便能由A唯一确定。

奇异值与特征分解中的特征值类似,在奇异值矩阵中也是按照从大到小排列,而且奇异值的减少特别的快。很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上的比例。也就是说,也可以用最大的k个的奇异值和对应的左右奇异向量来近似描述矩阵:
Am×n=≈Um×mΣm×nVn×nTUm×kΣk×kVk×nT
其中k要比n小很多,即一个大的矩阵A可以用三个小的矩阵Um×k,Σk×k,Vk×nT来表示:

由于这个重要的性质,SVD可以用于PCA降维,来做数据压缩和去噪。也可以用于推荐算法,将用户和喜好对应的矩阵做特征分解,进而得到隐含的用户需求来做推荐。同时也可以用于NLP中的算法,比如潜在语义索引(LSI)。