Robust PCA Low-rank(附matalb 代码)
2017-11-15 13:52
886 查看
最近在看的论文中,包括人脸识别,以及深度神经网络模型压缩等论文中,都会有low-rank(低秩),低秩稀疏分解等解决方法,感觉关于low-rank的研究还挺火的,这个问题和Robust PCA问题很像,都需要解决一下问题:
在此之前,我需要先把一些资料的链接放出来,这些资料很有用。
Robust PCA 原理:原理1
原理2
Robust PCA matlab code:code
这个code里面有很多有趣的例子
包括:
视频分解:将视频中的前景与背景分离。(我试了下,代码可以跑起来)
修复:通过低秩表示学习恢复损坏的图像。
玩具数据示例:小玩具矩阵分解成低秩和稀疏分量。
原理里讲了很多范数的优化问题,我觉得需要认真看一下,最好自己推导一下,里面有详细的推导过程,还有软阈值函数等的推导,在Robust PCA求解问题中,这些会用到。(这两篇原理看懂了,我觉得基本可以了)
在文章里要讲的求解算法是:交替方向法(ADM)
算法更新步骤如下:
注意D1/μk,Sλ/μk都是阈值函数,在原理中有详细的推导,你可以画出函数长什么模样。
下面是matlab code,我设计了一个低秩+稀疏矩阵测试了一下:
速度挺快的,这个代码看起来还是挺简洁的,但是需要认真看一下一些原理推导。
注:其实这里面的内容都不是我自己的,我之前找的Robust PCA很多都是讲原理,没有代码,我就整合了一下。大家可以在网上多找找代码。
如有错误,欢迎指出。
在此之前,我需要先把一些资料的链接放出来,这些资料很有用。
Robust PCA 原理:原理1
原理2
Robust PCA matlab code:code
这个code里面有很多有趣的例子
包括:
视频分解:将视频中的前景与背景分离。(我试了下,代码可以跑起来)
修复:通过低秩表示学习恢复损坏的图像。
玩具数据示例:小玩具矩阵分解成低秩和稀疏分量。
原理里讲了很多范数的优化问题,我觉得需要认真看一下,最好自己推导一下,里面有详细的推导过程,还有软阈值函数等的推导,在Robust PCA求解问题中,这些会用到。(这两篇原理看懂了,我觉得基本可以了)
在文章里要讲的求解算法是:交替方向法(ADM)
算法更新步骤如下:
注意D1/μk,Sλ/μk都是阈值函数,在原理中有详细的推导,你可以画出函数长什么模样。
下面是matlab code,我设计了一个低秩+稀疏矩阵测试了一下:
function [L, S] = RobustPCA(X, lambda, mu, tol, max_iter) % - X is a data matrix (of the size N x M) to be decomposed % X can also contain NaN's for unobserved values % - lambda - regularization parameter, default = 1/sqrt(max(N,M)) % - mu - the augmented lagrangian parameter, default = 10*lambda % - tol - reconstruction error tolerance, default = 1e-6 % - max_iter - maximum number of iterations, default = 1000 [M, N] = size(X); unobserved = isnan(X); %在使用Matlab做仿真的时候难免会出现数据不是数字的情况,就是NaN的情况,这些数据是不能使用的,用isnan函数解决。 %tf=isnan(A):返回一个与A相同维数的数组,若A的元素为NaN(非数值),在对应位置上返回逻辑1(真),否则返回逻辑0(假)。 %对虚数z,如果z的实部或虚部都是NaN,那么isnan函数返回逻辑1,如果实部和虚部都是inf,则返回逻辑0。 X(unobserved) = 0; normX = norm(X, 'fro');%n=norm(A),返回A的最大奇异值,即max(svd(A)) % default arguments if nargin < 2%matalb 提供两个获取函数参数数目的函数,nargin返回函数输入参数的数量 lambda = 1 / sqrt(max(M,N)); end if nargin < 3 mu = 10*lambda; end if nargin < 4 tol = 1e-6; end if nargin < 5 max_iter = 1000; end % initial solution L = zeros(M, N); S = zeros(M, N); Y = zeros(M, N); for iter = (1:max_iter) % ADMM step: update L and S L = Do(1/mu, X - S + (1/mu)*Y);%更新低秩矩阵 S = So(lambda/mu, X - L + (1/mu)*Y);%更新稀疏矩阵 % and augmented lagrangian multiplier Z = X - L - S; Z(unobserved) = 0; % skip missing values Y = Y + mu*Z; err = norm(Z, 'fro') / normX; if (iter == 1) || (mod(iter, 10) == 0) || (err < tol) fprintf(1, 'iter: %04d\terr: %f\trank(L): %d\tcard(S): %d\n', ... iter, err, rank(L), nnz(S(~unobserved))); end if (err < tol) break; end end end function r = So(tau, X) % shrinkage operator r = sign(X) .* max(abs(X) - tau, 0); end function r = Do(tau, X) % shrinkage operator for singular values [U, S, V] = svd(X, 'econ'); r = U*So(tau, S)*V'; end i=[1 2 4];j=[1 3 5];s = [6 7 8]; A = sparse(i,j,s) B=full(A) C=ones(4,5) D=1.0*(B+C) [m,n]=size(D) lambda=1.0/sqrt(max(m,n)) mu = 10*lambda tol = 1e-6 max_iter = 1000 [L, S] = RobustPCA(D, lambda, mu, tol, max_iter)
速度挺快的,这个代码看起来还是挺简洁的,但是需要认真看一下一些原理推导。
注:其实这里面的内容都不是我自己的,我之前找的Robust PCA很多都是讲原理,没有代码,我就整合了一下。大家可以在网上多找找代码。
如有错误,欢迎指出。
相关文章推荐
- 低秩分解的代码---(CODE) Low-Rank Matrix Recovery
- 低秩分解的代码---(CODE) Low-Rank Matrix Recovery
- 笔记 RASL: Robust Alignment by Sparse and Low-Rank Decomposition for Linearly Correlated Images
- 视频前背景分离论文之(5) Robust PCA via Nonconvex Rank Approximation
- (论文阅读-鲁棒回归的低秩稀疏子空间表示)Low-Rank-Sparse Subspace Representation for Robust Regression
- 主成分分析(PCA)实现代码
- 笔记:Deep Robust Encoder Through Locality Preserving Low-Rank Dictionary
- 视频前背景分离论文之(1) Online Robust PCA via Stochastic Optimization
- 执行失败SSIS 错误代码 DTS_E_PRODUCTLEVELTOLOW。产品级别对于 组件“模糊查找”(9516) 而言不足。
- deep learning 之 PCA and Whitening 代码篇
- 还在用PCA降维?快学学大牛最爱的t-SNE算法吧(附Python/R代码)
- 漫谈Deep PCA与PCANet 及 代码
- LDA(线性判别分析或称Fisher线性判别),PCA(主成份分析)代码及表情识别中的应用
- low rank representation 低秩表达
- 笔记:Online Robust PCA via Stochastic Optimization
- Robust PCA 学习笔记
- low rank representation 低秩表达
- 基于PCA的人脸识别的Matlab实现代码
- Accurate Scale Estimation for Robust Visual Tracking代码解析
- 安卓仿支付宝/微信密码输入框-(最low代码实现)