2009-11-06 13 views
9

Ich versuche, einige Bilder abhängig von den Winkeln zwischen Körperteilen zu clustern.MATLAB: Hilfe benötigt mit Self-Organizing Map (SOM) Clustering

Die Merkmale von jedem Bild extrahiert werden:

angle1 : torso - torso 
angle2 : torso - upper left arm 
.. 
angle10: torso - lower right foot 

Daher werden die Eingangsdaten eine Matrix der Größe 1057x10 ist, wo 1057 steht für die Anzahl der Bilder, und 10 steht für Winkel von Körperteilen mit Torso. Ähnlich ist ein testSet 821x10 Matrix.

Ich möchte, dass alle Zeilen in Eingabedaten mit 88 Clustern gruppiert werden. Dann werde ich diese Cluster verwenden, um zu finden, in welche Cluster TestData fällt?

In einer früheren Arbeit verwendete ich K-Means clustering, die sehr einfach ist. Wir bitten K-Means, die Daten in 88 Cluster zu bündeln. Und implementieren Sie eine andere Methode, die den Abstand zwischen jeder Zeile in Testdaten und den Zentren jedes Clusters berechnet und dann die kleinsten Werte auswählt. Dies ist der Cluster der entsprechenden Eingabedatenzeile.

Ich habe zwei Fragen:

(1) Ist es möglich, dies mit SOM in MATLAB zu tun? AFAIK SOMs dienen zum visuellen Clustering. Aber ich muss die tatsächliche Klasse jedes Clusters kennen, damit ich später meine Testdaten beschriften kann, indem ich auswerte, zu welchem ​​Cluster es gehört.

(2) Haben Sie eine bessere Lösung?

+1

Warum Sie wollen genau 88 Cluster? Was ist SOM? Was ist Ihr Problem - finden Sie die Winkel zwischen Körperteilen aus dem Bild, oder ist es der Clustering-Algorithmus? –

Antwort

16

Self-Organizing Map (SOM) ist eine Cluster-Methode, die als unbeaufsichtigte Variante des Artificial Neural Network (ANN) betrachtet wird. Es nutzt Wettbewerbs Lernen Techniken, um das Netzwerk zu trainieren

www.lohninger.com/helpcsuite/kohonen_network_-_background_information.htm

Sie von SOM denken kann (Knoten konkurrieren untereinander die stärkste Aktivierung einer bestimmten Daten angezeigt werden), als ob es aus einem Gitter von miteinander verbundenen Knoten besteht (quadratische Form, hexagonal, ..), wobei jeder Knoten ein N-dim-Vektor von Gewichtungen ist (dieselbe Dimensionsgröße wie die Datenpunkte, die wir gruppieren wollen).

Die Idee ist einfach; Wenn wir einen Vektor als Eingabe für SOM eingeben, finden wir den Knoten darin und aktualisieren dann seine Gewichtungen und die Gewichtungen der benachbarten Knoten, so dass sie sich denen des Eingabevektors nähern (daher der Name selbstorganisierend). Dieser Vorgang wird für alle Eingabedaten wiederholt.

plotsompos

Die gebildeten Cluster werden durch implizit definiert, wie die Knoten selbst organisieren und eine Gruppe von Knoten mit ähnlichen Gewichten bilden. Sie können leicht visuell gesehen werden.

plotsomnd

SOM ist in ähnlicher Weise wie die K-Means algorithm aber anders, dass wir nicht über eine feste Anzahl von Clustern durchzusetzen, anstatt wir die Anzahl und Form der Knoten im Netz angeben, dass wir wollen, dass es zu Anpassung an unsere Daten

Wenn Sie einen trainierten SOM haben und einen neuen Testeingabevektor klassifizieren möchten, weisen Sie ihn einfach dem nächsten (Abstand als Ähnlichkeitsmaß) Knoten im Raster zu (Beste übereinstimmende Einheit BMU), und geben als Vorhersage die Klasse [Majorität] der Vektoren an, die zu diesem BMU-Knoten gehören.

plotsomhits

Für MATLAB, können Sie eine Reihe von Werkzeugkästen finden, die SOM implementieren: