2016-04-05 3 views
1

Ich möchte ein Gauss'sches Mischungsmodell mit Python an eine Menge gewichteter Datenpunkte anpassen.python Anpassen von gewichteten Daten mit dem Gaußschen Mischungsmodell (GMM) mit minimaler Kovarianz

Ich versuchte sklearn.mixture.GMM(), die gut funktioniert, außer für die Tatsache, dass es alle Datenpunkte gleichgewichtig ist. Kennt jemand eine Möglichkeit, den Datenpunkten in dieser Methode Gewichte zuzuweisen? Ich habe versucht, Datenpunkte mehrmals zu verwenden, um "ihr Gewicht zu erhöhen", aber dies scheint für große Datensätze ineffektiv zu sein.

Ich dachte auch über die Implementierung des EM-Algorithmus selbst, aber dies scheint viel langsamer als z. die obige GMM-Methode und würde die Rechenzeit für große Datensätze extrem erhöhen.

Ich entdeckte gerade die opencv-Methode für den EM-Algorithmus cv2.EM(). Dies funktioniert wieder gut, hat aber das selbe Problem wie sklearn.mixture.GMM und außerdem scheint es keine Möglichkeit zu geben, das Minimum der für die Kovarianz erlaubten Werte zu ändern. Oder gibt es eine Möglichkeit, das Kovarianzminimum auf z. 0,001? Ich hoffte, dass es möglich wäre, mit dem Probe-Parameter die Gewichte den Daten zuzuordnen, aber das scheint nur ein Ausgabeparameter zu sein und hat keinen Einfluss auf den Anpassungsprozess, nicht wahr? Die Verwendung von probs0 und das Starten des Algorithmus mit dem M-Schritt unter Verwendung von trainM hat ebenfalls nicht geholfen. Für probs0 verwendete ich eine (Anzahl von Datenpunkten) x (Anzahl von GMM-Komponenten) Matrix, deren Spalten identisch sind, während die Gewichtungs-Parameter für die Datenpunkte in die Zeile geschrieben sind, die dem Datenpunkt entspricht. Dies hat das Problem auch nicht gelöst. Es ergab sich lediglich ein Mischungsmodell, in dem alle Mittelwerte 0,

Hat jemand eine Idee, wie man die oben genannten Methoden manipuliert oder kennt jemand eine andere Methode, so dass der GMM mit gewichteten Daten ausgestattet werden kann?

Danke, Jane

+0

GMM kann leicht erweitert werden, um Gewichte zu unterstützen; aber Sie müssen wahrscheinlich eine Implementierung dafür ändern. Ich würde mit einem Java wie ELKI gehen: pure Python ist zu langsam, Cython nicht einfach zu beginnen, und C erfordert eine Menge Debugging-Erfahrung. Java ist einfacher und bietet eine etwas schlechtere Leistung als C. Aber was meinen Sie mit "minimaler Kovarianz" - warum wäre 0 Kovarianz schlecht, und was ist mit negativer Kovarianz? –

+0

0 Kovarianz ist schlecht, weil sie eine Unendlichkeitswahrscheinlichkeit verursacht. Ein Modell, bei dem ein Mittelwert nur auf einen Datenpunkt mit 0 Kovarianz gesetzt wird, würde das beste Ergebnis erzielen (maximale Wahrscheinlichkeit), selbst wenn es definitiv nicht die "richtige" Lösung ist um die Daten zu beschreiben und nicht was gewünscht wird. Zusätzlich möchte ich das Ergebnis nachbearbeiten und daher wäre es nett, das Minimum der Kovarianz selbst zu bestimmen. – JaneD

+0

Nein. Solange Sie Varianz haben. Kovarianz ist Korrelation. –

Antwort

Verwandte Themen