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

For-Schleife für dbscan

 

TimSchroeter
Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 20.07.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.07.2021, 19:14     Titel: For-Schleife für dbscan
  Antworten mit Zitat      
Hey Leute, ich bin relativ neu in Matlab und hätte eine Frage zur for-schleife welches ich nicht gelöst bekomme.

Und zwar möchte ich mehrere dbscan mit unterschiedlichen Parametern (Epsilon und minpts) berechnen lassen bzw. die Mittelwerte aus den Silhouetten und Sie mir in einer Matrix ausgeben lassen.
Bsp.
Epsilon | Minpts | mean(silhouette)
2 | 5 | xxx
2 | 10 | xxx
. | . | .
. | . | .
. | . | .
Hier erstmal die Anfänge die ich gemacht habe dort kommt schon die erste Fehlermeldung und mit der Matrix habe ich deswegen noch nicht weiter probiert.

"Unable to perform assignment because the left and right sides have a different number of elements."

Code:
%
z = 1;
for n = 5:5:105
    for d = 2:0.1:4
        idx(z) = dbscan(DataNorm,d,n);
        s(z) = silhouette(DataNorm,idx);
        mean(z) = mean(s);
        z = z+1;
    end
end
 


Wäre sehr dankbar wenn mir einer Helfen könnte oder mir evtl. ein paar andere Beiträge empfiehlt die dazu passen woran ich mir das selber erarbeiten kann (Habe schon sehr lange gesucht)

MfG Tim
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 20.07.2021, 20:29     Titel:
  Antworten mit Zitat      
Hallo,

Ohne ein beispielhaftes DataNorm ist das Problem nicht genau nachvollziehbar.

Zitat:
"Unable to perform assignment because the left and right sides have a different number of elements."

In welcher Zeile denn?

Die Zeile mean(z) = mean(s); sieht sehr merkwürdig aus. mean ist eine Funktion, und das Ergebnis weist du einer Variable mit gleichem Namen zu? Das muss schief gehen. Gibt doch so viele andere Namen, z.B.
Code:
mittel(z) = mean(s);


Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
TimSchroeter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 20.07.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.07.2021, 07:26     Titel:
  Antworten mit Zitat      
Hallo Harald, danke für die schnelle Antwort. Da ich gar nicht die idx und s als Laufvariable brauche habe ich das rausgenommen und die Fehlermeldung trat nicht mehr auf da DataNorm ein normalisierte Matrix aus einer 3000x11 Matrix ist ist die Interpretierbarkeit glaube eh schwierig. Die Lösung war mal wieder viel einfacher als gedacht mit mittel(z) = mean(s) funktioniert es und er schreibt mir das in ein Vektor.

Danke Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
TimSchroeter
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 3
Anmeldedatum: 20.07.21
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 21.07.2021, 09:05     Titel:
  Antworten mit Zitat      
Falls es noch jemanden Interessiert habe das so gelöst
Code:
%

%% DBSCAN

Epsilonstart = 2;
Epsilonschritt = 0.1;
Epsilonende = 4;
Minptsstart = 5;
Minptsschritt = 5;
Minptsende = 105;
LaengeEpsilon = length([Epsilonstart:Epsilonschritt:Epsilonende]);
LaengeMinpts = length([Minptsstart:Minptsschritt:Minptsende]);
Matrix = zeros(LaengeMinpts,2*LaengeEpsilon);
Matrix(:,1) = ([Minptsstart:Minptsschritt:Minptsende]);
y = 1;
z = 1;
for d = Epsilonstart:Epsilonschritt:Epsilonende
    z = 1;
    for n = Minptsstart:Minptsschritt:Minptsende
            idx = dbscan(DataNorm,d,n);
            s = silhouette(DataNorm,idx);
            Mittel(z) = mean(s);
            Epsilon(z) = d;
            Minpts(z) = n;
            Matrix(z,2*y) = Epsilon(z);
            Matrix(z,1+(2*y)) = Mittel(z);
            z = z+1;
    end
    y = y+1;
end
 


Somit bekomme ich eine schön sortierte Matrix wie ich das wollte.

MfG
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 - 2024 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.