Matlab 问题 集锦
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 = eigvector1(:,tt(end-dim+1:end)); 识别错误率为96.79 换成[eigvector1, eigvalue1] = eig(Sw,Sb+0.001*eye(size(Sw,1))); % inv(Sb)*Sw 求最小特征值对应的特征向量 结果却求的最大值对应的特征向量
然而,我们从下面cai deng的代码中发现并不是这么回事,可能是我理解问题,暂时不知道什么原因
我们看看原始代码
if bPCA && ~bD
[eigvector, eigvalue] = eig(WPrime);
else
[eigvector, eigvalue] = eig(WPrime,DPrime); % inv(T*T')*T*M*T' 取最小特征值对应特征向量
end
eigvalue = diag(eigvalue);
[junk, index] = sort(-eigvalue); % 重点 是 这里 加上 负号的作用? 因为加上负号之后变成了求上式最大特征值对应的特征向量了 或者 我们要求的正是最大特征值对应的特征向量?
eigvalue = eigvalue(index);
eigvector = eigvector(:,index);
if ReducedDim < size(eigvector,2)
eigvector = eigvector(:, 1:ReducedDim);
eigvalue = eigvalue(1:ReducedDim);
end
通过调试代码发现以下两种代码等价:
% [eigvalue1,tt] = sort(-diag(eigvalue1),'ascend'); % Pt = eigvector1(:,tt(1:dim)); [eigvalue1,tt] = sort(diag(eigvalue1),'ascend'); % Pt = eigvector1(:,tt(end-dim+1:end));
3、关于特征投影后,是否还要进行归一化的经验。是 归一化比较好
4、关于在NPE中是否需要对数据进行中心化的问题,然后是先进行中心化还是先进行归一化~~ 我的建议是,进行归一化,而不进行中心化。
5、2016 3 22这一天调试了整整一天的NPE代码,其中包括cai deng的NPE,降维工具箱中的npe,以及我自己写的NPE,结论是在同样维度200,同样k近邻5下,COIL20-caideng的数据集,每类样本数为10时,发现三种方法居然识别率差距非常大,我们的npe错误率为88.3871,cai deng 的npe为81.78,最后一个错误率为96.75。简直是!!!无解了!!!!
6、2016324,在调试NPE代码的过程中发现,针对类似LDA求特征值和特征向量的问题,argmax比argmin要效果好,特别是我们可以在eig(Sb,Sw)的Sw上添加lambda*I使其非奇异,这样子会更稳定一些。
7、最近读Least Squares Linear Discriminant Analysis(Jieping Ye),提到传统LDA提取的特征向量是特征值非0的向量,而且当散度矩阵St奇异是,可以用St的“伪逆”矩阵代替原来的St;而且当LDA应用在MSE投影后的特征上时,等价于在原始特征空间使用LDA。当然若MSE的类标矩阵