|
|
efiizienterer Code -> Vektorisierung?? |
|
Christina |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.10.2012, 19:31
Titel:
|
 |
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:
warum hast du hier, in Vergleich zu meinem:
das bsxfun(@rdivide,...,c) weggelassen? was ich doch hier bräuchte ist, dass der zeilenvektor (-sum(bsxfun(@minus,x_predict(i, ,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: ---
|
 |
|
|
 |
|
Verfasst am: 04.10.2012, 19:40
Titel:
|
 |
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: ---
|
 |
|
|
 |
|
Verfasst am: 04.10.2012, 20:09
Titel:
|
 |
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, ,x_train).^2,2)/c(I)); |
Kann mir nciht erklären, was das bedeuten soll...
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 04.10.2012, 20:24
Titel:
|
 |
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
|
|
|
Christina |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.10.2012, 21:34
Titel:
|
 |
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
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 04.10.2012, 23:27
Titel:
|
 |
|
 |
|
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
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?
Beschreibung: |
|
 Download |
Dateiname: |
k_hb.m |
Dateigröße: |
1.2 KB |
Heruntergeladen: |
292 mal |
|
|
|
Christina |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.10.2012, 08:32
Titel:
|
 |
|
 |
|
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
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: ---
|
 |
|
|
 |
|
Verfasst am: 05.10.2012, 08:38
Titel:
|
 |
hallo harald,
leider kann ich die datei nicht öffnen, da öffnet matlab:
function info = imfinfo(filename, format)
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.10.2012, 09:54
Titel:
|
 |
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
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
|
|
|
Christina |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.10.2012, 11:28
Titel:
|
 |
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
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.10.2012, 11:56
Titel:
|
 |
Hallo,
merkwürdig. Noch ein Versuch.
Die wesentliche Änderung: in Zeile 20
Grüße,
Harald
Beschreibung: |
|
 Download |
Dateiname: |
k_hb.m |
Dateigröße: |
1.2 KB |
Heruntergeladen: |
283 mal |
|
|
|
Christina |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 05.10.2012, 13:37
Titel:
|
 |
Danke, jetzt geht es. Wahrscheinlich war das Problem einfach, dass sich matlab aufgehängt hat =)
|
|
|
Christina |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 07.10.2012, 14:44
Titel:
|
 |
Hallo Harald,
ich habe mal wieder eine Frage. Kannst du mir erklären, warum es in deinem Code einen Unterschied macht, ob ich
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, ,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
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.10.2012, 15:30
Titel:
|
 |
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
|
|
|
|
Gehe zu Seite Zurück 1, 2, 3
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|