procrustes#
- scipy.spatial.procrustes(data1, data2)[Quelle]#
Prokrustes-Analyse, ein Ähnlichkeitstest für zwei Datensätze.
Jede Eingabematrix ist eine Menge von Punkten oder Vektoren (die Zeilen der Matrix). Die Dimension des Raumes ist die Anzahl der Spalten jeder Matrix. Gegeben zwei gleich große Matrizen, standardisiert procrustes beide so, dass
\(tr(AA^{T}) = 1\).
Beide Punktmengen sind um den Ursprung zentriert.
Prokrustes ([1], [2]) wendet dann die optimale Transformation auf die zweite Matrix an (einschließlich Skalierung/Dilatation, Rotationen und Spiegelungen), um \(M^{2}=\sum(data1-data2)^{2}\) zu minimieren, oder die Summe der Quadrate der punktweisen Unterschiede zwischen den beiden Eingabedatensätzen.
Diese Funktion wurde nicht für die Verarbeitung von Datensätzen mit unterschiedlicher Anzahl von Datenpunkten (Zeilen) entwickelt. Wenn zwei Datensätze unterschiedliche Dimensionalität (unterschiedliche Anzahl von Spalten) aufweisen, fügen Sie einfach Spalten von Nullen zur kleineren der beiden hinzu.
- Parameter:
- data1array_like
Matrix, n Zeilen stellen Punkte im k-dimensionalen Raum dar (data1 sind die Referenzdaten, nachdem sie standardisiert wurden, werden die Daten aus data2 transformiert, um dem Muster in data1 zu entsprechen (muss >1 eindeutige Punkte haben).
- data2array_like
n Zeilen von Daten im k-dimensionalen Raum, die an data1 angepasst werden sollen. Muss die gleiche Form
(numrows, numcols)wie data1 haben (muss >1 eindeutige Punkte haben).
- Rückgabe:
- mtx1array_like
Eine standardisierte Version von data1.
- mtx2array_like
Die Ausrichtung von data2, die am besten zu data1 passt. Zentriert, aber nicht unbedingt \(tr(AA^{T}) = 1\).
- disparityfloat
\(M^{2}\) wie oben definiert.
- Löst aus:
- ValueError
Wenn die Eingabearrays nicht zweidimensional sind. Wenn die Form der Eingabearrays unterschiedlich ist. Wenn die Eingabearrays null Spalten oder null Zeilen haben.
Siehe auch
scipy.linalg.orthogonal_procrustesscipy.spatial.distance.directed_hausdorffEin weiterer Ähnlichkeitstest für zwei Datensätze
Hinweise
Die Disparität sollte nicht von der Reihenfolge der Eingabematrizen abhängen, aber die Ausgabematrizen werden dies tun, da nur die erste Ausgabematrix garantiert so skaliert wird, dass \(tr(AA^{T}) = 1\).
Doppelte Datenpunkte sind im Allgemeinen in Ordnung, das Duplizieren eines Datenpunkts erhöht seine Wirkung auf die Prokrustes-Anpassung.
Die Disparität skaliert mit der Anzahl der Punkte pro Eingabematrix.
Referenzen
[1]Krzanowski, W. J. (2000). “Principles of Multivariate analysis”.
[2]Gower, J. C. (1975). “Generalized procrustes analysis”.
Beispiele
>>> import numpy as np >>> from scipy.spatial import procrustes
Die Matrix
bist hier eine rotierte, verschobene, skalierte und gespiegelte Version vona.>>> a = np.array([[1, 3], [1, 2], [1, 1], [2, 1]], 'd') >>> b = np.array([[4, -2], [4, -4], [4, -6], [2, -6]], 'd') >>> mtx1, mtx2, disparity = procrustes(a, b) >>> round(disparity) 0