理解MP算法

转载:http://blog.youkuaiyun.com/u010103202/article/details/50932936

2.MP算法

作为一类贪婪算法,MP算法的基本思路是在迭代中不断找寻最有测量矩阵列来逼近被表示向量,继而寻得最优的稀疏逼近,使得x与y的残差最小。对于这个算法,最直观的问题有两个:1.如何选择逼近度最高的——如何衡量逼近度,算法如何执行(比如遍历)?2.x的稀疏度由迭代次数决定,而逼近度(即最终残差)也与迭代次数有关,这是一个两难问题,如何做权衡?

在回答以上两个问题之前,我们先给出MP算法的具体过程:


示例代码如下:(与matlab中MP介绍时的示例相同)

  1. clear all  
  2. close all  
  3. %  
  4. A = [1 0.5 -1/2^0.5;  
  5.     0 (3/4)^0.5 -1/2^0.5];  
  6. y = [1,0.5]';  
  7. K = 3;  
  8. [m,n] = size(A);  
  9.    
  10.    
  11. % iteration  
  12. Rf(:,1) = y;  
  13. for k = 1:K  
  14.       
  15.     for i = 1:n   
  16.         ip(i) = abs(Rf(:,k)'*A(:,i));  
  17.     end  
  18.     j(k) = find(max(ip)==ip);  
  19.     Rf(:,k+1) = Rf(:,k) - Rf(:,k)'*A(:,j(k))*A(:,j(k));  
  20.     Rfnorm(k) = norm(Rf(:,k));  
  21. end  
  22. R = [A(:,j(1)),A(:,j(2)),A(:,j(3))];  
  23. r1 = R(:,1);  
  24. r2 = R(:,2);  
  25. r3 = R(:,3);  
  26. figure,quiver(0,0,y(1),y(2),'r');  
  27. hold,quiver(0,0,r1(1),r1(2),'b');  
  28. quiver(0,0,r2(1),r2(2),'b');  
  29. quiver(0,0,r3(1),r3(2),'b');  
  30. display(norm(Rf(:,K+1)));  

编程遇到的简单问题:

1.每次迭代选择A中列向量时,为什么不需要把上次选择的去除掉?

因为每次迭代的残差是由上次的残差减去已选择的A的列计算得到的,剩余残差(恰好衡量与已选列的差异性)在已选列向量的投影将变得很小。因此没有必要去除已选列。

2.随机字典A的生成

示例中未涉及这个问题,但是仿真往往需要。matlab命令式norm(a,b,c,d),产生均值a,方差b,大小c*d的随机矩阵。

3.如何画向量?

画箭头的命令是quiver(x,y,u,v),xy为顶点,uv为向量。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值