1、原来eig得到的特征值 并不是按照从大到小排列的!!!
而且[v1,e1] = eig(B,A); 等价于 [v3,e3] = eig(A\B); 等价于求 inv(A)*B
即,若对于LDA而言,我们的公式为 Sw*a= lambda*Sb*a, 等价于 inv(Sb)*Sw*a = lambda*a, 求 eig(Sw,Sb)或eig(Sb\Sw)的最小特征值对应的特征向量,而eig(Sb,Sw) 或eig(Sw\Sb)的最大特征值对应的特征向量。
2、在基于流行学习的方法中,所谓的M=(I-W)*(I-W)'中的I是单位矩阵。而不是1
3、在caideng大牛人的的LGE中,发现有个小技巧,在求解NPE的特征值分解问题时,理论上应该是
[eigvector, eigvalue] = eig(WPrime,DPrime); % inv(T*T')*T*M*T'
[junk, index] = sort(eigvalue); % 特征值从小到大排列
eigvector = eigvector(:,index); % 特征向量的排列 按照 特征值从小到大的顺序
eigvector = eigvector(:, 1:ReducedDim); % 取最小特征值对应特征向量
但是如果换成
[eigvector1, eigvalue1] = eig((Sw+0.001*eye(size(Sw,1))),Sb); % inv(Sb)*Sw 求最小特征值对应的特征向量
[eigvalue1,tt] = sort(diag(eigvalue1),'ascend'); %
Pt = eigvecto