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

Punkte mit minimalem Abstand finden und gruppieren

 

Michaela_152
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 31.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2017, 10:31     Titel: Punkte mit minimalem Abstand finden und gruppieren
  Antworten mit Zitat      
Hallo,

ich möchte aus 150 Punkten immer den nächstgelegenen finden und zu verschiedenen Teilmengen zusammenfügen, solange bis ein bestimmter Grenzwert nicht überschritten wird.

D. h. Jeder der 150 Punkte soll zuerst eine eigene Teilmenge bilden, dann jeweils die Punkte gefunden werden, die kleineren Abstand zu dem Punkt als 1.2 haben und zu den jeweiligen Teilmengen hinzugefügt werden.

So sollen verschiedene Cluster gebildet werden.

Hat jemand eine Idee, wie das funktionieren könnte?

Danke und liebe Grüße

Michi
Private Nachricht senden Benutzer-Profile anzeigen


TTom
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.06.2017, 17:26     Titel:
  Antworten mit Zitat      
Hallo,

den Abstand kannst du z.B. mit der euklidischen Distanz berechnen ( pdist )

Wenn ich dich richtig verstehe hast du zu Beginn 150 Klassen, pro Klasse ein Punkt, und diese sollen so weit wie möglich reduziert werden, eben mit der gegebenen Bedingung "Abstand < 1.2"?

Ich würde das so machen, dass du Punkt für Punkt durchgehst, also mittels einer for-Schleife und schaust, zu welchem der Punkte der Abstand am geringsten ist und die Bedingung erfüllt. Zu der ensprechenden Klasse ordnest du den neuen Punkt dann zu.

Gruß Tom
Private Nachricht senden Benutzer-Profile anzeigen
 
Michaela_152
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 31.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2017, 20:16     Titel:
  Antworten mit Zitat      
Hallo,

ja genau, das habe ich mir ähnlich vorgestellt, nur leider bekomme ich das nicht hin, da ich Anfänger bin.

Hier mal mein Code, wie ich es bisher habe:

Code:

X = randn(150,2);  % Als Beispiel, da meine Daten aus einer Datei eingelesen werden
d = pdist(X);          % Paarweise Abstände
D = squareform(d);  % Distanzmatrix
threshold = 1.2;
n = length(X);
for i = 1:n
    T = {};
    T = [X(i,:)];  % Jeder Punkt bildet anfänglich ein eignes Cluster
    while size(T) ~= size(X)
            X(i,:) = [];
            edist = sqrt((X(i,1)-X(i+1,1))^2+(X(i,2)-X(i+1,2))^2);
            if edist < threshold
               T = [T; X(i+1,:)]
            end
          disp(T)
    end
end


Nur leider weis ich nicht, wie ich die Teilmengen zwischenspeichern kann und die größte Teilmenge T als erstes Cluster betrachten kann. Leider funktioniert meine Schleife auch noch nicht so richtig.

Ich dachte auch eigentlich die Schleife ist irgendwie mit der Distanzmatrix möglich, aber ich weis nicht, wie das funktionieren könnte, weil ich dann die Indices benötigen würde, zwischen welchen Punkten die Abstände sind.
Private Nachricht senden Benutzer-Profile anzeigen
 
TTom
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 19.04.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.06.2017, 21:26     Titel:
  Antworten mit Zitat      
Hallo,

was genau hat die innere Schleife für einen Sinn?
Teilmengen kannst du am besten in Cell-Arrays zwischenspeichern.
Was heißt "als erstes Cluster"?
Wie die Matrix "D" aufgebaut ist, kannst du am besten in der Hilfe nachschauen.
Die erste Spalte ist immer der Abstand aller Punkte zu Punk 1, die zweite Spalte der Abstand zu Punkt 2 usw.
Es wäre hilfreich, wenn du das Problem etwas genauer beschreibst.

Gruß Tom
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.