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的类标矩阵

posted @ 2016-03-13 23:54  邪恶的亡灵  阅读(500)  评论(0编辑  收藏  举报