Kurzversion: Was ist die rechnerisch effizienteste Methode zur Schätzung des Modus eines mehrdimensionalen Datensatzes, der aus einer kontinuierlichen Verteilung entnommen wurde?
Lange Version: Ich habe einen Datensatz, dessen Modus ich abschätzen muss. Der Modus stimmt nicht mit dem Mittelwert oder Median überein. Ein Beispiel ist unten gezeigt, dies ist ein 2D-Beispiel, aber eine ND-Lösung wäre besser:
Derzeit ist meine Methode
- Berechnen Sie die Schätzung der Kerneldichte in einem Raster, das der gewünschten Auflösung des Modus entspricht
- Suchen Sie nach dem größten berechneten Punkt
Offensichtlich berechnet dies die KDE an vielen nicht plausiblen Punkten, was besonders schlecht ist, wenn es viele Datenpunkte mit hohen Dimensionen gibt oder ich eine gute Auflösung für den Modus erwarte.
Eine Alternative wäre die Verwendung eines simulierten Annealing, eines genetischen Algorithmus usw., um den globalen Peak in der KDE zu finden.
Die Frage ist, ob es eine intelligentere Methode gibt, um diese Berechnung durchzuführen.
Antworten:
Die Methode, die zur Rechnung für das passt, was Sie tun möchten, ist der Mean-Shift- Algorithmus. Im Wesentlichen beruht die mittlere Verschiebung auf der Bewegung entlang der Richtung des Gradienten, die nicht parametrisch mit dem "Schatten" eines gegebenen Kerns K geschätzt wird . Wenn also die Dichte f ( x ) durch K geschätzt wird , dann wird ∇ f ( x ) durch K ' geschätzt . Details von der Gradienten einer Kerndichteschätz werden dieses beschrieben Papier , das auch den Mean-Shift - Algorithmus zufällig einzuführen.K.' K. f( x) K. ∇ f( x ) K.'
Eine sehr detaillierte Darstellung des Algorithmus finden Sie auch in diesem Blogeintrag .
quelle
Wenn Ihr Hauptinteresse zweidimensionale Probleme sind, würde ich sagen, dass die Kernel-Dichteschätzung eine gute Wahl ist, da sie schöne asymptotische Eigenschaften hat (beachten Sie, dass ich nicht sage, dass es die beste ist). Siehe zum Beispiel
Für höhere Dimensionen (4+) ist diese Methode aufgrund der bekannten Schwierigkeit bei der Schätzung der optimalen Bandbreitenmatrix sehr langsam, siehe .
Das Problem mit dem Befehl
ks
im PaketKDE
besteht nun, wie Sie bereits erwähnt haben, darin, dass die Dichte in einem bestimmten Raster ausgewertet wird, was sehr einschränkend sein kann. Dieses Problem kann behoben werden, wenn Sie das PaketKDE
zum Schätzen der Bandbreitenmatrix verwenden, indem Sie beispielsweiseHscv
den Kernel-Dichteschätzer implementieren und diese Funktion dann mit dem Befehl optimierenoptim
. Dies wird unten anhand simulierter Daten und eines Gaußschen Kernels in gezeigtR
.Formbeschränkte Schätzer sind beispielsweise tendenziell schneller
Aber sie sind zu hoch für diesen Zweck.
Andere Methoden, die Sie in Betracht ziehen könnten, sind: Anpassen einer multivariaten endlichen Mischung von Normalen (oder anderen flexiblen Verteilungen) oder
Ich hoffe das hilft.
quelle
Kürzlich haben wir einen Artikel veröffentlicht, der einen schnellen konsistenten Modusschätzer vorschlägt.
Ich würde auch die neuen Schätzer für den Minimalvarianzmodus aus meiner jüngsten Arbeit vorschlagen
quelle