前几天学习了PCA,LDA算法,都是经典的降维算法。第一种为无监督学习,第二种为监督学习。
今天看了另一种监督学习的降维算法LPP(Locality Preserving Projection),在此记录下自己的心得体会。
就从算法的步骤上来说,LDA和LPP有着惊人的相似,以至于我怀疑他们之间只是同一种方法的不同表示。为了验证我的想法,我采用这两组算法对相同的数据进行降维,降维后的数据证明了我的想法是错的。但是降维后的数据确实非常的相近。还请各路大神指导两者之间的关系。
LPP算法先需要用明确类别的样本进行训练。
如有n个K维训练样本,X1,X2...Xn构成矩阵X,样本分为C种。我们需要先构造一个N*N的权重矩阵W.
Wij的值对应样本Xi和样本Xj的关系。Wij有两种表示方法,我在此就介绍简单的一种,即当且仅当Xi和Xj是同一类的数据时,Wij为1,其余为0。这样我们就可以够着一个N*N的矩阵了。
接着构造一个对角矩阵D,其中Dii等于W矩阵中第i行或者第i列的和(W为对称阵)。
最后构造拉普拉斯矩阵L = D - W(至于为什么这样做,我也不清楚,求指导)。
令X'为X的装置矩阵,求解XLX'a = kXDX'a。求实数k和向量a。
两边同乘XDX'的逆,这个方程就变成求特征值和特征向量了。确实和LDA很像,LDA中XLX'为类内离散度矩阵,XDX'为类间离散度矩阵。
求出特征值后,按特征值从大到小排列,取出前m个特征值对应的特征向量,就可以将n维数据降至m维了。
附上自制实验:
X =
1 5 2 4 4 6
5 3 4 2 6 5
两个样本1,3,5为一类,2,4,6为一类(根据x和y的大小分类)
1.构造权重矩阵W=
0 0 1 0 1 0
0 0 0 1 0 1
1 0 0 0 1 0
0 1 0 0 0 1
1 0 1 0 0 0
0 1 0 1 0 0
2.构造对角阵D=
2 0 0 0 0 0
0 2 0 0 0 0
0 0 2 0 0 0
0 0 0 2 0 0
0 0 0 0 2 0
0 0 0 0 0 2
3.构造拉普拉斯矩阵L=
2 0 -1 0 -1 0
0 2 0 -1 0 -1
-1 0 2 0 -1 0
0 -1 0 2 0 -1
-1 0 -1 0 2 0
0 -1 0 -1 0 2
4.计算T1 = X*L*X' T2 = X*D*X'