2017-10-16 139 views
0

我有一个矩阵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'; 

回答

0

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

+0

实际上,这是矩阵完成问题,以填补对原始矩阵R的缺失条目。因此,mse 2在原始R的值和估计的R R_est的值之间。 –

+0

我无法弄清楚为什么数值在多维矩阵中变得如此之大。 –

+0

在for循环中设置一个断点并逐步完成以查看变量的增长情况。 –