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