精华内容
下载资源
问答
  • 今天小编就为大家分享一篇python 实现矩阵填充0的例子,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 矩阵填充兴起后,SET算法作为SVT的改进算法,精度更高更稳健,适用于高精度矩阵填充
  • 矩阵填充MATLAB代码

    2017-01-16 16:13:45
    经典的矩阵填充算法:包含:SVT. -- FPC---Lmafit---ALM----APG---SET---GROUSE---GRASTA--RMC--等;奉送2014-2016各个顶级会议有关MC的文献;
  • 矩阵填充源码 26个

    2015-10-23 20:09:58
    矩阵填充源代码 【ALM】【Bregman_Matlab_demo】【Grouse】【LMaFit-Code】【LMSVD】【LRSD-Code】【SRMF】【SVT】【MCL】【libdp】 【RTRMC】【Jellyfish-Code】【NNLS-Code】【TenALS_Matlab】【dual-RPCA】...
  • 与压缩感知(CS)相类似的矩阵填充(MC)理论中的SVT重构算法。能够重构低秩、相关性较低的矩阵。
  • 自己整理的matlab代码及对应论文:各种低秩约束图像矩阵填充方法SVT、SVP、WSVT、TSVT、ADMM算法实现,包括核范数约束、加权核范数(2018年论文上的)、截断核范数(2018论文里的)等,基于低秩性科研研究不容错过 很全
  • 矩阵填充算法的比较研究,刘红兵,温罗生,矩阵填充(Matrix completion)算法,指的是在矩阵有残缺值的位置上填充元素的方法。其在推荐系统、心率估计、基因表达等方面有广泛的应
  • 矩阵填充.zip

    2019-05-18 14:12:40
    -matlab------的一些矩阵填充算法代码
  • 回型矩阵填充代码

    2014-05-20 09:33:23
    回型矩阵填充代码,本程序是自己编写的回型矩阵填充算法
  • 基于评分矩阵填充与用户兴趣的协同过滤推荐算法.pdf
  • 矩阵填充|奇异值阈值算法

    千次阅读 2020-01-06 21:59:36
    斜风细雨作小寒,淡烟疏柳媚晴滩。入淮清洛渐漫漫。 雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。...而低秩是相对于矩阵而言,低秩体现在矩阵的秩远小于矩阵的实际尺寸。其次,稀疏向量恢复问题可以...

    斜风细雨作小寒,淡烟疏柳媚晴滩。入淮清洛渐漫漫。
    雪沫乳花浮午盏,蓼茸蒿笋试春盘。人间有味是清欢。
    ---- 苏轼

    更多精彩内容请关注微信公众号 “优化与算法

    低秩矩阵恢复是稀疏向量恢复的拓展,二者具有很多可以类比的性质。首先,稀疏是相对于向量而言,稀疏性体现在待恢复向量中非零元素的数量远小于向量长度;而低秩是相对于矩阵而言,低秩体现在矩阵的秩远小于矩阵的实际尺寸。其次,稀疏向量恢复问题可以转化为基于 ℓ 1 \ell _1 1 范数的凸优化问题,因为 ℓ 1 \ell _1 1 范数是 ℓ 0 \ell _0 0 的最佳凸包络;而矩阵的核范数在一定条件下也是矩阵秩的最佳凸近似,因此,也可以利用这一性质将低秩矩阵恢复问题松弛为一个凸问题来求解。本文重点介绍低秩矩阵恢复的一些常用算法,并给出了奇异值阈值(STV)算法用于低秩矩阵恢复的仿真分析。

    1. 低秩矩阵恢复问题背景

    随着5G技术和物联网(IoT)技术的发展,作为5G三大应用场景之一的大规模机器类通信(eMTC)将使“万物互联”成为现实。大规模机器类通信的部署势必导致海量数据的产生,而实时、精确地处理这些大规模数据对传统的信息处理技术带来了挑战。由于数据维度的上升,在信号处理、图像处理、计算机视觉、机器学习和数据挖掘等领域,所需处理的数据量呈几何级数增长,面对海量的数据,很多传统的信号处理技术已不堪重负,无法适应于未来爆炸式增长的数据环境,因此急需开发更加先进的信号处理技术。

    随着数据维度的增加,高维数据之间往往存在较多的相关性和冗余度,而且数据本身信息量的增长比数据维度的增长通常要慢得多。例如,视频信号的可压缩空间比单幅图像的可压缩空间大得多。一幅自然图片经过小波变换之后,只有少量的系数在数值大小上是相对显著的。如果将一幅图片当成一个像素矩阵,对其进行奇异值分解后,其前10%奇异值包含的信息量往往占了整幅图像的90%。这些实例都说明在高维数据中,往往存在不同程度的相关性,利用这些相关性可以大幅减小数据的存储空间和处理复杂度。

    此外,现实生活中的大规模数据常常会有部分数据缺失、数据误差、损坏等问题,这将进一步加大数据处理和分析难度。这种现在在实际生活中很常见,例如在人脸识别中,训练集中的或是待识别的人脸图像往往含有阴影、高光、遮挡、变形等;在运动恢复结构(Structure from motion,SFM)问题中,进行特征提取和特征匹配时往往存在大的匹配误差. 这些因素的存在使得很多传统的分析和处理方式失效, 需要新的理论和实用的算法为相关的应用提供理论支撑和有力的求解工具.正确并高效地从不完整的、带有损毁的数据中 恢复和利用它们, 对现代大规模数据的分析与处理至关重要。

    假定原始数据矩阵是低秩的,但是矩阵中含有很多未知的元素。从一个不完整的矩阵中恢复出一个完整的低秩阵,便是低秩矩阵填充问题。例如,著名的Netflix问题便是一个典型的低秩矩阵填充问题。Netflix是美国的一家影片租赁公司,其推荐系(recommendation system)要从用户仅有的对少数的电影打分中为用户推荐影片,如果这种推荐越符合用户的喜好,也就越能提高该公司租赁电影的业务,为此,该公司设立了百万美元的奖金用于悬赏能够最好地提高该公司推荐系统质量的解决方法。这个问题可以用矩阵填充来进行建假设矩阵的每一行分别代表同一用户对不同电影的打分, 每一列代表不同用户对同一电影的打分,用户数量巨大, 电影数目巨大,因此这个矩阵的维度十分大。由于用户所打分的电影有限,这个矩阵中只有很小一部分的元素值已知,而且可能含有噪声或误差,那么Netflix问题就是如何从这个不完整的矩阵中推测其中未知元素的值。矩阵填充的越准确,为用户推荐的电影也就越符合用户的喜好。

    2. 低秩矩阵补全

    矩阵补全是推荐系统、计算机视觉、图像处理等领域经常遇到的问题,具有很高的研究价值。矩阵补全问题旨在通过真实未知矩阵 M \bf M M 的部分观测 M i , j ,    ( i , j ) ∈ Ω {\bf{M}}_{i,j},~~(i,j)\in\Omega Mi,j,  (i,j)Ω 来估计 M \bf M M 中未观测到的其他元素。如果不加其他约束,这样的问题是完全不可解的。但是,如果数据矩阵具有一些特殊的性质,这些特殊的性质将使得矩阵补全问题成为可能。低秩性就是这样的性质。如果事先知道矩阵 M \bf M M 是低秩的,那么矩阵补全问题可以形式为为如下优化问题:

    min ⁡ X     r a n k ( X ) s . t .     X i , j = M i , j ,    ( i , j ) ∈ Ω        ( 1 ) \begin{array}{l} \mathop {\min }\limits_{\bf{X}}~~~ rank({\bf{X}}) \\ s.t.~~~{{\bf{X}}_{i,j}} = {{\bf{M}}_{i,j}},~~(i,j) \in \Omega \\ \end{array}~~~~~~(1) Xmin   rank(X)s.t.   Xi,j=Mi,j,  (i,j)Ω      (1)

    其中 Ω \Omega Ω 为观测样本下标的集合, X \bf X X 为优化变量, M \bf M M 为真实的未知矩阵。定义投影算子 P Ω P_{\Omega} PΩ:
    KaTeX parse error: Unknown column alignment: * at position 73: …{\begin{array}{*̲{20}{c}} {{{…

    从而(1)式可以简洁地表述为:
    min ⁡ X     r a n k ( X ) s . t .     P Ω ( X ) = P Ω ( M )         ( 3 ) \begin{array}{l} \mathop {\min }\limits_{\bf{X}} ~~~rank({\bf{X}}) \\ s.t.~~~{P_\Omega }({\bf{X}}) = {P_\Omega }({\bf{M}}) \\ \end{array}~~~~~~~(3) Xmin   rank(X)s.t.   PΩ(X)=PΩ(M)       (3)

    显然,上述问题是一个NP-hard问题,且其复杂度随矩阵维度的增城呈平方倍指数关系增长。为了求解问题(1),有学者对其进行凸松弛,转化为一个凸优化问题:
    min ⁡ X     ∥ X ∥ ∗ s . t .    X i , j = A i , j ,    ( i , j ) ∈ Ω       ( 4 ) \begin{array}{l} \mathop {\min }\limits_{\bf{X}}~~~ {\left\| {\bf{X}} \right\|_*} \\ s.t.~~{{\bf{X}}_{i,j}} = {{\bf{A}}_{i,j}},~~(i,j) \in \Omega \\ \end{array}~~~~~(4) Xmin   Xs.t.  Xi,j=Ai,j,  (i,j)Ω     (4)

    文献[2]中指出:问题(4)的解在满足强非相干性条件下,很大概率等价于问题(1)的解。在某种意义上,这是NP-难秩最小化问题的紧凸松弛。因为核范数球是谱范数为1的rank one矩阵集合的凸包。具体定理及证明参见文献[1]。
    对于(4)中的优化问题,当采样点数满足 m ≥ C n 6 / 5 r log ⁡ n m \ge Cn^{6/5}r\log n mCn6/5rlogn 时, M \bf{M} M 能以很大概率求得精确解,其中 r r r 为矩阵 M \bf{M} M 的秩, C C C 为一个正常数。

    求解(4)式可以使用一些凸松弛方法,比如半定规划法,然而半定规划法通常使用内点法来求解,其求解上述问题的算法复杂度为 O ( p ( m + n ) 3 + p 2 ( m + n ) 2 + p 3 ) O(p{(m + n)^3} + {p^2}{(m + n)^2} + {p^3}) O(p(m+n)3+p2(m+n)2+p3)。可以通过matlab软件包CVX等来求解。

    3. 奇异值阈值算法(SVT)

    2009年,Cai Jian-feng 和 Candes(e上面有个四声符号)等人提出了求解核范数最小化问题的奇异值阈值算法(Singular Value Thresholding, SVT)。该算法可以类比为求解向量 ℓ 0 \ell _0 0 范数最小化的软阈值迭代算法。 SVT算法先将最优化问题(4)正则化,即有:
    min ⁡ X      τ ∥ X ∥ ∗ + 1 2 ∥ X ∥ F 2 s . t .     Ω ( X ) = P Ω ( M )       ( 5 ) \begin{array}{l} \mathop {\min }\limits_{\bf{X}} ~~~~\tau {\left\| {\bf{X}} \right\|_*} + \frac{1}{2}\left\| {\bf{X}} \right\|_F^2 \\ s.t.~~~{_\Omega }({\bf{X}}) = {P_\Omega }({\bf{M}}) \\ \end{array}~~~~~(5) Xmin    τX+21XF2s.t.   Ω(X)=PΩ(M)     (5)

    其中, τ > 0 \tau > 0 τ>0。当 $\tau \to + \infty $ 时,上述最优化问题的最优解收敛到(4)式的最优解。构造最优化问题(5)的拉格朗日函数:
    L ( X , Y ) = ∥ X ∥ ∗ + 1 2 ∥ X ∥ F 2 + ⟨ Y , P Ω ( M − X ) ⟩      ( 6 ) L({\bf{X}},{\bf{Y}}) = {\left\| {\bf{X}} \right\|_*} + \frac{1}{2}\left\| {\bf{X}} \right\|_F^2 + \left\langle {{\bf{Y}},{P_\Omega }({\bf{M}} - {\bf{X}})} \right\rangle ~~~~(6) L(X,Y)=X+21XF2+Y,PΩ(MX)    (6)

    其中,拉格朗日乘子 Y ∈ R m × n {\bf{Y}}{ \in {\mathbb{R}}^{m \times n}} YRm×n。如果 ( X ∗ , Y ∗ ) ({{\bf{X}}^*},{{\bf{Y}}^*}) (X,Y) 为优化问题(4)的原-对偶问题的最优解,则有:
    sup ⁡ Y inf ⁡ X L ( X , Y ) = inf ⁡ X sup ⁡ Y L ( X , Y ) = L ( X ∗ , Y ∗ )     ( 7 ) \mathop {\sup }\limits_{\bf{Y}} \mathop {\inf }\limits_{\bf{X}} L({\bf{X}},{\bf{Y}}) = \mathop {\inf }\limits_{\bf{X}} \mathop {\sup }\limits_{\bf{Y}} L({\bf{X}},{\bf{Y}}) = L({{\bf{X}}^*},{{\bf{Y}}^*})~~~(7) YsupXinfL(X,Y)=XinfYsupL(X,Y)=L(X,Y)   (7)

    SVT算法使用交替迭代方法求解优化问题(4),其迭代格式可以简单表述如下:

    其中 D τ ( W ) {D_\tau }({\bf{W}}) Dτ(W) 为奇异值阈值软阈值操作类似,不过这里的对象是矩阵。可以具体描述为:

    其中(8)式中的第一步是这样来的,初始化 Y 0 = 0 {{\bf{Y}}^0} = 0 Y0=0,当 Y k − 1 {{\bf{Y}}^{k-1}} Yk1 固定时:

    (8)式中的第(2)式,当 X k {{\bf{X}}^k} Xk 给定时,用梯度下降来更新 Y \bf{Y} Y

    4. 仿真

    SVT算法的matlab代码如下:

    function [ X,iterations ] = SVT(M,P,T,delta,itermax,tol)
    %Single value thresholding algorithm,SVT
    % function:solve the following optimization problem
    %                  min  ||X||*
    %               s.t. P(X-M) = 0
    % X: recovered matrix
    % M: observed matrix
    % T: single value threshold
    % delta: step size
    % output:X,iterations
    
    % initialization
    Y = zeros(size(M));
    iterations = 0;
    
    if nargin < 3
        T =  sqrt(n1*n2);
    end
    if nargin < 4
        delta = 1;
    end
    if nargin < 5
        itermax = 200 ;
    end
    if nargin < 6
        tol = 1e-7;
    end
    
    for ii = 1:itermax
        % singular value threshold operation
        [U, S, V] = svd(Y, 'econ') ;
        S = sign(S) .* max(abs(S) - T, 0) ;
        X = U*S*V' ;
        % update auxiliary matrix Y
        Y = Y + delta* P.* (M-X);
        Y = P.*Y ;
        % computer error
        error= norm( P.* (M-X),'fro' )/norm( P.* M,'fro' );
        if error<tol
            break;
        end
        % update iterations
        iterations = ii ;
    end
    end
    

    数值验证代码为如下:

    % Numerical verification for SVT algorithm
    clear
    clc
    
    r = 2 ; % rank(M) = 2 ;
    n1 = 200 ; % row length of M
    n2 = 300 ; % column length of M
    sample_rate = 0.5 ; 
    % real
    % M = rand(n1,r)*rand(r,n2) ;
    % complex
    M = (rand(n1,r)+1i*rand(n1,r))*(rand(r,n2)+1i*rand(r,n2))/2 ;
    
    % construct index matrix
    P = zeros(n1*n2,1) ;  
    MM = reshape(M,n1*n2,1) ;
    pos = sort(randperm(n1*n2,n1*n2*sample_rate))' ;
    P(pos) = MM(pos) ;
    index1 = find(P) ;
    P(index1) = 1 ;
    P = reshape(P,n1,n2) ;
    
    % set threshold & step size
    T = sqrt(n1*n2); 
    delta = 2 ;
    
    [ X,iterations ] = SVT(M,P,T,delta) ;
    
    % norm(P.*(X-M),'fro')
    norm(P.*(X-M),'fro')/norm(P.*M,'fro')
    
    % norm(X-M,'fro')
    % norm(X-M,'fro')/norm(M,'fro')
    
    

    上述测试迭代200次停止时,norm( P.* (M-X),‘fro’ )/norm( P.* M,‘fro’ )误差大约为1e-7。

    % low rank image completion by SVT algorithm
    clear
    clc
    
    A = imread('C:\Users\pc\Desktop\CS_Rectest\MC\ce_svt\channel.bmp') ;
    
    WW = double(A) ;
    a1 = double(A(:,:,1)) ;
    a2 = double(A(:,:,2)) ;
    a3 = double(A(:,:,3)) ;
    
    [M,N] = size(a1);
    
    X = zeros(M,N,3);
    % sampling
    pos = sort(randperm(M*N,M*N*0.5))' ;
        
    for jj = 1:3
        P = zeros(M*N,1) ;
        MM = reshape(double(WW(:,:,jj)),M*N,1) ;
        P(pos) = MM(pos) ;
        index1 = find(P) ;
        P(index1) = 1 ;
    %     P(index1) = rand(size(index1,1),1) ;
        P = reshape(P,M,N) ; 
        T = 50000 ;
        delta_t = 1 ; 
        [ X(:,:,jj),iterations ] = SVT(WW(:,:,jj),P,T,delta_t) ;
    %     [ X(:,:,jj)] = pcp_ad(WW(:,:,jj)) ;
    end
    
    DD = P.*WW(:,:,1) ;
    DD1 = P.*WW(:,:,2) ;
    DD2 = P.*WW(:,:,3) ;
    ff(:,:,1) = DD;
    ff(:,:,2) = DD1;
    ff(:,:,3) = DD2;
    
    figure(1)
    subplot(1,3,1)
    imshow(A)
    title("原图")
    
    subplot(1,3,2)
    imshow(uint8(ff))
    title("采样后的图")
    subplot(1,3,3)
    imshow(uint8(X))
    title("恢复的图")
    
    

    仿真效果如下:
    低秩图像补全

    可以看出,在采样率为0.5时,图像恢复效果很不错。

    由于时间原因,下次再继续介绍低秩与稀疏矩阵恢复问题,敬请期待!

    5. 参考文献

    [1] Cai, J. F., Candès, E. J., & Shen, Z. (2010). A singular value thresholding algorithm for matrix completion. SIAM Journal on optimization, 20(4), 1956-1982.
    [2] Davenport, M. A., & Romberg, J. (2016). An overview of low-rank matrix recovery from incomplete observations. IEEE Journal of Selected Topics in Signal Processing, 10(4), 608-622.

    最大比率发射(Maximum Ratio Transmission, MRT)

    线性降维:主成分分析PCA原理分析与仿真验证

    5G+AI:有哪些新的研究方向和新范式?

    简述3D点云配准算法

    5G为人工智能与工业互联网赋能|79页高清PPT

    智能算法|以动物命名的算法

    一份超全面的机器学习公共数据集

    矩阵填充|奇异值阈值算法

    可重构/大规模智能反射表面reconfigurable/large intelligent surface综述

    迭代硬阈值类算法总结||IHT/NIHT/CGIHT/HTP

    软阈值迭代算法(ISTA)和快速软阈值迭代算法(FISTA)

    伍德伯里矩阵恒等式(Woodbury matrix identity)

    压缩感知:一种新型亚采样技术
    欢迎关注<优化与算法>订阅号

    更多精彩内容请关注微信公众号 “优化与算法

    展开全文
  • 在深入研究基于有限元的FMT重建方法的基础上,提出利用低秩矩阵填充技术克服背景荧光的方法。该方法将不同激发节点形成的外表面观测组成一个有元素缺失的观测矩阵,利用低秩矩阵填充算法恢复该矩阵的缺失元素,同时...
  • 为了对软件定义无线网络系统中虚拟接入点(VAP)状态信息进行实时测量,根据实际网络中虚拟接入点性能的数据特征,提出一种基于随机游走的自适应矩阵填充算法(RW-MC)。首先,基于离散度和覆盖度的采样模型确定初始...
  • 采用矩阵填充方法对稀疏数据的缺失部分进行估算,以避免降维方法对原始数据信息造成损失,同时结合髙斯算子快速收敛的优势以及遗传算子对生物进化模拟的有效性对PSO算法进行改进,聚合多标准评分生成TopN推荐列表。...
  • 本文出自Proceedings of the Twenty-Sixth International Joint Conference on Artificial Intelligence (IJCAI-17) ...本文主要讨论有界的矩阵填充问题(BMC)的概念,即对标准矩阵填充问题增加有界约束的问题。实践证

    本文出自Proceedings of the Twenty-Sixth International Joint Conference on Artificial Intelligence (IJCAI-17)

    原文链接:点击打开链接

    全文译文:

     要:矩阵填充算法被广泛应用于个性化推荐系统中。本文主要讨论有界的矩阵填充问题(BMC)的概念,即对标准矩阵填充问题增加有界约束的问题。实践证明,BMC在很多真实数据集中有着良好的表现,并且,在2012R.KannanPark提出了一种被称为BMA的快速坐标下降算法。然而我们注意到,BMA有时会收敛于非平稳点,导致这些情况下的相对精度较差。为了解决这一问题,我们提出了一种在ADMM框架下来解决BMC问题的新的算法。本文所提出的方法可以保证收敛到平稳点。基于真实数据集的实验结果显示此算法相比于之前的有界矩阵填充算法可以达到较低的目标函数值,得到一个较高的预测精度和较好的扩展性。此外,在很多真实数据集上,此方法在预测误差方面优于标准的矩阵分解。

    1 介绍

    矩阵分解和矩阵填充[Koren等,2009]被广泛使用于个性化推荐系统。给出部分用户-物品矩阵的部分观察评级,目标是通过解决以下优化问题来预测缺失评级:


    公式(1.2)适用于凸形式,而非凸形式(1.1)在凸形k选择足够大时两者是等价的。在以上问题中,YRm×n就是我们得到的已知评分矩阵,是已知集合,通常情况下Wk<<min(m,n)是指示集合的指示器功能模块。‖.‖*代表核范数,通常被用作非凸等级出发的一种凸相关技术。

    尽管在很多现实问题中表现出色,但传统的矩阵分解并未对预测值加上任何约束。然而,在很多现实问题中,评分会限制在一个特定的范围内。比如,MovieLens的评分和Netflix数据集被限制在[0.5,5]的范围内,但是公式(1.1)和(1.2)得到的预测值往往会超出这个界限。在这些情况下,我们有理由对初始的最优化问题增加有界约束,得到以下有界矩阵填充(BMC)问题:

     

    注意到我们用来表示元素约束,对于整篇文章中所有的ij都有。这是一个较难的优化问题由于我们有总共mn个限制,因此我们就需要O(mn)的内存来实现,这对于超过10,000个用户/电影的问题来说是过高的。

    最近,R.KannanPark(2012)提出了一种有效的限制坐标下降算法为了解决公式(1.3)中非凸形式BMC问题。名为BMA的算法在带有界限的现实数据集中往往表现的较传统矩阵填充算法更好。然而,BMA算法经常无法收敛于平稳点。与之相替代的是他能够很容易陷入非平稳点,对于这部分我们将在第二部分进行讨论。这种不稳定的收敛行为经常导致在实际中表现的下降。

    在本文中,我们提出了一种最小化BMC目标函数的新算法。这种算法基于ADMM框架 [Boyd等,2011]用于解决凸形式(1.4),来保证收敛于最优路径。此外,通过更新规则,算法不需要O(mn)的空间复杂度,并且适用于10,000,000规模的大规模数据集。真实数据集的实验结果表明我们的算法可以更好的、更快的实现相比于传统的有界矩阵填充方法。更有趣的是,本算法在预测精度方面优于目前的矩阵分解法。

    本文的其余部分内容如下。第二部分我们介绍相关工作并给出例子来表明坐标下降法无法用于有界矩阵填充问题。在第三部分中提出主要算法和分析。并在第四部分给出真实数据集上的实验结果。

    2 相关的工作

    有很多方法可以解决(1.1)(1.2)Funk2006年首先提出了矩阵分解法用于推荐系统并用SGD来解决最优化问题。Koren2008年提出了基线估计与矩阵分解合并的算法来提高预测精度,并于2009年进行了研究。不久,YuYun以及Gemulla等人分别于201220142011年提出坐标下降算法和SGD算法以解决大规模数据集使用矩阵分解的问题,不幸的是,他们都没能解决有界性约束的问题。矩阵填充算法关于解决仍有很多其他方向的趋势被用于这些情况,比如RaoChiang2015年提出边界信息,Hsieh2015年提出的噪音问题以及本文提出的算法。

    最近,R.KannanPark提出了一种名为BMA的算法解决矩阵分解的有界约束的问题(1.3),并且证明了BMA能够实现更小的RMSE相比于SGD在没有约束的情况下。BMA以块坐标下降思想为基础。然而,块坐标下降法假设可行域W,H能被分解为笛卡尔乘积,但是有界约束(1.3)违反了这个假设,因此BMA缺少理论支持并且可能无法收敛于平稳点。

     

    1:仿真结果显示BMA无法收敛于平稳点,BMC-ADMM可以在较低的Test RMSE下收敛于平稳点

    这里我们给出一个BMA无法收敛于平稳点的例子。考虑问题Y=,,对于初始解W=H=。当我们固定W时,H不变,反之亦然。但是这种情况下,WH不是最优解,也不是平稳点。如果我们不限定有界约束,当我们固定W时,H将会变为(0.5,0.5),最终收敛于最优解。因此我们发现有界约束使块坐标下降更难实现。

    这里我们使用一个例子来说明部分BMA收敛问题。假设有1,000行和1,000列的评分矩阵,包含49,153个评分,限制在05的范围内。设置k=1,初始化WRm×1为标准高斯分布变量,HR1×n全为0

    从仿真结果看出,BMA陷入初始值并很难逃出。然而BMC-ADMM算法能够获得全局最优达并到预测精确到在相同的初始值下。此外,BMA比标准矩阵分解更慢,其时间复杂度为O(k2mn),空间复杂度为O(mn/nblk+),其中nblkBMA所使用块的数目。数值实验同样显示出在块的数目特别大的情况下运行时间将会明显增长。更大的时间和空间复杂度暗示着BMA并不能很好的适用于大型数据集。

    3 提出方法

    在本节中,我们描述了有界矩阵填充问题的算法。我们从数学公式开始,在ADMM框架下,然后详细描述了我们的算法。我们也讨论了该方法的收敛性并分析了所提出算法的时间和空间复杂度。

    3.1 数学公式和收敛性

    应用交替方向乘子算法(ADMM)框架,我们首先分离原(1.4)中问题的损失、正则化和约束,得到下面的等式:


    这看起来像是一个标准的ADMM问题,可以通过XZW和拉格朗日乘子对应的约束的交替更新解决。不幸的是,由ADMM求解(3.1)因为在整个优化过程中X是一个密集的满秩矩阵,直到收敛到最优解需要O(mn)的空间复杂度。

    为了解决这个问题,我们建议进一步将X分解成,其中是一个稀疏矩阵,作为两个低秩矩阵的积存储。这里我们做一个变换,把原来的X写成,其中是稀疏的,。这种变量转换导致以下等效的问题:

     

    为了方便,在(3.2)中我们用X表示上述的是辅助矩阵。相应的增广拉格朗日式:

     

    这相当于下面的缩放形式:

     

    其中,是拉格朗日乘子,是惩罚参数,。注意到不等式约束不包含在我们的增广拉格朗日方程。其动机是为了便于计算辅助矩阵WDu等人2014年讨论并命名为增广的部分拉格朗日函数。

    由于目标函数(3.2)是闭的,适当的和凸的。所以可以通过找到增广拉格朗日的鞍点来求解。在Gauss-Seidel框架下,ADMM使用下面的迭代程序找出鞍点:


     接下来,我们将详细讨论每个子问题。



    算法1总结了所得的算法:


    3.2 复杂度和实现细节

    时间复杂度

    (3.4)(3.6)是最耗时的步骤。对于(3.4)PROPACK使用迭代法得到k截断SVD分解。对于(3.6),复杂度为O(mn),用于检查中的所有元素,并将其映射回有界约束。数值实验(参见4.4节)显示(3.6)是最慢的步骤并且支配运行时间。

    空间复杂度


    初始化

    因为需要满足有界约束,所以BMC的初始化是非平凡的。这里我们主要讨论两个初始化技术。

    第一个初始化技术是随机初始化:我们生成两个高斯随机变量W0和H0,然后将它们与标量相乘并调整它们的第一列和第一行,使得min(WoH0)=rmin,max(W0H0)=rmax。详细的计算过程在算法2中给出。

     

    在算法2中,AdjustTerm的构造基于以下等式:

     

    通过这种方式,我们初始化W0H0在[rmin,rmax]范围内。这是在R.KannanPark2012年提出的随机初始化的改进版本,只能产生非负的W0和H0,并保证初始化的

    另外一个初始化技术被称为“基线估计”。Koren2008年提出基线估计是为推荐系统提出了一个合理的初始化,其中缺失的评级,式中是评级的全局均值,分别是用户i和电影j对应的偏差项。

    注意到,BMA也使用这两种初始化,我们将在接下来的部分里使用随机初始化来比较BMACCD++和我们的方法的性能。

    4 实验

    在本节中,我们比较了ADMM与现有的矩阵分解方法在实际数据集上的效率、解决方案的质量和预测精度方面的性能。在比较重包含了以下算法/实现:

    ·BMC-ADMM:我们提出了求解有界矩阵填充问题的方法(算法1)。

    ·BMA[R.KannanPark2012]:用于解决BMC问题的坐标下降算法。

    ·CCD++[Yu等,2012]:传统的矩阵填充问题坐标下降求解器。

    我们使用的5个真实数据集来测试上述矩阵填充算法的性能,详细的数据统计如表1所示。我们随机分割80%作为训练数据和20%作为测试数据。对于每个算法和数据集,我们根据验证集中选择最佳正则化参数。以下所有的实验都是在一台配备16GB RAM的英特尔i5-4590 3.30 GHz CPU上进行的。

     

    注意到,BMA速度较慢,并在数据量较大时需要较大的内存,除非我们让nblk非常大以节省内存,但这会使BMA变得更慢。因此,我们使用小数据集或大数据集来比较BMC-ADMMBMACCD++,并使用全大数据集来比较BMC-ADMMCCD++

    4.1 有界矩阵填充(BMC)算法的比较

    在第一组实验中,我们比较了BMC-ADMM和最先进的矩阵填充算法BMA。虽然BMA在求解凸形式(1.4)时求解了非凸形式(1.3),但众所周知,由于当k足够大时有。因此,我们首先比较图2BMC-ADMMBMA的目标函数。

    我们设定,并尝试,并比较在所有数据集上的性能。在图2中,我们观察到我们的算法BMC-ADMM可以实现比BMA更低的目标函数值,其主要原因是BMA会陷入非平稳点,而我们的算法总是收敛到平稳点。在图2中,我们还比较了不同正则化参数BMC-ADMMBMA。结果表明,BMC-ADMM总能找到一个更好的目标函数值的解。

     

    2:对于不同值,在movielens100kFlixter(子集)上的收敛行为

     

    3:在movielensFlixster(子集)上测试k(不同值)的RMSE

     

    4:大数据集下RMSE测试

     

    2RMSE测试比较

    为了比较这两种方法的预测性能,我们在表2中列出了所有5个数据集上的均方根误差测试(RMSE),使用他们自己选择的最佳参数进行验证。结果表明,在大多数情况下,BMC-ADMM在除了Flixster子集以外的数据集上可以获得比BMA更好地RMSE。不幸的是,由于时间复杂度和巨大的内存需求,BMA无法扩展到完整的Flixster数据集。总之,我们观察到BMC-ADMMBMA更快,更准确,也更具拓展性。

    4.2 与标准矩阵填充的比较

    接下来我们在没有有界约束的大数据集上比较我们的算法BMC-ADMM和矩阵填充算法。我们选择Yu等人开发的用于完成矩阵填充的坐标下降解算器进行比较,并在表2中列出所有数据集上的结果。为了有一个公平的比较,我们尝试了不同的评级k=51030,并使用随机验证集为每个算法选择最佳正则化参数。表2中的结果表明,在大多数情况下BMC-ADMM由于其他方法。这意味着如果我们想要获得更好的预测精度,那么添加有界约束在实践中是非常有用的。

    4.3 可扩展性

    为了测试我们的BMC-ADMM的可扩展性,我们在更大的数据集上运行我们的算法,即movielens10mflixsterJester,结果如图4所示。较大的k通常会导致做更好的RMSE,但收敛速度更慢(见图4bc),有时候也会导致过度拟合,特别是当数据集中的用户或电影较少时(见图4a)。

    实验表明,我们的算法比标准矩阵分解法(无约束)慢,但比BMA快。

    4.4 BMC-ADMM的每个部分花费的时间

    3给出了我们实现的每个步骤的详细运行时间信息。W的更新决定了我们的运行时间,其时间复杂度为O(kmn)。注意到,对于公式(3.5),一旦我们得到Z的更新,就不需要对E进行明确的计算。因此,公式(3.5)没有运行时间。这里给出的结果验证了我们的复杂性分析,表明投影的计算(3.6)是算法的瓶颈。

     

    3:每次迭代中各个步骤的平均运行时间()

    5 讨论和总结

    在本文中,我们研究了有界矩阵分解的问题。指出了现有的有界矩阵分解BMA算法的收敛性问题,并提出了一种基于ADMM框架的新算法。实验结果表明,该算法比BMA具有更好的收敛性,在大多数情况下,可以达到较低的RMSE值。就运行时间和空间复杂度而言,我们的算法也优BMA,但比标准矩阵分解法(无限制约束)需要更多的时间。为了进一步加速我们的算法,我们可以使用并行计算来解决(3.6)子问题这一瓶颈。由于这一步是一个简单的元素投影,我们希望通过并行化来实现线性加速。


    展开全文
  • 经典低秩矩阵填充代码,包含FPC
  • 矩阵填充方法

    千次阅读 2018-03-18 09:32:45
    矩阵填充


    保存每行每列每斜行的状态

    hang[u].push_back(v);
    lie[v].push_back(u);
    xie1[maxn+v-u].push_back(min(u,v)); //左上到右下
    xie2[maxn+u+v].push_back(u-v); //左下到右上


    展开全文
  • python 实现矩阵填充 0

    千次阅读 2019-03-18 22:52:34
    python 实现矩阵填充 0 需求: 原矩阵 [[1 2 3] [4 5 6] [7 8 9]] 在原矩阵元素之间填充元素 0,得到 [[1. 0. 2. 0. 3.] [0. 0. 0. 0. 0.] [4. 0. 5. 0. 6.] [0. 0. 0. 0. 0.] [7. 0. 8. 0. 9.]] ...

    python 实现矩阵填充 0


    • 需求:

      原矩阵

    [[1 2 3]
     [4 5 6]
     [7 8 9]]
    

    在原矩阵元素之间填充元素 0,得到

    [[1. 0. 2. 0. 3.]
     [0. 0. 0. 0. 0.]
     [4. 0. 5. 0. 6.]
     [0. 0. 0. 0. 0.]
     [7. 0. 8. 0. 9.]]
    

    • 思路:

      先求出扩充矩阵的维度,再按照每一行每一列遍历,根据元素的索引规律依次赋值,最终实现新的扩充矩阵。这个思路实现如下:

    import numpy as np
    
    def PadMat(Ndim, Mat):
    	Brow = Bcol = 2*Ndim-1
    	B = np.zeros([Brow, Bcol])
    	for row in range(Brow):
    		if row%2 == 0:
    			for col in range(Bcol):
    				if col%2 == 0:
    					pos_c = int(col/2)
    					pos_r = int(row/2)
    					# print(row, col)
    					B[row, col] = Mat[pos_r, pos_c]
    				else:
    					B[row, col] = 0
    	return B
    
    
    # A = np.arange(9) + 1
    # A = A.reshape([3, 3])
    A = np.arange(16) + 1
    A = A.reshape([4, 4])
    # print(A.shape[0])
    N = Arow = Acol = A.shape[0]
    
    NewMat = PadMat(Ndim=N, Mat=A)
    print(A)
    print(NewMat)
    

    • 总结:

      这个思路很直接,但是循环套循环是一个很笨的办法,而且遍历也很慢。不知道网友有什么好的思路吗?

    展开全文
  • SET_SVT算法_矩阵填充中经典SET算法_矩阵填充SVT_will4oo_源码.zip
  • SET_SVT算法_矩阵填充中经典SET算法_矩阵填充SVT_will4oo_源码.rar
  • C++环形矩阵填充实现

    2021-01-20 03:44:42
    #include #include #include #include #include #include #include using namespace std; int main(void) { int n; while(cin >> n) { map<int> > tbl; for(int i = 0; i < n;... int
  • 针对现有算法在通用图像分辨率要求较高时重建效果不稳定的问题,提出一种基于稀疏表示与矩阵填充的多帧超分辨率图像重建算法.对自然图像库进行训练建立过完备词典对,并将低分辨率图像分成若干图像块,根据局部先验...
  • 转载自: https://blog.csdn.net/manduner/article/details/80564414一、矩阵填补(Matrix Completion) 矩阵填补的应用很广泛,论文《Matrix completion by deep matrix factorization》就给出了矩阵填补的两个应用...
  • 矩阵填充问题

    千次阅读 2017-06-07 15:48:00
     题目描述 填充如下形式的方阵:  1 16 15 14 13  2 17 24 23 12  3 18 25 22 11  4 19 20 21 10  5 6 7 8 9 ...输出填充后的矩阵,每个数字占4位。 输入样例 5
  • 低秩矩阵填充在wifi室内定位的应用与研究,李志鹏,杨旭东,近年来,移动应用日益发展,室内定位、导航等基于位置的服务的需求也随之迅速增长,而传统的室外定位方法在室内无法应用,使得室
  • 在奇异值阈值法的基础上,针对循环矩阵的特殊结构分别对一般低秩复循环矩阵和特殊低秩实循环矩阵作保结构的均值算法.首先给出构造低秩循环矩阵的方法;其次,给出了修正的保结构算法;最后通过数值实验验证结果.
  • 为改善这一现状,提出了一种基于低秩矩阵填充的MRI图像序列的去噪方法。针对混合噪声,通过在空间域和时域搜索和分组近似块,将去噪问题转换为低秩矩阵填充问题,使其不需要限定噪声的统计特性。实验结果表明,针对...
  • MatrixcompletionCode_SVT_FPC矩阵_低秩矩阵代码_矩阵填充代码_let7i8.zip
  • Matlab矩阵填充--Matlab interp2

    千次阅读 2015-12-14 12:02:51
    Matlab interp2 为Matlab的矩阵填充函数,

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 69,095
精华内容 27,638
关键字:

矩阵填充