J'ai une matrice R que je veux estimer en utilisant la méthode de descente en gradient. Le code fonctionne bien pour une matrice de petite dimension (par exemple 100 x 1) mais il donne des valeurs de NaN lorsque j'augmente la dimension (par exemple 10x3). S'il vous plaît aider!Descente en gradient pour les petites et grandes valeurs de la matrice multidimensionnelle
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';
En fait, il s'agit d'un problème d'achèvement de la matrice pour remplir les entrées manquantes par rapport à la matrice originale R. Donc, mse 2 se situe entre les valeurs de l'original R et les valeurs de R R estimé. –
Je suis incapable de comprendre pourquoi les valeurs deviennent si grandes dans la matrice multidimensionnelle. –
Définissez un point d'arrêt dans la boucle for et parcourez-le pour voir comment les variables se développent. –