0

Étant donné une matrice M de dimensions nxn, comment puis-je calculer une factorisation de rang inférieur telle que M = L.T * L, où L est de dimensions kxn. Jusqu'à présent, j'ai seulement vu cela fait en utilisant SVD, ce qui n'est pas exactement ce que je veux parce que la méthode me donne M = U S V, et UT! = S * V, par opposition à (LT) .T = = L.Calcul approximation de rang inférieur en Python

Une autre alternative pourrait être d'utiliser une forme d'optimisation pour trouver L, mais ce n'est pas simple car j'ai déjà essayé plusieurs méthodes d'optimisation de SciPy avec la différence M - LT * L sous la norme frobenius , et jusqu'à présent, je n'ai pas réussi. J'ai oublié d'ajouter qu'en utilisant la classe de factorisation matricielle non-négative de scikit, je suis capable d'y parvenir partiellement en passant L et L.T comme matrices candidates pour l'optimisation. Cependant, ma matrice M n'est pas non-négative, donc cette méthode ne fonctionne pas pour moi.

+0

vous dites ** "quelle est la meilleure façon de ..." ** mais qu'entendez-vous par ** meilleur **? Voulez-vous dire le plus rapide à exécuter? Le plus faible en complexité? Plus facile à lire et à comprendre? Plus facile à coder? - Vous avez aussi dit ** "J'ai essayé" x "mais ce n'est pas ce que je veux" ** Qu'est-ce qui ne va pas? Quel serait ce que tu veux? On dirait que SVD serait un excellent moyen de trouver la factorisation. –

+0

Merci pour votre commentaire, j'ai amélioré la question pour répondre à vos suggestions. – enzo

+0

Cette question semble plus appropriée à [math.stackexchange] (https://math.stackexchange.com).Je ne vote pas pour fermer parce que cette question concerne un algorithme, qui est dans les termes du site. Cependant, vous ne pouvez pas obtenir de bonnes réponses ici. –

Répondre

2

La réponse dépend de ce que vous savez sur la matrice.

Si la matrice est semi-définie positive, vous pouvez utiliser Cholesky Factorization, utiliser pivotant pour la stabilité. Dans d'autres hypothèses, une solution peut ne pas exister.


Un exemple où une solution ne peut pas exister, il n'y a pas de solution pour la matrice suivante:

[[0, 1], 
[0, 0]] 

Preuve: On suppose que la réponse existe. Ensuite, la solution ressemble à:

L = [[a, b], 
    [c, d]] 

Ainsi, le suivant doit être vrai:

  1. a*a + b*c == 0
  2. d*d + b*c == 0
  3. c * (a+d) == 0
  4. b * (a+d) == 1

Selon 3. (c == 0) or ((a+d) == 0)

Si c == 0, puis en fonction de 1. et 2. a == 0 et d == 0. Si cela est vrai, alors (a+d) == 0 ce qui rend 4. impossible. Si (a+d) == 0 puis 4. est impossible. En contradiction, nous savons qu'il ne peut y avoir de décomposition que vous demandiez avec cette matrice.