smacof#
- sklearn.manifold.smacof(dissimilarities, *, metric=True, n_components=2, init=None, n_init='warn', n_jobs=None, max_iter=300, verbose=0, eps=1e-06, random_state=None, return_n_iter=False, normalized_stress='auto')[source]#
Berechnet multidimensionales Scaling mit dem SMACOF-Algorithmus.
Der SMACOF (Scaling by MAjorizing a COmplicated Function) Algorithmus ist ein Multidimensional Scaling Algorithmus, der eine Zielfunktion (den *Stress*) mittels einer Majorisierungstechnik minimiert. Stress-Majorisierung, auch bekannt als Guttman-Transformation, garantiert eine monotone Konvergenz des Stresses und ist leistungsfähiger als traditionelle Techniken wie Gradientenabstieg.
Der SMACOF-Algorithmus für metrisches MDS lässt sich durch die folgenden Schritte zusammenfassen:
Setze eine initiale Startkonfiguration, zufällig oder nicht.
Berechne den Stress
Berechne die Guttman-Transformation
Iteriere 2 und 3 bis zur Konvergenz.
Der nichtmetrische Algorithmus fügt einen monotonen Regressionsschritt hinzu, bevor der Stress berechnet wird.
- Parameter:
- dissimilaritiesarray-like von Form (n_samples, n_samples)
Paarweise Distanzen zwischen den Punkten. Muss symmetrisch sein.
- metricbool, default=True
Berechne den metrischen oder nichtmetrischen SMACOF-Algorithmus. Wenn
False(d.h. nichtmetrisches MDS), werden Distanzen von 0 als fehlende Werte betrachtet.- n_componentsint, Standard=2
Anzahl der Dimensionen, in die die Distanzen eingetaucht werden sollen. Wenn ein
initArray bereitgestellt wird, wird diese Option überschrieben und die Form voninitwird verwendet, um die Dimensionalität des Einbettungsraums zu bestimmen.- initarray-like von Form (n_samples, n_components), default=None
Startkonfiguration der Einbettung, um den Algorithmus zu initialisieren. Standardmäßig wird der Algorithmus mit einem zufällig gewählten Array initialisiert.
- n_initint, default=8
Anzahl der Male, die der SMACOF-Algorithmus mit unterschiedlichen Initialisierungen ausgeführt wird. Die Endergebnisse sind die besten Ausgaben der Läufe, bestimmt durch den Lauf mit dem kleinsten finalen Stress. Wenn
initbereitgestellt wird, wird diese Option überschrieben und ein einzelner Lauf durchgeführt.Geändert in Version 1.9: Der Standardwert für
n_iterändert sich von 8 auf 1 in Version 1.9.- n_jobsint, default=None
Die Anzahl der Jobs, die für die Berechnung verwendet werden sollen. Wenn mehrere Initialisierungen verwendet werden (
n_init), wird jeder Lauf des Algorithmus parallel berechnet.Nonebedeutet 1, außer in einemjoblib.parallel_backendKontext.-1bedeutet die Verwendung aller Prozessoren. Siehe Glossar für weitere Details.- max_iterint, Standard=300
Maximale Anzahl von Iterationen des SMACOF-Algorithmus für einen einzelnen Lauf.
- verboseint, default=0
Level der Ausführlichkeit.
- epsfloat, default=1e-6
Die Toleranz in Bezug auf den Stress (normalisiert durch die Summe der quadrierten Einbettungsabstände), bei der Konvergenz erklärt wird.
Geändert in Version 1.7: Der Standardwert für
epshat sich von 1e-3 auf 1e-6 geändert, als Ergebnis einer Fehlerbehebung bei der Berechnung des Konvergenzkriteriums.- random_stateint, RandomState-Instanz oder None, default=None
Bestimmt den Zufallszahlengenerator, der zur Initialisierung der Zentren verwendet wird. Übergeben Sie eine Ganzzahl für reproduzierbare Ergebnisse über mehrere Funktionsaufrufe hinweg. Siehe Glossar.
- return_n_iterbool, Standard=False
Ob die Anzahl der Iterationen zurückgegeben werden soll oder nicht.
- normalized_stressbool oder „auto“, default=„auto“
Ob der normalisierte Stresswert (Stress-1) anstelle des rohen Stresses zurückgegeben werden soll. Standardmäßig gibt metrisches MDS den rohen Stress zurück, während nichtmetrisches MDS den normalisierten Stress zurückgibt.
Hinzugefügt in Version 1.2.
Geändert in Version 1.4: Der Standardwert änderte sich von
Falsezu"auto"in Version 1.4.Geändert in Version 1.7: Normalisierter Stress wird jetzt auch für metrisches MDS unterstützt.
- Gibt zurück:
- Xndarray von Form (n_samples, n_components)
Koordinaten der Punkte in einem
n_components-Raum.- stressfloat
Der endgültige Wert des Stresses (Summe der quadrierten Abstände der Disparitäten und der Abstände für alle eingeschränkten Punkte). Wenn
normalized_stress=True, wird Stress-1 zurückgegeben. Ein Wert von 0 bedeutet „perfekte“ Anpassung, 0,025 exzellent, 0,05 gut, 0,1 fair und 0,2 schlecht [1].- n_iterint
Die Anzahl der Iterationen, die dem besten Stress entsprechen. Wird nur zurückgegeben, wenn
return_n_iteraufTruegesetzt ist.
Referenzen
[1]„Nonmetric multidimensional scaling: a numerical method“ Kruskal, J. Psychometrika, 29 (1964)
[2]„Multidimensional scaling by optimizing goodness of fit to a nonmetric hypothesis“ Kruskal, J. Psychometrika, 29, (1964)
[3]„Modern Multidimensional Scaling - Theory and Applications“ Borg, I.; Groenen P. Springer Series in Statistics (1997)
Beispiele
>>> import numpy as np >>> from sklearn.manifold import smacof >>> from sklearn.metrics import euclidean_distances >>> X = np.array([[0, 1, 2], [1, 0, 3], [2, 3, 0]]) >>> dissimilarities = euclidean_distances(X) >>> Z, stress = smacof( ... dissimilarities, n_components=2, n_init=1, eps=1e-6, random_state=42 ... ) >>> Z.shape (3, 2) >>> np.round(stress, 6).item() 3.2e-05