IRLS(迭代重加权最小二乘)学习笔记
来源:互联网 发布:胜科金仕达 待遇知乎 编辑:程序博客网 时间:2024/05/21 09:33
IRLS(Iterative Reweighted Least Squares)迭代重加权最小二乘
Reference:
【1】Rick Chartrand, Wotao Yin. Iteratively reweighted algorithmsfor compressive sensing[J]. 2008:3869-3872.
【2】iterative-reweighted-least-squares-12.pdf
【3】http://blog.csdn.net/hjxzb/article/details/51077309
主要思想:通过权重迭代,利用二范数来实现 的最小范数解 在是非凸问题
关于(5)的推导:
下面是关于(3.35)的推导
Step1:根据(3.33)式有:(因为W为正定对角阵)
Step2:将(1)式代入(3.32)式可得:(因为对称)
Step3: (2)式对求导,并令其等于0:
规则如下:
注意的部分:
1. 在看文献【1】的时候,错误理解了第三部分的第一段,以为是每次迭代都需要减少10倍,后面师兄说我理解错了,最后参考了文献【3】,将
标黄的部分作为的触发条件。
2. 还有一个小收获,是matlab当中尽量用左除,不要用inv和右除,原因如下:
矩阵的除是用高斯消去法来做的,A\b就等效于用消去法解Ax=b,A\B等效于用消去法解AX=B,就多解了很多次
3. P=1时,相对BP而言,IRLS的速度要慢许多~其他还未比较
代码如下:
IRLS 函数
functionu=IRLS(Phi,b,p)
%aim to solve nonconvex ||x||p s.t Phi*a=b 0<=p<1
%min sum(wi ui^2) Phi*u=b
%u(n)=Qn*Phi'*inv(Phi*Qn*Phi')*b
%u(n)=1/wi=|ui(n-1)|^(2-p)
%referencence: Iteratively reweighted algorithms for compressive sensing RickChartrand
%Phi-->M*N M<<N
%written by Palace Wangle 2017/12/25
epsilon= 1;%initial large value
u= pinv(Phi)*b;
m= norm(u);
Em=[];%储存迭代
% for i = 1:100
while epsilon>1e-8
w=(u.^2+epsilon).^(p/2-1);
Q =diag(1./w);
t = u;
u = (Q * Phi') *((Phi*Q*Phi') \ b);
% u = Q * Phi' /(Phi*Q*Phi') * b;
if m<=(sqrt(epsilon)/100) % 二范数的差改变小于sqrt(epsilon)/100
epsilon = epsilon/10;
end
m=norm(t-u);
Em = [Em;m];
end
epsilon
CS单次重构:
%%compressive sensing test
clearall
clc
M= 64;
N= 256;
K= 10;
Index_K= randperm(N);
x= zeros(N,1);
x(Index_K(1:K))= 5*randn(K,1);
Psi= eye(N);
Phi= randn(M,N);
A= Phi * Psi;
y= Phi *x;
tic
theta= IRLS(A,y,1/2);
x_r= Psi * theta;
toc
figure
plot(x_r,'k.-')
holdon
plot(x,'r')
holdoff
legend('Recovery','Original');
fprintf('\n恢复残差:');
norm(x_r-x)