Voici la fonction MATLAB pour la factorisation matricielle par optimisation alternée (ALS) sans
utiliser de fonctions prédéfinies :
```
function [U, V] = als_factorization(R, k, max_iter)
[m, n] = size(R);
U = rand(m, k);
V = rand(n, k);
for i = 1:max_iter
% Fixer V et trouver U
for j = 1:m
V_transpose = V';
R_j = R(j, :)';
U(j, :) = (V_transpose * V) \ (V_transpose * R_j);
end
% Fixer U et trouver V
for j = 1:n
U_transpose = U';
R_j = R(:, j)’;
V(j, :) = (U_transpose * U) \ (U_transpose * R_j);
end
end
end
```
Cette fonction prend en entrée :
- `R` : la matrice originale
- `k` : le rang de factorisation
- `max_iter` : le nombre d'itérations maximum
Et retourne :
- `U` : la matrice de facteurs gauche
- `V` : la matrice de facteurs droite
Complexité :
- la complexité de la transpose predefini étant de O(nxm)
celle ci sera de O( max[(nxm)*n,(nxm)*m]*max_iter)
1. *Initialisation* : Les matrices U et V sont initialisées avec des valeurs aléatoires.
2. *Itération* : L'algorithme itère jusqu'à atteindre le nombre maximum d'itérations (max_iter).
3. *Fixer V et trouver U* : Pour chaque ligne j de R, on résout l'équation suivante pour trouver la
ligne correspondante de U :
- U(j, :) = (V^T * V) \ (V^T * R_j)
où V^T est la transposée de V, et R_j est la ligne j de R.
4. *Fixer U et trouver V* : Pour chaque colonne j de R, on résout l'équation suivante pour trouver la
colonne correspondante de V :
- V(j, :) = (U^T * U) \ (U^T * R_j)
où U^T est la transposée de U, et R_j est la colonne j de R.
5. *Répéter les étapes 3 et 4* jusqu'à atteindre le nombre maximum d'itérations.
*Principe* :
L'algorithme ALS fonctionne en alternant entre deux étapes :
- Fixer V et trouver U : on considère V comme fixe et on trouve la meilleure approximation de U
pour minimiser l'erreur entre R et U * V^T.
- Fixer U et trouver V : on considère U comme fixe et on trouve la meilleure approximation de V
pour minimiser l'erreur entre R et U * V^T.
En répétant ces deux étapes, l'algorithme converge vers une solution optimale pour U et V.
*Avantages* :
- L'algorithme ALS est simple à implémenter.
- Il est rapide pour les matrices de petite taille.
*Inconvénients* :
- L'algorithme ALS peut ne pas converger pour toutes les matrices.
- Il peut être sensible aux conditions initiales de U et V.