WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Wie Cluster erstellen

 

felix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2012, 11:38     Titel: Wie Cluster erstellen
  Antworten mit Zitat      
Hallo,

ich hab eine Matrix A vorliegen , wenn ich die Punkte aus der Matrix An plotte, erhalte ich mehrere Partikelschwärme die sich an unterschiedlichen Orten anhäufen (siehe Anhang).

Wie kann ich erreichen, dass ich die Punkte, die alle beieinander liegen, einer Gruppe zurodnen kann=

wäre echt dringend Sad

AM.png
 Beschreibung:

Download
 Dateiname:  AM.png
 Dateigröße:  7.97 KB
 Heruntergeladen:  675 mal


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.03.2012, 11:51     Titel:
  Antworten mit Zitat      
hab von sowas keine ahnung. vieleicht giebts schon ne lösung im file exchange oder in einer bildbearbeituns toolbox. meine idee wäre ein ansatz mit hist über die x und y komponenten. in so einer punktwolke häufen sich ja die y werte. vieleicht kann man aus den maxima der hist funktione dann die orte der woken ablesen. die zuordnung zu den wolken wäre dann nur noch an welchen werten die koordinaten am dichtesten liegen. vieleicht könnten man auch für jeden punkti die abstände zu den anderen berechen und danach sortieren.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.03.2012, 12:04     Titel:
  Antworten mit Zitat      
Hallo,

es gibt verschiedene Möglichkeiten des Clusterings, z.B. mit kmeans (Statistics Toolbox). Das erscheint mir hier das sinnvollste.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
felix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.03.2012, 12:32     Titel:
  Antworten mit Zitat      
Danke, erstmal!
Wenn meine Matrix z.B. so aussieht

Die ungeraden Zeilen entsprechen den x-Werten und ei drunterliegenden Werte den y-Werten.
Code:
A =

    16    19     8    14     6     9    14    19    18    16     7    nan
    18    19    18    15     1     8    15     7    19     5    17    nan
     3    nan   nan  15     2    15     6    12    11    19  nan   nan
    18   nan   nan   8    16    16    14     4     3     7    nan   nan
    13    19    13    13    14     4    13    15     3    4    18    11
     2    10     1     3       6    10     3     5     5     5     6     16
     6    16     17   14    19     9     2    10    17    12    15    19
    11     3     19    1     1     13    10    14     5     9    15     3



Ich hab das mit dem Befehl
Code:
IDX = kmeans(A,5)
versucht, damit ich 5 Cluster bekomme. Doch leider bekomme ich die Fehlermeldung:
Zitat:
Warning: Ignoring rows of X with missing data.
> In kmeans at 128
Error using kmeans (line 228)
X must have more rows than the number of clusters.


Kann mir jemand helfen?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 28.03.2012, 14:02     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Die ungeraden Zeilen entsprechen den x-Werten und ei drunterliegenden Werte den y-Werten.

... und woher soll der kmeans-Befehl das nun wissen? Du musst dich bei den Befehlen schon nach dem Format richten, dass sie erwarten, und nicht umgekehrt Wink

Warum arbeitest du mit deinen Daten eigentlich nicht immer so wie mit B in diesem Fall? Das ist doch viel naheliegender? Mal ganz davon abgesehen, dass du die Daten so direkt in viele MATLAB-Befehle stecken kannst.
Code:

B = reshape(A, 2, [])';
BIDX = kmeans(B, 5);
AIDX = reshape(BIDX, size(A,1)/2, size(A,2))
gscatter(B(:,1), B(:,2), BIDX)


Übrigens: standardmäßig wählt kmeans die centers (siehe doc) zufällig, d.h. es kommt bei jedem Durchlauf etwas leicht anderes heraus. Um das zu vermeiden, solltest du die centers selbst wählen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
felix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.03.2012, 09:49     Titel:
  Antworten mit Zitat      
Hallo,

ich hab mir das doc durchgelesen. Ich sehe aber keine Möglichkeit augezeigt, wie ich meine centers selber vorgeben kann.

Z.B. könnte ich

Code:
[IDX,C,sumd] = kmeans(X,k)

benutzen.

Da werden mir aber in der Matrix C nur die Koordinaten der Center ausgegeben. Aber wie kann ich das vorgeben?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.03.2012, 08:28     Titel:
  Antworten mit Zitat      
Hallo,

über die Option 'start' (ganz unten in der Parameter-Value - Liste).

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
felix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2012, 09:28     Titel:
  Antworten mit Zitat      
Danke
Ich hab das jetzt so gemacht:

Code:
B = reshape(A, 2, [])';
[BIDX, C, sumD] = kmeans(B, 33, 'start', K);
AIDX = reshape(BIDX, size(A,1)/2, size(A,2))
gscatter(B(:,1), B(:,2), BIDX)



Müsste es so nicht eigentlich funktionieren.
Die Matrix K beinhaltet die Koordinaten der cluster-centers.
Mit sumD würde ich gern den mittleren Abstand innerhalb eines Clusters berechnen.
Ich bekomme die Fehlermeldung
Code:
Warning: Ignoring rows of X with missing data.
> In kmeans at 128
  In kurzertest_BIDX at 2
Error using kmeans/batchUpdate (line 376)
Empty cluster created at iteration 1.

Error in kmeans (line 280)
        converged = batchUpdate();

Error in kurzertest_BIDX (line 2)
[BIDX, C, sumD] = kmeans(B, 33, 'start', K);
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.03.2012, 10:32     Titel:
  Antworten mit Zitat      
Hallo,

kann ich ohne die Daten auch nicht sagen, wo hier das Problem sein sollte (A und K). Mir erscheint aber die Anzahl der Cluster (33) sehr hoch!

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
felix

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.03.2012, 11:01     Titel:
  Antworten mit Zitat      
Hallo Harald

im Anhang habe ich die Matrizen A und K hinzugefügt.

grüße
felix

K.rar
 Beschreibung:

Download
 Dateiname:  K.rar
 Dateigröße:  680 Bytes
 Heruntergeladen:  337 mal
A.rar
 Beschreibung:

Download
 Dateiname:  A.rar
 Dateigröße:  4.8 KB
 Heruntergeladen:  329 mal
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.03.2012, 11:23     Titel:
  Antworten mit Zitat      
Hallo,

der Grund für die Fehlermeldung sollte hier klar werden:

Code:
scatter(K(:,1), K(:,2))
hold on
scatter(B(:,1), B(:,2), 'g')


In der Doku wird beschrieben, dass man das Verhalten bei leeren Clustern beeinflussen kann (Option 'emptyaction').

Code:
[BIDX, C, sumD] = kmeans(B, 33, 'start', K, 'emptyaction', 'drop');


Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.