MATRIX FACTORIZATION(矩阵分解)-正则化奇异值分解Regularized Singular Value Decomposition (RSVD)

  下面讲解介绍一种矩阵分解的方法,这个方法是非常实用的。

考虑一个m×n的矩阵R,现在是想找到一个UV矩阵,使其满足,(矩阵R可能是一个稀疏的矩阵)。

正规化的奇异值分解(the Regularized Singular Value Decomposition,RSVD)的方法被用来评价一个矩阵。下面给出正则化奇异值分解的极小化函数和参数求解的算法

     

最终将得到一个低维的矩阵UV,并且R≈U'V,达到分解的效果。

下面给出程序

main.m

clear all
clc
load('评分矩阵.mat');
R=pinfen;
lamda=0.02;   %正则参数
alpha=0.002; %学习率γ1
itrea=200; %迭代次数
K=20; % d
[U V lost] = matrix_factoriation(R,K,itrea,alpha,lamda);
plot(lost,'k-','linewidth',1.5);
xlabel('迭代次数');
ylabel('lost');
title('训练的损失函数的收敛情况');
grid on
matrix_factoriation.m

function [U V e]=matrix_factoriation(R,K,itrea,alpha,lamda)
[m n]=size(R);
U=rand(m,K);
V=rand(n,K);
V=V';
fprintf('%10s %8s %12s %15s\n','Iteration','alpha','lamda','error');
for step=1:itrea
    for i=1:m
        for j=1:n
            if R(i,j)>0
                eij=R(i,j)-U(i,:)*V(:,j);
                for k=1:K
                    U(i,k)=U(i,k)+alpha*(eij*V(k,j)-lamda*U(i,k));
                    V(k,j)=V(k,j)+alpha*(eij*U(i,k)-lamda*V(k,j));
                end
            end
        end
    end
    eR=U*V;
    e(step)=0;
    for i=1:m
        for j=1:n
            if R(i,j)>0
                e(step)=e(step)+(R(i,j)-U(i,:)*V(:,j)).^2;
                for k=1:K
                    e(step)=e(step)+(lamda/2)*((U(i,k).^2)+V(k,j).^2);
                    if e<0.001
                        break;
                    end
                end
            end
        end
    end
    fprintf('%6d %15s %13s %14d\n',step,alpha,lamda,e(step));
end

最终得到的结果如下


其中R为943×1682大小的矩阵,U为943×20大小的矩阵,V为20×1682大小的矩阵。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值