对于多维矩阵的小值和大值的梯度下降

时间:2017-10-16 13:27:11

标签: matlab matrix gradient-descent

我有一个矩阵R,我想用梯度下降法估计。该代码适用于小维矩阵(例如100x1),但它随着我增加维度(例如10x3)而给出NaN值。请帮忙!

R =[196,242,3;186,302,3;22,377,1;244,51,2;166,346,1;298,474,4;115,265,2;253,465,5;305,451,3;6,86,3];
N = length(R);
M = size(R,2);
K = 3;

P = rand(N,K);
Q = rand(M,K);
alpha = 0.002;
beta = 0.02;


for iter = 1 : 5000
e = R - P*Q';
P_new = P + 2*alpha*(e*Q-beta*P);
Q_new= Q + 2*alpha*(e'*P-beta*Q);
mse2(iter) = norm(R - P*Q')/norm(R); 

P=P_new;
Q=Q_new;
end

R_est = P*Q';

1 个答案:

答案 0 :(得分:0)

你的问题在于for循环。最大的双matlab可以存储1.7977e+308,在循环的7次运行之后,P和Q的值大约为10 ^ 101,并且在8次运行之后inf。我不确定估计矩阵是什么意思,但是你的nan值来自P an Q增长如此之快的方式。另外需要注意的是,mse2变量不会被使用。它的目的是什么?