2016-04-22 20 views
0

Ich versuche eine Umkehrung von this 9x9 covariance matrix zu finden, damit ich es mit mahalanobis distance verwenden kann. Das Ergebnis, das ich von matrix inverse bekomme, ist jedoch eine Matrix voller 1.02939420e+16. Ich habe versucht herauszufinden, warum, wenn man bedenkt, dass Wolfram mir die richtige Antwort gegeben hat, und dies scheint etwas mit der Konditionsnummer der Matrix zu tun zu haben, die in diesem Fall 3.98290435292e+16 ist.Inverse einer Matrix mit hoher Bedingungsnummer suchen

Obwohl ich die Mathematik dahinter verstehen möchte, was ich wirklich in diesem Moment brauche, ist nur eine Lösung für dieses Problem, damit ich mit der Implementierung fortfahren kann. Gibt es einen Weg, wie man eine Inverse einer solchen Matrix findet? Oder ist es irgendwie möglich, eine inverse Kovarianzmatrix direkt aus Daten zu finden?

Edit: Matrix Daten (wie bei der Pastebin Link)

[[ 0.46811097 0.15024959 0.01806486 -0.03029948 -0.12472314 -0.11952018 -0.14738093 -0.14655549 -0.06794621] 
[ 0.15024959 0.19338707 0.09046136 0.01293189 -0.05290348 -0.07200769 -0.09317139 -0.10125269 -0.12769464] 
[ 0.01806486 0.09046136 0.12575072 0.06507481 -0.00951239 -0.02944675 -0.05349869 -0.07496244 -0.13193147] 
[-0.03029948 0.01293189 0.06507481 0.12214787 0.04527352 -0.01478612 -0.02879678 -0.06006481 -0.1114809 ] 
[-0.12472314 -0.05290348 -0.00951239 0.04527352 0.164018 0.05474073 -0.01028871 -0.02695087 -0.03965366] 
[-0.11952018 -0.07200769 -0.02944675 -0.01478612 0.05474073 0.13397166 0.06839442 0.00403321 -0.02537928] 
[-0.14738093 -0.09317139 -0.05349869 -0.02879678 -0.01028871 0.06839442 0.14424203 0.0906558 0.02984426] 
[-0.14655549 -0.10125269 -0.07496244 -0.06006481 -0.02695087 0.00403321 0.0906558 0.17054466 0.14455264] 
[-0.06794621 -0.12769464 -0.13193147 -0.1114809 -0.03965366 -0.02537928 0.02984426 0.14455264 0.32968928]] 
+0

Der von Ihnen angegebene Link funktioniert aufgrund der Firewall nicht für alle. Kannst du deine Matrix in das Thema posten? –

+0

@ColonBeauvel hat die Frage so bearbeitet, dass sie Daten enthält. – Raven

+0

Als solche gebe ich meine Antwort unten, die die großen Werte erklären, aber weiter gehen würde es interessant zu sehen, was Sie erreichen möchten, indem Sie versuchen, eine nicht umkehrbare Matrix zu invertieren ... –

Antwort

2

Die Matrix m Sie bieten hat eine Determinante 0 und ist daher uninvertible aus einer numerischen Sicht (und dies die große erklären Werte, die Sie haben, die zu Inf stoßen neigt):

In [218]: np.linalg.det(m) 
Out[218]: 2.8479946613617788e-16 

Wenn Sie Operationen der linearen Algebra/Problemlösung, tun beginnen rate ich zu stark che ck einige Grundkonzepte, die numerische Fehler/Fehler vermeiden würden: https://en.wikipedia.org/wiki/Invertible_matrix

+0

Ich bin mir eigentlich dieser Grundlagen bewusst, das Problem ist, dass ich einen Algorithmus auf Active Shape Model befolge, der davon ausgeht, dass diese Matrix inversibel sein wird. Daher habe ich nicht erwartet, dass es diese Grundbedingung nicht erfüllen würde. Die Daten sind im Grunde genommen ein abgetasteter Gradient aus mehreren Bildern um einen Orientierungspunkt und ich versuche ein statistisches Modell für diesen Punkt zu erstellen. Die Modell - Mittelwertvektor - und Kovarianzmatrix wird dann verwendet, um die beste Übereinstimmung mit einem anderen abgetasteten Vektor unter Verwendung der Mahalanobis - Distanz zu finden. Es gelingt jedoch nicht, die Umkehrung zu finden. – Raven

+1

hum ja es ist das verwendete Modell, das wegen der Matrix versagt. Sie sollten in diesem Fall einen anderen Ansatz wählen. Aber es ist auch gut, wenn Sie eine Determinante automatisch mit einer Schwelle vergleichen, wenn Sie eine Matrix invertieren müssen. Wenn also ein Fehler auftritt, können Sie leichter nachforschen! –

0

Sie stehen vor einem sehr wichtigen und grundlegenden mathematischen Problem. Wenn Ihre Methode eine nicht invertierbare Matrix ergibt, hat die Methode Schwierigkeiten. Die Methode versucht eine ill-posed problem zu lösen. Wahrscheinlich wurden alle gut gestellten Probleme im 19. Jahrhundert gelöst. Die häufigste Art, schlecht gestellte Probleme zu lösen, ist regularization. Manchmal kann Moore-Penrose pseudoinverse bequem sein. Scipy.linalg hat Pseudoinverse. Aber Pseudoinverse ist keine Abkürzung. Mit Pseudoinverse ersetzen Sie das nicht lösbare Problem A durch das lösbare Problem B. Manchmal kann die Lösung des Problems B erfolgreich statt der nicht existierenden Lösung des Problems A funktionieren, aber es ist eine Frage der mathematischen Forschung.

0

Zero determinant bedeutet, dass Ihre Matrix linear abhängige Zeilen (oder Spalten) hat. Mit anderen Worten, einige Informationen in Ihrem Modell sind redundant (es enthält übermäßige oder doppelte Informationen). Entwickeln Sie Ihr Modell neu, um Redundanz auszuschließen.