2016-05-20 11 views
1

Ich habe Bilder, die ich segmentiere, indem ich ein Gaussian-Mischungsmodell von scikit-learn verwende. Einige Bilder sind beschriftet, daher habe ich ein gutes Stück vorheriger Informationen, die ich gerne verwenden würde. Ich würde gerne ein halb-überwachtes Training eines Mischmodells durchführen, indem ich einige der Cluster-Aufgaben im Voraus stelle.Halb-überwachtes Gauß-Mischmodell-Clustering in Python

Aus der Matlab-Dokumentation kann ich sehen, dass Matlab ermöglicht, Anfangswerte festzulegen. Gibt es irgendwelche Python-Bibliotheken, insbesondere scikit-learn Ansätze, die dies zulassen würden?

Antwort

1

Der Standard-GMM funktioniert nicht halbüberwacht. Die von Ihnen erwähnten Anfangswerte sind wahrscheinlich die Anfangswerte für die Mittelwertvektoren und Kovarianzmatrizen für die Gaussiane, die durch den EM-Algorithmus aktualisiert werden.

Ein einfacher Hack wird sein, Ihre etikettierten Daten anhand ihrer Bezeichnungen zu gruppieren und die Mittelwertvektoren und Kovarianzmatrizen einzeln zu schätzen und diese als Initialwerte an Ihre MATLAB-Funktion zu übergeben (scikit-learn erlaubt dies soweit nicht Es ist mir bewusst). Hoffentlich wird dies Ihre Gaussianer an den "richtigen Orten" positionieren. Der EM-Algorithmus wird dann von dort aus diese Parameter anpassen.

Der Nachteil dieses Hacks besteht darin, dass er nicht garantiert, dass er Ihre tatsächliche Etikettenzuordnung respektiert. Daher ist die Wahrscheinlichkeit, dass ein Datenpunkt einer bestimmten Clusterbezeichnung zugewiesen wird, einer anderen zugewiesen Cluster. Rauschen in Ihren Merkmalsvektoren oder Beschriftungen könnte auch dazu führen, dass Ihre anfänglichen Gaussianer eine viel größere Region abdecken, als angenommen wird, wodurch der EM-Algorithmus schwer beschädigt wird. Wenn Sie nicht genügend Datenpunkte für einen bestimmten Cluster haben, sind Ihre geschätzten Kovarianzmatrizen möglicherweise auch Singular, was diesen Trick komplett zunichte macht.

Sofern es nicht zwingend erforderlich ist, dass Sie GMM zum Clustern Ihrer Daten verwenden (z. B. weil Sie sicher wissen, dass Gaussianer Ihre Daten gut modellieren), können Sie vielleicht einfach die semi-supervised methods in scikit-learn ausprobieren. Diese propagieren die Labels basierend auf Ähnlichkeiten zu anderen Datenpunkten. Allerdings bezweifle ich, dass dies große Datenmengen verarbeiten kann, da die Graph-Laplace-Matrix aus Paaren von Samples erstellt werden muss, es sei denn, es gibt einen speziellen Implementierungstrick, um dies in scikit-learn zu handhaben.

+0

Vielen Dank für die Analyse, dass ich zustimme, scheint die Idee zu unterstützen, dass dies nicht so viel hilft. Ich habe grundsätzlich erwartet, dass es das tut, was Sie beschrieben haben, was für meine Anwendung ausreichen könnte. Danke auch für den Hinweis, was schiefgehen könnte, und Hinweise auf die interessanten halb-überwachten Methoden, die bereits in scikit-learn enthalten sind. Ich werde mir das in MATLAB ansehen, weil du ganz recht hast, es scheint so, als ob das nicht in scikit-learn existiert. – avpenn

+0

@ Process7 Sie sind herzlich willkommen. – lightalchemist