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

efiizienterer Code -> Vektorisierung??

 

Christina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2012, 19:31     Titel:
  Antworten mit Zitat      
Hallo Harald,

ach jetzt weiß ich endlich was ihr die ganze Zeit gemeint habt -.- mir war, warum auch immer, nicht bewusst dass in jeder i-Iteration der wert von K aus der vorherigen iteration übernommen wird.... DAS DARF NATÜRLICH NICHT SEIN!!!

ich habe aber noch eine Frage zu deinem code:
Code:
W = exp(-sum(bsxfun(@minus,x_predict(i,:),x_train).^2,2)/c);


warum hast du hier, in Vergleich zu meinem:
Code:
W = exp(bsxfun(@rdivide,(-sum((bsxfun(@minus,x_predict(i,:),x_train)).^2 , 1)),c));


das bsxfun(@rdivide,...,c) weggelassen? was ich doch hier bräuchte ist, dass der zeilenvektor (-sum(bsxfun(@minus,x_predict(i,Smile,x_train).^2,2), also jedes element, durch jeden der einzelnen einträge in c dividiert wird und somit eine Matrix W entsteht, in der in jeder spalte, W für unterschiedliche h steht. Funktioniert das nciht so, wie ich das gemacht habe?

Vielen vielen Dank für eure Hilfe und vor allem GEDULD!


Christina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2012, 19:40     Titel:
  Antworten mit Zitat      
ok in deiner zweiten version is es wieder drin =) Hab das vorher nicht gesehen. Ich werde es gleich mal durchlaufen lassen und schauen was so für werte raus kommen. melde mich dann nochmal.

DANKE =)
 
Christina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2012, 20:09     Titel:
  Antworten mit Zitat      
Harald,
ich bekomme in deinem Code eine Fehlermeldung, und finde einfach nicht heraus, wo die her kommt bzw warum sie entsteht

Zitat:
Subscripted assignment dimension mismatch.

Error in ==> k_hb2 at 24
W(:,I) = exp(-sum(bsxfun(@minus,x_predict(i,Smile,x_train).^2,2)/c(I));


Kann mir nciht erklären, was das bedeuten soll...
 
Harald
Forum-Meister

Forum-Meister


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

Bei mir läuft der Code durch. Hast du Änderungen vorgenommen?

Die Fehlermeldung bedeutet, dass du etwas zuweisen möchtest, was von der Größe her nicht zueinander passt - beispielsweise 9 Werte in eine Spalte, die nur 8 Stellen hat.

Ich würde mal den Debugger laufen lassen und so nachsehen.

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.10.2012, 21:34     Titel:
  Antworten mit Zitat      
nein habe nichts geändert. Hast du es auch komplett durchlaufen lassen, also mit allen funktionen und smoothingParameter2? Hast du eventuel in smoothingParameter2 was geändert?

werde es wohl dann mal debuggen, kann mir nur absolut nicht vorstellen was er da für ein problem haben soll...
 
Harald
Forum-Meister

Forum-Meister


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

ich hatte übersehen, dass in smoothingParameter2 die k_*.m zwei Mal aufgerufen wird. Den ersten Aufruf hat meine Version problemlos mitgemacht, den zweiten nicht.
Dort ist es dann zum Problem geworden, dass ich W falsch vorbelegt hatte. Der Debugger hat mir netterweise bei der Fehlersuche geholfen Wink

Neuer Versuch im Anhang.

Grüße,
Harald

Anmerkungen: es scheint, dass diese neue Version für nur einen h-Wert langsamer ist. Da kannst du also evtl. eine andere Version verwenden. Mir ist allerdings ohnehin nicht klar, wieso du das dann nochmal laufen lassen musst.
Und noch was: du optimierst, wenn ich das richtig sehe, h durch "durchprobieren". Wäre da nicht vielleicht ein Optimierungsalgorithmus besser?
Und falls wirklich nur diese speziellen h zulässig sind: muss man da immer alle durchprobieren, oder könnte man unter bestimmten Bedingungen (z.B. es wird zwei Mal nacheinander schlechter) vorzeitig abbrechen?


k_hb.m
 Beschreibung:

Download
 Dateiname:  k_hb.m
 Dateigröße:  1.2 KB
 Heruntergeladen:  292 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Christina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2012, 08:32     Titel:
  Antworten mit Zitat      
Halla Harald, ich hatte gestern abend auch mit dem debugger festgestellt, dass der erste aufruf ohne probleme läuft nur beim zweiten nicht mehr... nur ich war leider nicht so schnell mit dem heraus finden woran es gelegen hat Wink

In wie fern wurde den w falsch vorbelegt?

Zitat:
Mir ist allerdings ohnehin nicht klar, wieso du das dann nochmal laufen lassen musst.

Ich muss es nochmal durchlaufen lassen, denn im ersten durchlauf wird nur der optimale schätzer mit x_testing, also mit der hälfte aller x_train daten, und nicht mit dem eigentlich x_predict bestimmt. den zweiten durchlauf muss ich dann machen, um mit optimalen h dann auch die richtigen werte des schätzers zu bekommen und nicht nur werte von den testdaten. Leider darf ich h auch nur so bestimmen, da ich hier den empirischen fehler bestimmen muss und h eben die form 2^k wobei k elemnt aus -n bis n ist. wie du siehst habe ich hier schon gekürzt was das bestimmen von h angeht...

Zitat:
muss man da immer alle durchprobieren, oder könnte man unter bestimmten Bedingungen (z.B. es wird zwei Mal nacheinander schlechter) vorzeitig abbrechen?


da muss ich dir ehrlich sagen, das weiß ich nicht...

Zitat:
es scheint, dass diese neue Version für nur einen h-Wert langsamer ist


wie kann das sein? (verständnisfrage)
 
Christina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2012, 08:38     Titel:
  Antworten mit Zitat      
hallo harald,

leider kann ich die datei nicht öffnen, da öffnet matlab:

function info = imfinfo(filename, format)
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.10.2012, 09:54     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
In wie fern wurde den w falsch vorbelegt?

Mit der Größe der falschen Variable, x_train bzw. x_predict.

Zitat:
da muss ich dir ehrlich sagen, das weiß ich nicht...

Ich auch nicht Wink

Zitat:
wie kann das sein? (verständnisfrage)

Ich habe das nicht genau angesehen, nur gemerkt, dass es langsamer geworden ist, nachdem ich den zweiten Funktionsaufruf ersetzt hatte.
Um das zu sehen, würde ich beide Versionen nochmal vergleichen (vielleicht kann man da noch was verbessern) und den Profiler drüber laufen lassen.
Man könnte auch das machen, was ich versehentlich gemacht hatte: für das eine h die "alte" Version verwenden.

Zitat:
leider kann ich die datei nicht öffnen, da öffnet matlab:

Welche Datei? Hast du versucht, sie auf der Platte abzuspeichern und von da zu öffnen?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2012, 11:28     Titel:
  Antworten mit Zitat      
ja deine neue version von k_hb.m. natürlich hab ich sie abgespeichert, aber egal wie ich es öffnen will, es kommt immer das gleiche. kannst du es mir vielleicht einfach nochmal hochladen?
 
Harald
Forum-Meister

Forum-Meister


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

merkwürdig. Noch ein Versuch.

Die wesentliche Änderung: in Zeile 20
Code:
W = zeros(size(x_train,1), l);


Grüße,
Harald

k_hb.m
 Beschreibung:

Download
 Dateiname:  k_hb.m
 Dateigröße:  1.2 KB
 Heruntergeladen:  283 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Christina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.10.2012, 13:37     Titel:
  Antworten mit Zitat      
Danke, jetzt geht es. Wahrscheinlich war das Problem einfach, dass sich matlab aufgehängt hat =)
 
Christina

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.10.2012, 14:44     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich habe mal wieder eine Frage. Kannst du mir erklären, warum es in deinem Code einen Unterschied macht, ob ich
Code:
W = zeros(size(x_train,1), l);
    for I=1:length(c)

oder die berechnung vor der schleife durchführe und dann einfach den zugewiesenen wert benutze, also so

Zitat:

sizeOfX = size(x_train,1);
a = length(c);

for i = 1:n

W = zeros(sizeOfX, l);
for I=1:a
W(:,I) = exp(-sum(bsxfun(@minus,x_predict(i,Smile,x_train).^2,2)/c(I));
end

...


es ist zwar nur ein minimaler unterschied, aber es ist einer. ich wollte das so machen, da ich gedacht habe es ist nunnötig dass ich jeder schleife neu zuberechnen und kann es somit aus den schleifen raus ziehen und somit die laufzeit, wenn auch nur minimalst, zu verbessern. Kannst du mir erkären warum das einen unterschied macht?
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 07.10.2012, 15:30     Titel:
  Antworten mit Zitat      
Hallo,

auf den ersten Blick würde ich sagen, dass es keinen Unterschied macht.
Falls doch, kannst du den Debugger verwenden und Schritt für Schritt durch den Code gehen, um zu sehen, worin genau der Unterschied besteht (und dann entscheiden, welche Variante die richtige ist).

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

Gehe zu Seite Zurück  1, 2, 3

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.