Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Ăśberarbeitung
p:ki:machinelearning2 [2024/04/06 08:57] – angelegt Ralf Kretzschmarp:ki:machinelearning2 [2024/06/27 07:56] (aktuell) – [2. Die Näherung mithilfe von Daten annähern] Ralf Kretzschmar
Zeile 41: Zeile 41:
   * Was bedeutet das dafĂĽr, wie gut der Fehler $e=J(w)$ anhand von Daten abgeschätzt werden kann? Halte deine Ăśberlegungen im Textfeld fest. {{gem/plain?0=N4XyA#2a2d1614368f8273}}   * Was bedeutet das dafĂĽr, wie gut der Fehler $e=J(w)$ anhand von Daten abgeschätzt werden kann? Halte deine Ăśberlegungen im Textfeld fest. {{gem/plain?0=N4XyA#2a2d1614368f8273}}
   * Vergleiche danach deine Antwort mit der unseren am Ende dieses Auftrags.   * Vergleiche danach deine Antwort mit der unseren am Ende dieses Auftrags.
-{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20global%20variables%0Alet%20button%3B%0Alet%20slider%3B%0Alet%20drawSize%3B%0Alet%20drawnNoOfSix%3B%0Alet%20expectedNoOfSix%3B%0Alet%20difference%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%0A%2F%2F%20Calculate%20drawnNoOfSix%2C%20expectedNoOfSix%20and%20difference%0A%2F%2F%0Afunction%20calulateEverything%28%29%20%7B%0A%09%2F%2F%20draw%20and%20count%20sixes%0A%09drawnNoOfSix%20%3D%200%3B%0A%09for%20%28let%20diceThrows%20%3D%200%3B%20diceThrows%20%3C%20drawSize%3B%20diceThrows%20%3D%20diceThrows%20%2B%201%29%20%7B%0A%09%09if%20%28Math.floor%28Math.random%28%29%20%2a%20%286%29%20%2B%201%29%20%3D%3D%3D%206%29%20%7B%0A%09%09%09drawnNoOfSix%20%3D%20drawnNoOfSix%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20calculate%20expectation%20value%20and%20difference%0A%09expectedNoOfSix%20%3D%20round%28drawSize%20%2F%206%29%3B%0A%09difference%20%3D%20Math.abs%28%28expectedNoOfSix%20-%20drawnNoOfSix%29%20%2F%20expectedNoOfSix%20%2a%20100%29.toFixed%283%29%20%2B%20%22%20%25%22%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20Reset%20results%20and%20update%20draw%20size%0A%2F%2F%0Afunction%20resetResults%28%29%20%7B%0A%20%20%20%20%2F%2F%20reset%20results%0A%09drawnNoOfSix%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%09expectedNoOfSix%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%09difference%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%20%20%20%20%0A%09%2F%2F%20update%20draw%20size%0A%09drawSize%20%3D%20round%2810%20%2a%2a%20slider.value%28%29%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Afunction%20setup%28%29%20%7B%0A%09%2F%2F%20default%20values%0A%09drawSize%20%3D%20100%3B%0A%09drawnNoOfSix%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%09expectedNoOfSix%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%09difference%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%0A%09%2F%2F%20create%20canvas%20%0A%09createCanvas%28400%2C%20200%29%3B%0A%0A%09%2F%2F%20set%20text%20properties%0A%09textAlign%28LEFT%2C%20CENTER%29%3B%0A%0A%09%2F%2F%20create%20button%0A%09button%20%3D%20createButton%28%22W%C3%BCrfle%21%22%29%3B%0A%09button.size%2880%2C%2030%29%3B%0A%09button.position%2810%2C%2050%29%3B%0A%09button.style%28%22font-size%22%2C%20%2220px%22%29%3B%0A%09%2F%2F%20add%20button%20functionality%0A%09button.mouseClicked%28calulateEverything%29%3B%0A%0A%09%2F%2F%20create%20Slider%0A%09slider%20%3D%20createSlider%282%2C%206%2C%202%2C%200.001%29%3B%0A%09slider.position%28100%2C%2050%29%3B%20%2F%2F%20x%20and%20y%0A%09slider.size%28290%2C%2030%29%3B%20%2F%2F%20width%20and%20height%0A%09%2F%2F%20add%20slider%20functionality%0A%09slider.input%28resetResults%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20draw%28%29%0A%2F%2F%0Afunction%20draw%28%29%20%7B%0A%09%2F%2F%20clear%20everything%0A%09background%28%22white%22%29%3B%0A%0A%09%2F%2F%20create%20title%0A%09strokeWeight%280%29%3B%0A%09fill%28%22black%22%29%3B%0A%09textSize%2824%29%0A%09text%28%22%F0%9F%8E%B2%20%20Je%20mehr%20desto%20besser%22%2C%2010%2C%2015%29%3B%0A%0A%09%2F%2F%20print%20results%0A%09textSize%2820%29%3B%0A%09strokeWeight%280%29%3B%0A%09fill%28%22black%22%29%3B%0A%09text%28%22Anzahl%20W%C3%BCrfe%22%2C%2010%2C%20110%29%3B%0A%09text%28drawSize%2C%20300%2C%20110%29%3B%0A%09fill%28%22green%22%29%3B%0A%09text%28%22Erwartete%20Anzahl%20Sechsen%22%2C%2010%2C%20135%29%3B%0A%09text%28expectedNoOfSix%2C%20300%2C%20135%29%3B%0A%09fill%28%22blue%22%29%3B%0A%09text%28%22Gew%C3%BCrfelte%20Anzahl%20Sechsen%22%2C%2010%2C%20160%29%3B%0A%09text%28drawnNoOfSix%2C%20300%2C%20160%29%3B%0A%09fill%28%22red%22%29%3B%0A%09text%28%22Abweichung%20in%20Prozent%22%2C%2010%2C%20185%29%3B%0A%09text%28difference%2C%20300%2C%20185%29%3B%0A%7D&css=&html=%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Fp5%22%3E%3C%2Fscript%3E&height=360px#Erwartungswert}}+{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20global%20variables%0Alet%20button%3B%0Alet%20slider%3B%0Alet%20drawSize%3B%0Alet%20drawnNoOfSix%3B%0Alet%20expectedNoOfSix%3B%0Alet%20difference%3B%0A%2F%2Fnoprotect%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%0A%2F%2F%20Calculate%20drawnNoOfSix%2C%20expectedNoOfSix%20and%20difference%0A%2F%2F%0Afunction%20calulateEverything%28%29%20%7B%0A%09%2F%2F%20draw%20and%20count%20sixes%0A%09drawnNoOfSix%20%3D%200%3B%0A%09for%20%28let%20diceThrows%20%3D%200%3B%20diceThrows%20%3C%20drawSize%3B%20diceThrows%20%3D%20diceThrows%20%2B%201%29%20%7B%0A%09%09if%20%28Math.floor%28Math.random%28%29%20%2a%20%286%29%20%2B%201%29%20%3D%3D%3D%206%29%20%7B%0A%09%09%09drawnNoOfSix%20%3D%20drawnNoOfSix%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20calculate%20expectation%20value%20and%20difference%0A%09expectedNoOfSix%20%3D%20round%28drawSize%20%2F%206%29%3B%0A%09difference%20%3D%20Math.abs%28%28expectedNoOfSix%20-%20drawnNoOfSix%29%20%2F%20expectedNoOfSix%20%2a%20100%29.toFixed%283%29%20%2B%20%22%20%25%22%3B%0A%7D%0A%0A%2F%2F%0A%2F%2F%20Reset%20results%20and%20update%20draw%20size%0A%2F%2F%0Afunction%20resetResults%28%29%20%7B%0A%20%20%20%20%2F%2F%20reset%20results%0A%09drawnNoOfSix%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%09expectedNoOfSix%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%09difference%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%20%20%20%20%0A%09%2F%2F%20update%20draw%20size%0A%09drawSize%20%3D%20round%2810%20%2a%2a%20slider.value%28%29%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Afunction%20setup%28%29%20%7B%0A%09%2F%2F%20default%20values%0A%09drawSize%20%3D%20100%3B%0A%09drawnNoOfSix%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%09expectedNoOfSix%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%09difference%20%3D%20%22%F0%9F%8E%B2%22%3B%0A%0A%09%2F%2F%20create%20canvas%20%0A%09createCanvas%28400%2C%20200%29%3B%0A%0A%09%2F%2F%20set%20text%20properties%0A%09textAlign%28LEFT%2C%20CENTER%29%3B%0A%0A%09%2F%2F%20create%20button%0A%09button%20%3D%20createButton%28%22W%C3%BCrfle%21%22%29%3B%0A%09button.size%2880%2C%2030%29%3B%0A%09button.position%2810%2C%2050%29%3B%0A%09button.style%28%22font-size%22%2C%20%2220px%22%29%3B%0A%09%2F%2F%20add%20button%20functionality%0A%09button.mouseClicked%28calulateEverything%29%3B%0A%0A%09%2F%2F%20create%20Slider%0A%09slider%20%3D%20createSlider%282%2C%206%2C%202%2C%200.001%29%3B%0A%09slider.position%28100%2C%2050%29%3B%20%2F%2F%20x%20and%20y%0A%09slider.size%28290%2C%2030%29%3B%20%2F%2F%20width%20and%20height%0A%09%2F%2F%20add%20slider%20functionality%0A%09slider.input%28resetResults%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20draw%28%29%0A%2F%2F%0Afunction%20draw%28%29%20%7B%0A%09%2F%2F%20clear%20everything%0A%09background%28%22white%22%29%3B%0A%0A%09%2F%2F%20create%20title%0A%09strokeWeight%280%29%3B%0A%09fill%28%22black%22%29%3B%0A%09textSize%2824%29%0A%09text%28%22%F0%9F%8E%B2%20%20Je%20mehr%20desto%20besser%22%2C%2010%2C%2015%29%3B%0A%0A%09%2F%2F%20print%20results%0A%09textSize%2820%29%3B%0A%09strokeWeight%280%29%3B%0A%09fill%28%22black%22%29%3B%0A%09text%28%22Anzahl%20W%C3%BCrfe%22%2C%2010%2C%20110%29%3B%0A%09text%28drawSize%2C%20300%2C%20110%29%3B%0A%09fill%28%22green%22%29%3B%0A%09text%28%22Erwartete%20Anzahl%20Sechsen%22%2C%2010%2C%20135%29%3B%0A%09text%28expectedNoOfSix%2C%20300%2C%20135%29%3B%0A%09fill%28%22blue%22%29%3B%0A%09text%28%22Gew%C3%BCrfelte%20Anzahl%20Sechsen%22%2C%2010%2C%20160%29%3B%0A%09text%28drawnNoOfSix%2C%20300%2C%20160%29%3B%0A%09fill%28%22red%22%29%3B%0A%09text%28%22Abweichung%20in%20Prozent%22%2C%2010%2C%20185%29%3B%0A%09text%28difference%2C%20300%2C%20185%29%3B%0A%7D&css=&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E&height=360px#Erwartungswert}}
 ++++Unsere Antwort| Der wahre Wert ist die ''Erwartete Anzahl Sechsen'' (das Pendant dazu ist der wahre Fehlerwert von $e^♡ = J(w^♡)$ ).\\ Die ''GewĂĽrfelte Anzahl Sechsen'' ist eine Näherung davon (das Pendant dazu ist der mit den verfĂĽgbaren Daten berechnete Fehlerwert $e^♡ = J(w^♡)$ ).\\ Je öfters gewĂĽrfelt wird, desto besser ist die Näherung der ''Erwarteten Anzahl Sechsen'' (je mehr repräsentative Daten verwendet werden, desto besser ist die Näherung des wahren Fehlerwerts von $e^♡ = J(w^♡)$ ).    ++++Unsere Antwort| Der wahre Wert ist die ''Erwartete Anzahl Sechsen'' (das Pendant dazu ist der wahre Fehlerwert von $e^♡ = J(w^♡)$ ).\\ Die ''GewĂĽrfelte Anzahl Sechsen'' ist eine Näherung davon (das Pendant dazu ist der mit den verfĂĽgbaren Daten berechnete Fehlerwert $e^♡ = J(w^♡)$ ).\\ Je öfters gewĂĽrfelt wird, desto besser ist die Näherung der ''Erwarteten Anzahl Sechsen'' (je mehr repräsentative Daten verwendet werden, desto besser ist die Näherung des wahren Fehlerwerts von $e^♡ = J(w^♡)$ ).   
 ++++ ++++
Zeile 80: Zeile 80:
     * Mit ''ANZAHL_EPOCHEN'' und ''EPOCHEN_FUER_GRAFIK_UPDATE'' kann eingestellt werden, wie lange trainiert und wie oft die Resultate und die Grafik aktualisiert werden soll.     * Mit ''ANZAHL_EPOCHEN'' und ''EPOCHEN_FUER_GRAFIK_UPDATE'' kann eingestellt werden, wie lange trainiert und wie oft die Resultate und die Grafik aktualisiert werden soll.
 {{gem/plain?0=N4XyA#2853c02d7e52e73e}} {{gem/plain?0=N4XyA#2853c02d7e52e73e}}
-{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0Aconst%20LERNRATE%20%3D%201%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%203%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%201000%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%20100%3B%20%2F%2F%20ganzzahlig%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20constants%0Aconst%20DATA_RANGE%20%3D%2010%3B%0Aconst%20DATA_WINDOW_SIZE%20%3D%20200%3B%0Aconst%20DATA_SCALE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20DATA_RANGE%29%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%2050%3B%0Aconst%20PIXEL_SIZE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20NUM_DATA_PIXEL%29%3B%0A%0A%2F%2F%20training%20data%0Aconst%20trainInputArray%20%3D%20%5B%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%201.5%5D%2C%0A%09%5B3.5%2C%204.0%5D%2C%0A%09%5B4.0%2C%206.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B4.5%2C%203.0%5D%2C%0A%09%5B5.0%2C%205.0%5D%2C%0A%09%5B5.5%2C%206.0%5D%2C%0A%09%5B6.5%2C%203.0%5D%2C%0A%09%5B7.0%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.0%5D%2C%0A%09%5B8.5%2C%205.5%5D%2C%0A%09%5B1.5%2C%203.0%5D%2C%0A%09%5B1.5%2C%204.5%5D%2C%0A%09%5B1.5%2C%207.0%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B3.0%2C%203.0%5D%2C%0A%09%5B3.0%2C%205.5%5D%2C%0A%09%5B3.0%2C%206.5%5D%2C%0A%09%5B4.0%2C%208.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B6.5%2C%207.5%5D%2C%0A%09%5B8.0%2C%206.5%5D%2C%0A%09%5B8.0%2C%208.5%5D%0A%5D%3B%0Aconst%20trainOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0Aconst%20trainInputMax%20%3D%20%5B9.0%2C%208.5%5D%3B%0Aconst%20trainInputMin%20%3D%20%5B1.5%2C%201.5%5D%3B%0A%0A%2F%2F%20validation%20data%0Aconst%20validInputArray%20%3D%20%5B%0A%09%5B2.5%2C%207.0%5D%2C%0A%09%5B3.5%2C%201.0%5D%2C%0A%09%5B3.5%2C%207.0%5D%2C%0A%09%5B4.0%2C%203.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B4.5%2C%202.5%5D%2C%0A%09%5B4.5%2C%205.0%5D%2C%0A%09%5B6.0%2C%202.5%5D%2C%0A%09%5B6.0%2C%204.5%5D%2C%0A%09%5B6.5%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.5%5D%2C%0A%09%5B8.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%206.5%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B2.5%2C%203.5%5D%2C%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%206.0%5D%2C%0A%09%5B4.0%2C%208.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B5.5%2C%208.5%5D%2C%0A%09%5B6.5%2C%207.0%5D%2C%0A%09%5B7.5%2C%208.5%5D%2C%0A%09%5B8.5%2C%207.0%5D%0A%5D%3B%0Aconst%20validOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0A%0A%2F%2F%20global%20variables%0Alet%20model%2C%20trainInput%2C%20trainOutput%2C%20validInput%2C%20validOutput%2C%20testInput%2C%20actualEpoch%2C%20actualLogs%2C%20trainBuffer%2C%20validBuffer%2C%20decisionBuffer%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20generate%20data%20tensors%0A%2F%2F%0Afunction%20generateTensors%28%29%20%7B%0A%09let%20normalizedTrainInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedValidInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedTestInputArray%20%3D%20%5B%5D%3B%0A%0A%09%2F%2F%20normalize%20training%20and%20validation%20inputs%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20trainInputArray.length%3B%20i%2B%2B%29%20%7B%0A%09%09normalizedTrainInputArray.push%28%5B%28trainInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28trainInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09normalizedValidInputArray.push%28%5B%28validInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28validInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20generate%20training%20input%20and%20output%20tensors%0A%09trainInput%20%3D%20tf.tensor2d%28normalizedTrainInputArray%2C%20%5BnormalizedTrainInputArray.length%2C%202%5D%29%3B%0A%09trainOutput%20%3D%20tf.tensor2d%28trainOutputArray%2C%20%5BtrainOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20trainOutput%20%3D%20tf.oneHot%28tf.tensor1d%28trainOutputArray%29.toInt%28%29%2C%202%29%3B%0A%09%2F%2F%20trainInput.print%28%29%3B%20%2F%2F%20Print%20Tensor%0A%0A%09%2F%2F%20generate%20validation%20input%20and%20output%20tensors%0A%09validInput%20%3D%20tf.tensor2d%28normalizedValidInputArray%2C%20%5BnormalizedValidInputArray.length%2C%202%5D%29%3B%0A%09validOutput%20%3D%20tf.tensor2d%28validOutputArray%2C%20%5BvalidOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20validOutput%20%3D%20tf.oneHot%28tf.tensor1d%28validOutputArray%29.toInt%28%29%2C%202%29%3B%0A%0A%09%2F%2F%20calculate%20normalized%20testing%20inputs%20for%20visualisation%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09normalizedTestInputArray.push%28%5B%28i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20generate%20testing%20input%20tensor%20for%20visualisation%0A%09testInput%20%3D%20tf.tensor2d%28normalizedTestInputArray%2C%20%5BnormalizedTestInputArray.length%2C%202%5D%29%3B%0A%09%2F%2F%09testInput.print%28%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20build%20neural%20network%20model%20and%20define%20training%0A%2F%2F%0Afunction%20compileModel%28%29%20%7B%0A%09%2F%2F%20neural%20network%20structure%0A%09model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5B2%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27tanh%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27sigmoid%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.sgd%28LERNRATE%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%2C%0A%09%09metrics%3A%20%5B%27mse%27%5D%2C%0A%09%7D%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20neural%20network%0A%2F%2F%0Aasync%20function%20trainModel%28%29%20%7B%0A%09await%20model.fit%28%0A%09%09trainInput%2C%20trainOutput%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%7B%0A%09%09%09%09onEpochEnd%3A%20async%20%28epoch%2C%20logs%29%20%3D%3E%20%7B%0A%09%09%09%09%09%2F%2F%20remember%20epoch%20number%20if%20interrupted%0A%09%09%09%09%09actualEpoch%20%3D%20epoch%20%2B%201%3B%0A%09%09%09%09%09actualLogs%20%3D%20logs%3B%0A%09%09%09%09%09%2F%2F%20initiate%20graphic%20update%0A%09%09%09%09%09if%20%28%28%28actualEpoch%29%20%25%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%3D%3D%200%29%20%7C%7C%20%28epoch%20%3D%3D%3D%200%29%29%20%7B%0A%09%09%09%09%09%09drawPrediction%28actualEpoch%2C%20logs.loss%29%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%2C%20%5D%0A%09%09%7D%0A%09%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20mean%20squared%20error%0A%2F%2F%0Afunction%20calculateMSE%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20mse%20%3D%200.0%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09mse%20%3D%20mse%20%2B%20%28predictedOutput%5Bi%5D%20-%20trueOutput%5Bi%5D%29%20%2a%2a%202%3B%0A%09%7D%0A%09return%20mse%20%2F%20predictedOutput.length%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20percentage%20of%20correct%20classifications%0A%2F%2F%0Afunction%20calculatePercentageCorrect%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20correct%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28%28trueOutput%5Bi%5D%20%3D%3D%3D%201%20%26%26%20predictedOutput%5Bi%5D%20%3E%3D%200.5%29%20%7C%7C%20%28trueOutput%5Bi%5D%20%3D%3D%3D%200%20%26%26%20predictedOutput%5Bi%5D%20%3C%200.5%29%29%20%7B%0A%09%09%09correct%20%3D%20correct%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09return%20%7B%0A%09%09accuracy%3A%20Math.round%28correct%20%2a%20100%20%2F%20predictedOutput.length%29%2C%0A%09%09wrong%3A%20predictedOutput.length%20-%20correct%0A%09%7D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Afunction%20drawPrediction%28epoch%2C%20mseTrain%29%20%7B%0A%09%2F%2F%20make%20predictions%20with%20neural%20network%0A%09let%20training%20%3D%20model.predict%28trainInput%29.arraySync%28%29%3B%0A%09let%20validation%20%3D%20model.predict%28validInput%29.arraySync%28%29%3B%0A%09let%20prediction%20%3D%20model.predict%28testInput%29.arraySync%28%29%3B%0A%0A%09%2F%2F%20calculate%20mse%20and%20percentages%20of%20correct%20classifications%0A%09let%20mseValid%20%3D%20calculateMSE%28validation%2C%20validOutputArray%29%3B%0A%09let%20trainCorrect%20%3D%20calculatePercentageCorrect%28training%2C%20trainOutputArray%29%3B%0A%09let%20validCorrect%20%3D%20calculatePercentageCorrect%28validation%2C%20validOutputArray%29%3B%0A%0A%09%2F%2F%20draw%20decision%20boundary%0A%09decisionBuffer.noStroke%28%29%3B%0A%09let%20element%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09%2F%2F%20transform%20neural%20network%20output%20into%20a%20color%0A%09%09%09if%20%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%2C%20255%2C%20Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%29%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20255%29%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20check%20for%20decision%20boundary%20and%20alter%20color%0A%09%09%09if%20%28%28element%20%25%20%28NUM_DATA_PIXEL%20%2B%201%29%29%20%21%3D%3D%200%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09if%20%28element%20%3E%3D%20NUM_DATA_PIXEL%20%2B%201%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09decisionBuffer.rect%28DATA_SCALE%20%2a%20i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20PIXEL_SIZE%20%2F%202%2C%20DATA_SCALE%20%2a%20%2810%20-%20j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%29%20-%20PIXEL_SIZE%20%2F%202%2C%20PIXEL_SIZE%2C%20PIXEL_SIZE%29%3B%0A%09%09%09element%20%3D%20element%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09image%28decisionBuffer%2C%200%2C%200%29%3B%0A%09image%28decisionBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20training%20and%20validation%20samples%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20add%20labels%20to%20training%20and%20validation%20feature%20space%20%2F%2F%20wrong%0A%09noStroke%28%29%3B%0A%09text%28%22Training%3A%20%22%20%2B%20trainCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20trainCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%09text%28%22Validation%3A%20%22%20%2B%20validCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%28%22%20%2B%20validCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%20DATA_WINDOW_SIZE%20%2B%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%0A%09%2F%2F%20print%20training%20and%20validation%20results%20to%20console%0A%09console.log%28%22%7C%7C%20%22%20%2B%20epoch.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20trainCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseTrain.toFixed%286%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20validCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseValid.toFixed%286%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20data%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawDataInBuffer%28inputData%2C%20outputData%2C%20buffer%29%20%7B%0A%09buffer.noFill%28%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%20%2F%202%29%3B%0A%09buffer.rect%280%2C%200%2C%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28outputData%5Bi%5D%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%2F%2F%20green%20circle%20for%20output%20label%20%3D%3D%3D%201%0A%09%09%09buffer.stroke%28%22darkgreen%22%29%3B%0A%09%09%09buffer.circle%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%2C%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09%2F%2F%20blue%20cross%20for%20output%20label%20%3D%3D%3D%200%0A%09%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Aasync%20function%20setup%28%29%20%7B%20%2F%2Fnoprotect%20%28for%20large%20arrays%29%0A%09%2F%2F%20initial%20console%20output%0A%09console.log%28%22%7C%7C%20%20%20%20%20%20%20%20%7C%7C%20%20%20%20%20%20Training%20%20%20%20%20%20%7C%7C%20%20%20%20%20Validation%20%20%20%20%20%7C%7C%22%29%3B%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%282%20%2a%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%20%2B%2040%29%3B%0A%0A%09%2F%2F%20text%20below%20networks%0A%09fill%28%22black%22%29%3B%0A%09noStroke%28%29%3B%0A%09textSize%2820%29%3B%0A%09text%28%22Neuronales%20Netz%20%2B%20Gradientenverfahren%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09textSize%28PIXEL_SIZE%20%2a%203%29%3B%0A%0A%09%2F%2F%20create%20all%20grafic%20buffers%0A%09trainBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09validBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09decisionBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20initial%20training%20and%20validation%20buffer%0A%09drawDataInBuffer%28trainInputArray%2C%20trainOutputArray%2C%20trainBuffer%29%3B%0A%09drawDataInBuffer%28validInputArray%2C%20validOutputArray%2C%20validBuffer%29%3B%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20data%20preprocessing%0A%09generateTensors%28%29%3B%0A%0A%09%2F%2F%20define%20model%20and%20training%0A%09compileModel%28%29%3B%0A%0A%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09await%20trainModel%28%29%3B%0A%0A%09%2F%2F%20end%20of%20training%0A%09console.log%28%22Das%20Training%20ist%20beendet%20%3A-%29%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20keyPressed%28%29%20ESC%20%3D%20emergency%20stop%0A%2F%2F%0Afunction%20keyPressed%28%29%20%7B%0A%09if%20%28keyCode%20%3D%3D%3D%2027%29%20%7B%20%2F%2F%20ESC%20key%0A%09%09%2F%2F%20initiate%20stop%20of%20training%20after%20next%20epoch%0A%09%09model.stopTraining%20%3D%20true%3B%0A%09%09%2F%2F%20response%20to%20user%0A%09%09console.log%28%22Training%20wurde%20Abgebrochen%21%20Finales%20Resultat%3A%22%29%3B%0A%09%09%2F%2F%20draw%20final%20Prediction%0A%09%09drawPrediction%28actualEpoch%2C%20actualLogs.loss%29%3B%0A%09%7D%0A%7D&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Fp5%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E&autorun=off&height=400px#NeuronalesNetz}}+{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0Aconst%20LERNRATE%20%3D%201%3B%20%2F%2F%20Dezimalzahl%20%3E%200%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%203%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%201000%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%20100%3B%20%2F%2F%20ganzzahlig%20Wert%20%3E%200%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20constants%0Aconst%20DATA_RANGE%20%3D%2010%3B%0Aconst%20DATA_WINDOW_SIZE%20%3D%20200%3B%0Aconst%20DATA_SCALE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20DATA_RANGE%29%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%2050%3B%0Aconst%20PIXEL_SIZE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20NUM_DATA_PIXEL%29%3B%0A%0A%2F%2F%20training%20data%0Aconst%20trainInputArray%20%3D%20%5B%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%201.5%5D%2C%0A%09%5B3.5%2C%204.0%5D%2C%0A%09%5B4.0%2C%206.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B4.5%2C%203.0%5D%2C%0A%09%5B5.0%2C%205.0%5D%2C%0A%09%5B5.5%2C%206.0%5D%2C%0A%09%5B6.5%2C%203.0%5D%2C%0A%09%5B7.0%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.0%5D%2C%0A%09%5B8.5%2C%205.5%5D%2C%0A%09%5B1.5%2C%203.0%5D%2C%0A%09%5B1.5%2C%204.5%5D%2C%0A%09%5B1.5%2C%207.0%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B3.0%2C%203.0%5D%2C%0A%09%5B3.0%2C%205.5%5D%2C%0A%09%5B3.0%2C%206.5%5D%2C%0A%09%5B4.0%2C%208.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B6.5%2C%207.5%5D%2C%0A%09%5B8.0%2C%206.5%5D%2C%0A%09%5B8.0%2C%208.5%5D%0A%5D%3B%0Aconst%20trainOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0Aconst%20trainInputMax%20%3D%20%5B9.0%2C%208.5%5D%3B%0Aconst%20trainInputMin%20%3D%20%5B1.5%2C%201.5%5D%3B%0A%0A%2F%2F%20validation%20data%0Aconst%20validInputArray%20%3D%20%5B%0A%09%5B2.5%2C%207.0%5D%2C%0A%09%5B3.5%2C%201.0%5D%2C%0A%09%5B3.5%2C%207.0%5D%2C%0A%09%5B4.0%2C%203.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B4.5%2C%202.5%5D%2C%0A%09%5B4.5%2C%205.0%5D%2C%0A%09%5B6.0%2C%202.5%5D%2C%0A%09%5B6.0%2C%204.5%5D%2C%0A%09%5B6.5%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.5%5D%2C%0A%09%5B8.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%206.5%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B2.5%2C%203.5%5D%2C%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%206.0%5D%2C%0A%09%5B4.0%2C%208.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B5.5%2C%208.5%5D%2C%0A%09%5B6.5%2C%207.0%5D%2C%0A%09%5B7.5%2C%208.5%5D%2C%0A%09%5B8.5%2C%207.0%5D%0A%5D%3B%0Aconst%20validOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0A%0A%2F%2F%20global%20variables%0Alet%20model%2C%20trainInput%2C%20trainOutput%2C%20validInput%2C%20validOutput%2C%20testInput%2C%20actualEpoch%2C%20actualLogs%2C%20trainBuffer%2C%20validBuffer%2C%20decisionBuffer%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20generate%20data%20tensors%0A%2F%2F%0Afunction%20generateTensors%28%29%20%7B%0A%09let%20normalizedTrainInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedValidInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedTestInputArray%20%3D%20%5B%5D%3B%0A%0A%09%2F%2F%20normalize%20training%20and%20validation%20inputs%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20trainInputArray.length%3B%20i%2B%2B%29%20%7B%0A%09%09normalizedTrainInputArray.push%28%5B%28trainInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28trainInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09normalizedValidInputArray.push%28%5B%28validInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28validInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20generate%20training%20input%20and%20output%20tensors%0A%09trainInput%20%3D%20tf.tensor2d%28normalizedTrainInputArray%2C%20%5BnormalizedTrainInputArray.length%2C%202%5D%29%3B%0A%09trainOutput%20%3D%20tf.tensor2d%28trainOutputArray%2C%20%5BtrainOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20trainOutput%20%3D%20tf.oneHot%28tf.tensor1d%28trainOutputArray%29.toInt%28%29%2C%202%29%3B%0A%09%2F%2F%20trainInput.print%28%29%3B%20%2F%2F%20Print%20Tensor%0A%0A%09%2F%2F%20generate%20validation%20input%20and%20output%20tensors%0A%09validInput%20%3D%20tf.tensor2d%28normalizedValidInputArray%2C%20%5BnormalizedValidInputArray.length%2C%202%5D%29%3B%0A%09validOutput%20%3D%20tf.tensor2d%28validOutputArray%2C%20%5BvalidOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20validOutput%20%3D%20tf.oneHot%28tf.tensor1d%28validOutputArray%29.toInt%28%29%2C%202%29%3B%0A%0A%09%2F%2F%20calculate%20normalized%20testing%20inputs%20for%20visualisation%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09normalizedTestInputArray.push%28%5B%28i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20generate%20testing%20input%20tensor%20for%20visualisation%0A%09testInput%20%3D%20tf.tensor2d%28normalizedTestInputArray%2C%20%5BnormalizedTestInputArray.length%2C%202%5D%29%3B%0A%09%2F%2F%09testInput.print%28%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20build%20neural%20network%20model%20and%20define%20training%0A%2F%2F%0Afunction%20compileModel%28%29%20%7B%0A%09%2F%2F%20neural%20network%20structure%0A%09model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5B2%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27tanh%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27sigmoid%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.sgd%28LERNRATE%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%2C%0A%09%09metrics%3A%20%5B%27mse%27%5D%2C%0A%09%7D%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20neural%20network%0A%2F%2F%0Aasync%20function%20trainModel%28%29%20%7B%0A%09await%20model.fit%28%0A%09%09trainInput%2C%20trainOutput%2C%20%7B%0A%09%09%09epochs%3A%20ANZAHL_EPOCHEN%2C%0A%09%09%09shuffle%3A%20true%2C%0A%09%09%09callbacks%3A%20%5B%7B%0A%09%09%09%09onEpochEnd%3A%20async%20%28epoch%2C%20logs%29%20%3D%3E%20%7B%0A%09%09%09%09%09%2F%2F%20remember%20epoch%20number%20if%20interrupted%0A%09%09%09%09%09actualEpoch%20%3D%20epoch%20%2B%201%3B%0A%09%09%09%09%09actualLogs%20%3D%20logs%3B%0A%09%09%09%09%09%2F%2F%20initiate%20graphic%20update%0A%09%09%09%09%09if%20%28%28%28actualEpoch%29%20%25%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%3D%3D%200%29%20%7C%7C%20%28epoch%20%3D%3D%3D%200%29%29%20%7B%0A%09%09%09%09%09%09drawPrediction%28actualEpoch%2C%20logs.loss%29%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%2C%20%5D%0A%09%09%7D%0A%09%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20mean%20squared%20error%0A%2F%2F%0Afunction%20calculateMSE%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20mse%20%3D%200.0%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09mse%20%3D%20mse%20%2B%20%28predictedOutput%5Bi%5D%20-%20trueOutput%5Bi%5D%29%20%2a%2a%202%3B%0A%09%7D%0A%09return%20mse%20%2F%20predictedOutput.length%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20percentage%20of%20correct%20classifications%0A%2F%2F%0Afunction%20calculatePercentageCorrect%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20correct%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28%28trueOutput%5Bi%5D%20%3D%3D%3D%201%20%26%26%20predictedOutput%5Bi%5D%20%3E%3D%200.5%29%20%7C%7C%20%28trueOutput%5Bi%5D%20%3D%3D%3D%200%20%26%26%20predictedOutput%5Bi%5D%20%3C%200.5%29%29%20%7B%0A%09%09%09correct%20%3D%20correct%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09return%20%7B%0A%09%09accuracy%3A%20Math.round%28correct%20%2a%20100%20%2F%20predictedOutput.length%29%2C%0A%09%09wrong%3A%20predictedOutput.length%20-%20correct%0A%09%7D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Afunction%20drawPrediction%28epoch%2C%20mseTrain%29%20%7B%0A%09%2F%2F%20make%20predictions%20with%20neural%20network%0A%09let%20training%20%3D%20model.predict%28trainInput%29.arraySync%28%29%3B%0A%09let%20validation%20%3D%20model.predict%28validInput%29.arraySync%28%29%3B%0A%09let%20prediction%20%3D%20model.predict%28testInput%29.arraySync%28%29%3B%0A%0A%09%2F%2F%20calculate%20mse%20and%20percentages%20of%20correct%20classifications%0A%09let%20mseValid%20%3D%20calculateMSE%28validation%2C%20validOutputArray%29%3B%0A%09let%20trainCorrect%20%3D%20calculatePercentageCorrect%28training%2C%20trainOutputArray%29%3B%0A%09let%20validCorrect%20%3D%20calculatePercentageCorrect%28validation%2C%20validOutputArray%29%3B%0A%0A%09%2F%2F%20draw%20decision%20boundary%0A%09decisionBuffer.noStroke%28%29%3B%0A%09let%20element%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09%2F%2F%20transform%20neural%20network%20output%20into%20a%20color%0A%09%09%09if%20%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%2C%20255%2C%20Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%29%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20255%29%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20check%20for%20decision%20boundary%20and%20alter%20color%0A%09%09%09if%20%28%28element%20%25%20%28NUM_DATA_PIXEL%20%2B%201%29%29%20%21%3D%3D%200%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09if%20%28element%20%3E%3D%20NUM_DATA_PIXEL%20%2B%201%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09decisionBuffer.rect%28DATA_SCALE%20%2a%20i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20PIXEL_SIZE%20%2F%202%2C%20DATA_SCALE%20%2a%20%2810%20-%20j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%29%20-%20PIXEL_SIZE%20%2F%202%2C%20PIXEL_SIZE%2C%20PIXEL_SIZE%29%3B%0A%09%09%09element%20%3D%20element%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09image%28decisionBuffer%2C%200%2C%200%29%3B%0A%09image%28decisionBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20training%20and%20validation%20samples%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20add%20labels%20to%20training%20and%20validation%20feature%20space%20%2F%2F%20wrong%0A%09noStroke%28%29%3B%0A%09text%28%22Training%3A%20%22%20%2B%20trainCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20trainCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%09text%28%22Validation%3A%20%22%20%2B%20validCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%28%22%20%2B%20validCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%20DATA_WINDOW_SIZE%20%2B%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%0A%09%2F%2F%20print%20training%20and%20validation%20results%20to%20console%0A%09console.log%28%22%7C%7C%20%22%20%2B%20epoch.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20trainCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseTrain.toFixed%286%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20validCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseValid.toFixed%286%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20data%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawDataInBuffer%28inputData%2C%20outputData%2C%20buffer%29%20%7B%0A%09buffer.noFill%28%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%20%2F%202%29%3B%0A%09buffer.rect%280%2C%200%2C%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28outputData%5Bi%5D%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%2F%2F%20green%20circle%20for%20output%20label%20%3D%3D%3D%201%0A%09%09%09buffer.stroke%28%22darkgreen%22%29%3B%0A%09%09%09buffer.circle%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%2C%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09%2F%2F%20blue%20cross%20for%20output%20label%20%3D%3D%3D%200%0A%09%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Aasync%20function%20setup%28%29%20%7B%20%2F%2Fnoprotect%20%28for%20large%20arrays%29%0A%09%2F%2F%20initial%20console%20output%0A%09console.log%28%22%7C%7C%20%20%20%20%20%20%20%20%7C%7C%20%20%20%20%20%20Training%20%20%20%20%20%20%7C%7C%20%20%20%20%20Validation%20%20%20%20%20%7C%7C%22%29%3B%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%282%20%2a%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%20%2B%2040%29%3B%0A%0A%09%2F%2F%20text%20below%20networks%0A%09fill%28%22black%22%29%3B%0A%09noStroke%28%29%3B%0A%09textSize%2820%29%3B%0A%09text%28%22Neuronales%20Netz%20%2B%20Gradientenverfahren%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09textSize%28PIXEL_SIZE%20%2a%203%29%3B%0A%0A%09%2F%2F%20create%20all%20grafic%20buffers%0A%09trainBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09validBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09decisionBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20initial%20training%20and%20validation%20buffer%0A%09drawDataInBuffer%28trainInputArray%2C%20trainOutputArray%2C%20trainBuffer%29%3B%0A%09drawDataInBuffer%28validInputArray%2C%20validOutputArray%2C%20validBuffer%29%3B%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20data%20preprocessing%0A%09generateTensors%28%29%3B%0A%0A%09%2F%2F%20define%20model%20and%20training%0A%09compileModel%28%29%3B%0A%0A%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09await%20trainModel%28%29%3B%0A%0A%09%2F%2F%20end%20of%20training%0A%09console.log%28%22Das%20Training%20ist%20beendet%20%3A-%29%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20keyPressed%28%29%20ESC%20%3D%20emergency%20stop%0A%2F%2F%0Afunction%20keyPressed%28%29%20%7B%0A%09if%20%28keyCode%20%3D%3D%3D%2027%29%20%7B%20%2F%2F%20ESC%20key%0A%09%09%2F%2F%20initiate%20stop%20of%20training%20after%20next%20epoch%0A%09%09model.stopTraining%20%3D%20true%3B%0A%09%09%2F%2F%20response%20to%20user%0A%09%09console.log%28%22Training%20wurde%20Abgebrochen%21%20Finales%20Resultat%3A%22%29%3B%0A%09%09%2F%2F%20draw%20final%20Prediction%0A%09%09drawPrediction%28actualEpoch%2C%20actualLogs.loss%29%3B%0A%09%7D%0A%7D&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E&autorun=off&height=400px#NeuronalesNetz}}
 </WRAP> </WRAP>
  
Zeile 145: Zeile 145:
 {{gem/plain?0=N4XyA#37b6a8c6d650c881}} {{gem/plain?0=N4XyA#37b6a8c6d650c881}}
  
-{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0Aconst%20ANZAHL_INTERVALLE%20%3D%208%3B%20%2F%2F%20ganzzahliger%20Wert%20zwischen%202%20und%20100%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20constants%0Aconst%20MIN_NO_OF_INTERVALS%20%3D%201%3B%0Aconst%20MAX_NO_OF_INTERVALS%20%3D%20100%3B%0Aconst%20DATA_RANGE%20%3D%2010%3B%0Aconst%20DATA_WINDOW_SIZE%20%3D%20200%3B%0Aconst%20DATA_SCALE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20DATA_RANGE%29%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%20100%3B%0Aconst%20PIXEL_SIZE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20NUM_DATA_PIXEL%29%3B%0A%0A%2F%2F%20training%20data%0Aconst%20trainInputArray%20%3D%20%5B%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%201.5%5D%2C%0A%09%5B3.5%2C%204.0%5D%2C%0A%09%5B4.0%2C%206.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B4.5%2C%203.0%5D%2C%0A%09%5B5.0%2C%205.0%5D%2C%0A%09%5B5.5%2C%206.0%5D%2C%0A%09%5B6.5%2C%203.0%5D%2C%0A%09%5B7.0%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.0%5D%2C%0A%09%5B8.5%2C%205.5%5D%2C%0A%09%5B1.5%2C%203.0%5D%2C%0A%09%5B1.5%2C%204.5%5D%2C%0A%09%5B1.5%2C%207.0%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B3.0%2C%203.0%5D%2C%0A%09%5B3.0%2C%205.5%5D%2C%0A%09%5B3.0%2C%206.5%5D%2C%0A%09%5B4.0%2C%208.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B6.5%2C%207.5%5D%2C%0A%09%5B8.0%2C%206.5%5D%2C%0A%09%5B8.0%2C%208.5%5D%0A%5D%3B%0Aconst%20trainOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0Aconst%20trainInputMax%20%3D%20%5B9.0%2C%208.5%5D%3B%0Aconst%20trainInputMin%20%3D%20%5B1.5%2C%201.5%5D%3B%0Aconst%20NoOfClasses%20%3D%202%3B%0A%0A%2F%2F%20validation%20data%0Aconst%20validInputArray%20%3D%20%5B%0A%09%5B2.5%2C%207.0%5D%2C%0A%09%5B3.5%2C%201.0%5D%2C%0A%09%5B3.5%2C%207.0%5D%2C%0A%09%5B4.0%2C%203.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B4.5%2C%202.5%5D%2C%0A%09%5B4.5%2C%205.0%5D%2C%0A%09%5B6.0%2C%202.5%5D%2C%0A%09%5B6.0%2C%204.5%5D%2C%0A%09%5B6.5%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.5%5D%2C%0A%09%5B8.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%206.5%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B2.5%2C%203.5%5D%2C%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%206.0%5D%2C%0A%09%5B4.0%2C%208.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B5.5%2C%208.5%5D%2C%0A%09%5B6.5%2C%207.0%5D%2C%0A%09%5B7.5%2C%208.5%5D%2C%0A%09%5B8.5%2C%207.0%5D%0A%5D%3B%0Aconst%20validOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0A%0A%2F%2F%20global%20variables%0Alet%20testProbabilities%2C%20trainBuffer%2C%20validBuffer%2C%20decisionBuffer%3B%0Aconst%20BayesTable%20%3D%20%5B%5D%3B%0Aconst%20BayesPriors%20%3D%20%5B%5D%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20Naive%20Bayes%20calculate%20histograms%20and%20priors%0A%2F%2F%0Afunction%20naiveBayesCalculateHistogramsPriors%28%29%20%7B%0A%0A%09%2F%2F%20Reset%20table%20and%20priors%0A%09%2F%2F%20for%20each%20class%20c%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09BayesPriors.push%280%29%3B%0A%09%09BayesTable.push%28%5B%5D%29%3B%0A%09%09%2F%2F%20for%20each%20input%20feature%20f%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09BayesTable%5Bc%5D.push%28%5B%5D%29%3B%0A%09%09%09%2F%2F%20for%20each%20interval%20i%0A%09%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_INTERVALLE%3B%20i%2B%2B%29%20%7B%0A%09%09%09%09BayesTable%5Bc%5D%5Bf%5D.push%280%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20Count%20Bayes%20table%20and%20priors%0A%09%2F%2F%20for%20each%20sample%20s%0A%09for%20%28let%20s%20%3D%200%3B%20s%20%3C%20trainInputArray.length%3B%20s%2B%2B%29%20%7B%0A%09%09let%20interval%20%3D%20%5B%5D%3B%0A%09%09%2F%2F%20get%20intervals%20of%20current%20sample%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09interval.push%28Math.floor%28%28trainInputArray%5Bs%5D%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%20%2a%20ANZAHL_INTERVALLE%20%2F%20%28trainInputMax%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%29%29%3B%0A%09%09%09if%20%28interval%5Bf%5D%20%3E%3D%20ANZAHL_INTERVALLE%29%20%7B%0A%09%09%09%09interval%5Bf%5D%20%3D%20ANZAHL_INTERVALLE%20-%201%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09%2F%2F%20increase%20Bayes%20table%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09if%20%28trainOutputArray%5Bs%5D%20%3D%3D%3D%201%29%20%7B%20%2F%2F%20sample%20belongs%20to%20first%20class%0A%09%09%09%09BayesTable%5B0%5D%5Bf%5D%5Binterval%5Bf%5D%5D%20%2B%3D%201%3B%0A%09%09%09%7D%20else%20%7B%20%2F%2F%20sample%20belongs%20to%20second%20class%0A%09%09%09%09BayesTable%5B1%5D%5Bf%5D%5Binterval%5Bf%5D%5D%20%2B%3D%201%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09%2F%2F%20increase%20Bayes%20priors%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09if%20%28trainOutputArray%5Bs%5D%20%3D%3D%3D%201%29%20%7B%20%2F%2F%20sample%20belongs%20to%20first%20class%0A%09%09%09%09BayesPriors%5B1%5D%20%2B%3D%201.0%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09BayesPriors%5B0%5D%20%2B%3D%201.0%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20Scale%20Bayes%20table%20and%20table%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_INTERVALLE%3B%20i%2B%2B%29%20%7B%0A%09%09%09%09BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%20%3D%20BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%20%2F%20BayesPriors%5Bc%5D%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09BayesPriors%5Bc%5D%20%3D%20BayesPriors%5Bc%5D%20%2F%20trainInputArray.length%3B%0A%09%7D%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20Naive%20Bayes%20determine%20probability%20that%20sample%20belongs%20to%20first%20class%0A%2F%2F%0Afunction%20naiveBayesProbabilityOfFirstClass%28inputSample%29%20%7B%0A%09%2F%2F%20local%20variables%0A%09let%20BayesProbabilities%20%3D%20%5B%5D%3B%0A%09let%20BayesSum%20%3D%200.0%3B%0A%09let%20interval%20%3D%20%5B%5D%3B%0A%0A%09%2F%2F%20get%20interval%20for%20each%20input%20feature%20f%0A%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09interval.push%28Math.floor%28%28inputSample%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%20%2a%20ANZAHL_INTERVALLE%20%2F%20%28trainInputMax%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%29%29%3B%0A%09%09if%20%28interval%5Bf%5D%20%3E%3D%20ANZAHL_INTERVALLE%29%20%7B%0A%09%09%09interval%5Bf%5D%20%3D%20ANZAHL_INTERVALLE%20-%201%3B%0A%09%09%7D%0A%09%09if%20%28interval%5Bf%5D%20%3C%200%29%20%7B%0A%09%09%09interval%5Bf%5D%20%3D%200%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20calculate%20unscaled%20Bayes%20probabilities%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%2F%2F%20calculate%20product%20of%20p%28xi%7CCj%29%20over%20all%20features%0A%09%09let%20product%20%3D%201%3B%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09product%20%3D%20product%20%2a%20BayesTable%5Bc%5D%5Bf%5D%5Binterval%5Bf%5D%5D%3B%0A%09%09%7D%0A%09%09BayesProbabilities.push%28BayesPriors%5Bc%5D%20%2a%20product%29%3B%0A%09%09BayesSum%20%3D%20BayesSum%20%2B%20BayesProbabilities%5Bc%5D%3B%0A%09%7D%0A%09%2F%2F%20if%20no%20probability%20is%20assigned%20choose%20uniform%0A%09if%20%28BayesSum%20%3D%3D%3D%200%29%20%7B%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09BayesProbabilities%5Bc%5D%20%3D%201%20%2F%20NoOfClasses%3B%0A%09%09%7D%0A%09%09BayesSum%20%3D%201%3B%0A%09%7D%0A%0A%09%2F%2F%20scale%20Bayes%20probabilites%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09BayesProbabilities%5Bc%5D%20%3D%20BayesProbabilities%5Bc%5D%20%2F%20BayesSum%3B%0A%09%7D%0A%0A%09%2F%2F%20return%20probability%20of%20first%20class%0A%09return%20BayesProbabilities%5B0%5D%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20mean%20squared%20error%0A%2F%2F%0Afunction%20calculateMSE%28inputData%2C%20desiredOutput%29%20%7B%0A%09let%20mse%20%3D%200.0%3B%0A%09for%20%28s%20%3D%200%3B%20s%20%3C%20inputData.length%3B%20s%2B%2B%29%20%7B%0A%09%09let%20probabilityFirstClass%20%3D%20naiveBayesProbabilityOfFirstClass%28inputData%5Bs%5D%29%3B%0A%09%09mse%20%3D%20mse%20%2B%20%28probabilityFirstClass%20-%20desiredOutput%5Bs%5D%29%20%2a%2a%202%3B%0A%09%7D%0A%09return%20mse%20%2F%20inputData.length%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20percentage%20of%20correct%20classifications%0A%2F%2F%0Afunction%20calculatePercentageCorrect%28inputData%2C%20desiredOutput%29%20%7B%0A%09let%20correct%20%3D%200%3B%0A%09let%20equally%20%3D%200%3B%0A%09for%20%28s%20%3D%200%3B%20s%20%3C%20inputData.length%3B%20s%2B%2B%29%20%7B%0A%09%09let%20probabilityFirstClass%20%3D%20naiveBayesProbabilityOfFirstClass%28inputData%5Bs%5D%29%3B%0A%09%09if%20%28%28desiredOutput%5Bs%5D%20%3D%3D%3D%201%20%26%26%20probabilityFirstClass%20%3E%200.5%29%20%7C%7C%20%28desiredOutput%5Bs%5D%20%3D%3D%3D%200%20%26%26%20probabilityFirstClass%20%3C%200.5%29%29%20%7B%0A%09%09%09correct%20%3D%20correct%20%2B%201%3B%0A%09%09%7D%0A%09%09if%20%28probabilityFirstClass%20%3D%3D%3D%200.5%29%20%7B%0A%09%09%09equally%20%3D%20equally%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09return%20%7B%0A%09%09samples%3A%20inputData.length%2C%0A%09%09correct%3A%20correct%2C%0A%09%09wrong%3A%20inputData.length%20-%20correct%20-%20equally%2C%0A%09%09equally%3A%20equally%2C%0A%09%09accuracy%3A%20Math.round%28100%20%2a%20correct%20%2F%20%28inputData.length%20-%20equally%29%29%2C%0A%09%7D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Afunction%20drawPrediction%28%29%20%7B%0A%09%2F%2F%20calculate%20mse%20and%20percentages%20of%20correct%20classifications%0A%09let%20mseTrain%20%3D%20calculateMSE%28trainInputArray%2C%20trainOutputArray%29%3B%0A%09let%20mseValid%20%3D%20calculateMSE%28validInputArray%2C%20validOutputArray%29%3B%0A%09let%20trainCorrect%20%3D%20calculatePercentageCorrect%28trainInputArray%2C%20trainOutputArray%29%3B%0A%09let%20validCorrect%20%3D%20calculatePercentageCorrect%28validInputArray%2C%20validOutputArray%29%3B%0A%0A%09%2F%2F%20calculate%20normalized%20testing%20inputs%20for%20visualisation%0A%09decisionBuffer.noStroke%28%29%3B%0A%09for%20%28x%20%3D%200%3B%20x%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20x%20%3D%20x%20%2B%201%29%20%7B%0A%09%09for%20%28y%20%3D%200%3B%20y%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20y%20%3D%20y%20%2B%201%29%20%7B%0A%09%09%09let%20probabilityOfClass1%20%3D%20naiveBayesProbabilityOfFirstClass%28%5Bx%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%2C%20y%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%5D%29%3B%0A%09%09%09if%20%28probabilityOfClass1%20%3E%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28200%2C%20255%2C%20200%29%3B%20%2F%2F%20green%0A%09%09%09%7D%20else%20if%20%28probabilityOfClass1%20%3C%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28200%2C%20200%2C%20255%29%3B%20%2F%2F%20blue%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09decisionBuffer.fill%28255%2C%20255%2C%20255%29%3B%20%2F%2F%20white%0A%09%09%09%7D%0A%09%09%09decisionBuffer.rect%28DATA_SCALE%20%2a%20x%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20PIXEL_SIZE%20%2F%202%2C%20DATA_SCALE%20%2a%20%2810%20-%20y%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%29%20-%20PIXEL_SIZE%20%2F%202%2C%20PIXEL_SIZE%2C%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09image%28decisionBuffer%2C%200%2C%200%29%3B%0A%09image%28decisionBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20training%20and%20validation%20samples%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20add%20labels%20to%20training%20and%20validation%20feature%20space%20%2F%2F%20wrong%0A%09noStroke%28%29%3B%0A%09text%28%22Training%3A%20%22%20%2B%20trainCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20trainCorrect.wrong%20%2B%20%22%20falsch%2C%20%22%20%2B%20trainCorrect.equally%20%2B%20%22%20%3F%3F%29%22%2C%204%20%2a%20PIXEL_SIZE%2C%208%20%2a%20PIXEL_SIZE%29%3B%0A%09text%28%22Validation%3A%20%22%20%2B%20validCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20validCorrect.wrong%20%2B%20%22%20falsch%2C%20%22%20%2B%20validCorrect.equally%20%2B%20%22%20%3F%3F%29%22%2C%20DATA_WINDOW_SIZE%20%2B%204%20%2a%20PIXEL_SIZE%2C%208%20%2a%20PIXEL_SIZE%29%3B%0A%0A%09%2F%2F%20print%20training%20and%20validation%20results%20to%20console%0A%09console.log%28%22%7C%7C%20%20%20%20%20%201%20%7C%7C%20%22%20%2B%20trainCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseTrain.toFixed%286%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20validCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseValid.toFixed%286%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20data%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawDataInBuffer%28inputData%2C%20outputData%2C%20buffer%29%20%7B%0A%09buffer.noFill%28%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09buffer.rect%280%2C%200%2C%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28outputData%5Bi%5D%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%2F%2F%20green%20circle%20for%20output%20label%20%3D%3D%3D%201%0A%09%09%09buffer.stroke%28%22darkgreen%22%29%3B%0A%09%09%09buffer.circle%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09%2F%2F%20blue%20cross%20for%20output%20label%20%3D%3D%3D%200%0A%09%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Afunction%20setup%28%29%20%7B%20%2F%2Fnoprotect%20%28for%20large%20arrays%29%0A%09%2F%2F%20check%20for%20number%20of%20intervals%0A%09if%20%28ANZAHL_INTERVALLE%20%3C%202%20%7C%7C%20ANZAHL_INTERVALLE%20%3E%20100%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20Die%20ANZAHL_INTERVALLE%20darf%20nur%20von%202%20bis%20100%20gehen.%22%29%3B%0A%09%09return%20false%3B%0A%09%7D%0A%0A%09%2F%2F%20initial%20console%20output%0A%09console.log%28%22%7C%7C%20%20%20%20%20%20%20%20%7C%7C%20%20%20%20%20%20Training%20%20%20%20%20%20%7C%7C%20%20%20%20%20Validation%20%20%20%20%20%7C%7C%22%29%3B%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%282%20%2a%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%20%2B%2040%29%3B%0A%0A%09%2F%2F%20text%20below%20networks%0A%09fill%28%22black%22%29%3B%0A%09noStroke%28%29%3B%0A%09textSize%2820%29%3B%0A%09text%28%22Naive%20Bayes%20%2B%20Statistik%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09textSize%28PIXEL_SIZE%20%2a%206%29%3B%0A%0A%09%2F%2F%20create%20all%20grafic%20buffers%0A%09trainBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09validBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09decisionBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20initial%20training%20and%20validation%20buffer%0A%09drawDataInBuffer%28trainInputArray%2C%20trainOutputArray%2C%20trainBuffer%29%3B%0A%09drawDataInBuffer%28validInputArray%2C%20validOutputArray%2C%20validBuffer%29%3B%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09naiveBayesCalculateHistogramsPriors%28%29%3B%0A%0A%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09drawPrediction%28%29%3B%0A%0A%09%2F%2F%20end%20of%20training%0A%09console.log%28%22Das%20Training%20ist%20beendet%20%3A-%29%22%29%3B%0A%0A%7D&css=&html=%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Fp5%22%3E%3C%2Fscript%3E&autorun=off&height=400px#NaiveBayes}}+{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0Aconst%20ANZAHL_INTERVALLE%20%3D%208%3B%20%2F%2F%20ganzzahliger%20Wert%20zwischen%202%20und%20100%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20constants%0Aconst%20MIN_NO_OF_INTERVALS%20%3D%201%3B%0Aconst%20MAX_NO_OF_INTERVALS%20%3D%20100%3B%0Aconst%20DATA_RANGE%20%3D%2010%3B%0Aconst%20DATA_WINDOW_SIZE%20%3D%20200%3B%0Aconst%20DATA_SCALE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20DATA_RANGE%29%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%20100%3B%0Aconst%20PIXEL_SIZE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20NUM_DATA_PIXEL%29%3B%0A%0A%2F%2F%20training%20data%0Aconst%20trainInputArray%20%3D%20%5B%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%201.5%5D%2C%0A%09%5B3.5%2C%204.0%5D%2C%0A%09%5B4.0%2C%206.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B4.5%2C%203.0%5D%2C%0A%09%5B5.0%2C%205.0%5D%2C%0A%09%5B5.5%2C%206.0%5D%2C%0A%09%5B6.5%2C%203.0%5D%2C%0A%09%5B7.0%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.0%5D%2C%0A%09%5B8.5%2C%205.5%5D%2C%0A%09%5B1.5%2C%203.0%5D%2C%0A%09%5B1.5%2C%204.5%5D%2C%0A%09%5B1.5%2C%207.0%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B3.0%2C%203.0%5D%2C%0A%09%5B3.0%2C%205.5%5D%2C%0A%09%5B3.0%2C%206.5%5D%2C%0A%09%5B4.0%2C%208.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B6.5%2C%207.5%5D%2C%0A%09%5B8.0%2C%206.5%5D%2C%0A%09%5B8.0%2C%208.5%5D%0A%5D%3B%0Aconst%20trainOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0Aconst%20trainInputMax%20%3D%20%5B9.0%2C%208.5%5D%3B%0Aconst%20trainInputMin%20%3D%20%5B1.5%2C%201.5%5D%3B%0Aconst%20NoOfClasses%20%3D%202%3B%0A%0A%2F%2F%20validation%20data%0Aconst%20validInputArray%20%3D%20%5B%0A%09%5B2.5%2C%207.0%5D%2C%0A%09%5B3.5%2C%201.0%5D%2C%0A%09%5B3.5%2C%207.0%5D%2C%0A%09%5B4.0%2C%203.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B4.5%2C%202.5%5D%2C%0A%09%5B4.5%2C%205.0%5D%2C%0A%09%5B6.0%2C%202.5%5D%2C%0A%09%5B6.0%2C%204.5%5D%2C%0A%09%5B6.5%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.5%5D%2C%0A%09%5B8.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%206.5%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B2.5%2C%203.5%5D%2C%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%206.0%5D%2C%0A%09%5B4.0%2C%208.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B5.5%2C%208.5%5D%2C%0A%09%5B6.5%2C%207.0%5D%2C%0A%09%5B7.5%2C%208.5%5D%2C%0A%09%5B8.5%2C%207.0%5D%0A%5D%3B%0Aconst%20validOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0A%0A%2F%2F%20global%20variables%0Alet%20testProbabilities%2C%20trainBuffer%2C%20validBuffer%2C%20decisionBuffer%3B%0Aconst%20BayesTable%20%3D%20%5B%5D%3B%0Aconst%20BayesPriors%20%3D%20%5B%5D%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20Naive%20Bayes%20calculate%20histograms%20and%20priors%0A%2F%2F%0Afunction%20naiveBayesCalculateHistogramsPriors%28%29%20%7B%0A%0A%09%2F%2F%20Reset%20table%20and%20priors%0A%09%2F%2F%20for%20each%20class%20c%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09BayesPriors.push%280%29%3B%0A%09%09BayesTable.push%28%5B%5D%29%3B%0A%09%09%2F%2F%20for%20each%20input%20feature%20f%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09BayesTable%5Bc%5D.push%28%5B%5D%29%3B%0A%09%09%09%2F%2F%20for%20each%20interval%20i%0A%09%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_INTERVALLE%3B%20i%2B%2B%29%20%7B%0A%09%09%09%09BayesTable%5Bc%5D%5Bf%5D.push%280%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20Count%20Bayes%20table%20and%20priors%0A%09%2F%2F%20for%20each%20sample%20s%0A%09for%20%28let%20s%20%3D%200%3B%20s%20%3C%20trainInputArray.length%3B%20s%2B%2B%29%20%7B%0A%09%09let%20interval%20%3D%20%5B%5D%3B%0A%09%09%2F%2F%20get%20intervals%20of%20current%20sample%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09interval.push%28Math.floor%28%28trainInputArray%5Bs%5D%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%20%2a%20ANZAHL_INTERVALLE%20%2F%20%28trainInputMax%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%29%29%3B%0A%09%09%09if%20%28interval%5Bf%5D%20%3E%3D%20ANZAHL_INTERVALLE%29%20%7B%0A%09%09%09%09interval%5Bf%5D%20%3D%20ANZAHL_INTERVALLE%20-%201%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09%2F%2F%20increase%20Bayes%20table%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09if%20%28trainOutputArray%5Bs%5D%20%3D%3D%3D%201%29%20%7B%20%2F%2F%20sample%20belongs%20to%20first%20class%0A%09%09%09%09BayesTable%5B0%5D%5Bf%5D%5Binterval%5Bf%5D%5D%20%2B%3D%201%3B%0A%09%09%09%7D%20else%20%7B%20%2F%2F%20sample%20belongs%20to%20second%20class%0A%09%09%09%09BayesTable%5B1%5D%5Bf%5D%5Binterval%5Bf%5D%5D%20%2B%3D%201%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09%2F%2F%20increase%20Bayes%20priors%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09if%20%28trainOutputArray%5Bs%5D%20%3D%3D%3D%201%29%20%7B%20%2F%2F%20sample%20belongs%20to%20first%20class%0A%09%09%09%09BayesPriors%5B1%5D%20%2B%3D%201.0%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09BayesPriors%5B0%5D%20%2B%3D%201.0%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20Scale%20Bayes%20table%20and%20table%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_INTERVALLE%3B%20i%2B%2B%29%20%7B%0A%09%09%09%09BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%20%3D%20BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%20%2F%20BayesPriors%5Bc%5D%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09BayesPriors%5Bc%5D%20%3D%20BayesPriors%5Bc%5D%20%2F%20trainInputArray.length%3B%0A%09%7D%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20Naive%20Bayes%20determine%20probability%20that%20sample%20belongs%20to%20first%20class%0A%2F%2F%0Afunction%20naiveBayesProbabilityOfFirstClass%28inputSample%29%20%7B%0A%09%2F%2F%20local%20variables%0A%09let%20BayesProbabilities%20%3D%20%5B%5D%3B%0A%09let%20BayesSum%20%3D%200.0%3B%0A%09let%20interval%20%3D%20%5B%5D%3B%0A%0A%09%2F%2F%20get%20interval%20for%20each%20input%20feature%20f%0A%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09interval.push%28Math.floor%28%28inputSample%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%20%2a%20ANZAHL_INTERVALLE%20%2F%20%28trainInputMax%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%29%29%3B%0A%09%09if%20%28interval%5Bf%5D%20%3E%3D%20ANZAHL_INTERVALLE%29%20%7B%0A%09%09%09interval%5Bf%5D%20%3D%20ANZAHL_INTERVALLE%20-%201%3B%0A%09%09%7D%0A%09%09if%20%28interval%5Bf%5D%20%3C%200%29%20%7B%0A%09%09%09interval%5Bf%5D%20%3D%200%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20calculate%20unscaled%20Bayes%20probabilities%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%2F%2F%20calculate%20product%20of%20p%28xi%7CCj%29%20over%20all%20features%0A%09%09let%20product%20%3D%201%3B%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09product%20%3D%20product%20%2a%20BayesTable%5Bc%5D%5Bf%5D%5Binterval%5Bf%5D%5D%3B%0A%09%09%7D%0A%09%09BayesProbabilities.push%28BayesPriors%5Bc%5D%20%2a%20product%29%3B%0A%09%09BayesSum%20%3D%20BayesSum%20%2B%20BayesProbabilities%5Bc%5D%3B%0A%09%7D%0A%09%2F%2F%20if%20no%20probability%20is%20assigned%20choose%20uniform%0A%09if%20%28BayesSum%20%3D%3D%3D%200%29%20%7B%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09BayesProbabilities%5Bc%5D%20%3D%201%20%2F%20NoOfClasses%3B%0A%09%09%7D%0A%09%09BayesSum%20%3D%201%3B%0A%09%7D%0A%0A%09%2F%2F%20scale%20Bayes%20probabilites%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09BayesProbabilities%5Bc%5D%20%3D%20BayesProbabilities%5Bc%5D%20%2F%20BayesSum%3B%0A%09%7D%0A%0A%09%2F%2F%20return%20probability%20of%20first%20class%0A%09return%20BayesProbabilities%5B0%5D%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20mean%20squared%20error%0A%2F%2F%0Afunction%20calculateMSE%28inputData%2C%20desiredOutput%29%20%7B%0A%09let%20mse%20%3D%200.0%3B%0A%09for%20%28s%20%3D%200%3B%20s%20%3C%20inputData.length%3B%20s%2B%2B%29%20%7B%0A%09%09let%20probabilityFirstClass%20%3D%20naiveBayesProbabilityOfFirstClass%28inputData%5Bs%5D%29%3B%0A%09%09mse%20%3D%20mse%20%2B%20%28probabilityFirstClass%20-%20desiredOutput%5Bs%5D%29%20%2a%2a%202%3B%0A%09%7D%0A%09return%20mse%20%2F%20inputData.length%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20percentage%20of%20correct%20classifications%0A%2F%2F%0Afunction%20calculatePercentageCorrect%28inputData%2C%20desiredOutput%29%20%7B%0A%09let%20correct%20%3D%200%3B%0A%09let%20equally%20%3D%200%3B%0A%09for%20%28s%20%3D%200%3B%20s%20%3C%20inputData.length%3B%20s%2B%2B%29%20%7B%0A%09%09let%20probabilityFirstClass%20%3D%20naiveBayesProbabilityOfFirstClass%28inputData%5Bs%5D%29%3B%0A%09%09if%20%28%28desiredOutput%5Bs%5D%20%3D%3D%3D%201%20%26%26%20probabilityFirstClass%20%3E%200.5%29%20%7C%7C%20%28desiredOutput%5Bs%5D%20%3D%3D%3D%200%20%26%26%20probabilityFirstClass%20%3C%200.5%29%29%20%7B%0A%09%09%09correct%20%3D%20correct%20%2B%201%3B%0A%09%09%7D%0A%09%09if%20%28probabilityFirstClass%20%3D%3D%3D%200.5%29%20%7B%0A%09%09%09equally%20%3D%20equally%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09return%20%7B%0A%09%09samples%3A%20inputData.length%2C%0A%09%09correct%3A%20correct%2C%0A%09%09wrong%3A%20inputData.length%20-%20correct%20-%20equally%2C%0A%09%09equally%3A%20equally%2C%0A%09%09accuracy%3A%20Math.round%28100%20%2a%20correct%20%2F%20%28inputData.length%20-%20equally%29%29%2C%0A%09%7D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Afunction%20drawPrediction%28%29%20%7B%0A%09%2F%2F%20calculate%20mse%20and%20percentages%20of%20correct%20classifications%0A%09let%20mseTrain%20%3D%20calculateMSE%28trainInputArray%2C%20trainOutputArray%29%3B%0A%09let%20mseValid%20%3D%20calculateMSE%28validInputArray%2C%20validOutputArray%29%3B%0A%09let%20trainCorrect%20%3D%20calculatePercentageCorrect%28trainInputArray%2C%20trainOutputArray%29%3B%0A%09let%20validCorrect%20%3D%20calculatePercentageCorrect%28validInputArray%2C%20validOutputArray%29%3B%0A%0A%09%2F%2F%20calculate%20normalized%20testing%20inputs%20for%20visualisation%0A%09decisionBuffer.noStroke%28%29%3B%0A%09for%20%28x%20%3D%200%3B%20x%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20x%20%3D%20x%20%2B%201%29%20%7B%0A%09%09for%20%28y%20%3D%200%3B%20y%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20y%20%3D%20y%20%2B%201%29%20%7B%0A%09%09%09let%20probabilityOfClass1%20%3D%20naiveBayesProbabilityOfFirstClass%28%5Bx%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%2C%20y%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%5D%29%3B%0A%09%09%09if%20%28probabilityOfClass1%20%3E%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28200%2C%20255%2C%20200%29%3B%20%2F%2F%20green%0A%09%09%09%7D%20else%20if%20%28probabilityOfClass1%20%3C%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28200%2C%20200%2C%20255%29%3B%20%2F%2F%20blue%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09decisionBuffer.fill%28255%2C%20255%2C%20255%29%3B%20%2F%2F%20white%0A%09%09%09%7D%0A%09%09%09decisionBuffer.rect%28DATA_SCALE%20%2a%20x%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20PIXEL_SIZE%20%2F%202%2C%20DATA_SCALE%20%2a%20%2810%20-%20y%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%29%20-%20PIXEL_SIZE%20%2F%202%2C%20PIXEL_SIZE%2C%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09image%28decisionBuffer%2C%200%2C%200%29%3B%0A%09image%28decisionBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20training%20and%20validation%20samples%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20add%20labels%20to%20training%20and%20validation%20feature%20space%20%2F%2F%20wrong%0A%09noStroke%28%29%3B%0A%09text%28%22Training%3A%20%22%20%2B%20trainCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20trainCorrect.wrong%20%2B%20%22%20falsch%2C%20%22%20%2B%20trainCorrect.equally%20%2B%20%22%20%3F%3F%29%22%2C%204%20%2a%20PIXEL_SIZE%2C%208%20%2a%20PIXEL_SIZE%29%3B%0A%09text%28%22Validation%3A%20%22%20%2B%20validCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20validCorrect.wrong%20%2B%20%22%20falsch%2C%20%22%20%2B%20validCorrect.equally%20%2B%20%22%20%3F%3F%29%22%2C%20DATA_WINDOW_SIZE%20%2B%204%20%2a%20PIXEL_SIZE%2C%208%20%2a%20PIXEL_SIZE%29%3B%0A%0A%09%2F%2F%20print%20training%20and%20validation%20results%20to%20console%0A%09console.log%28%22%7C%7C%20%20%20%20%20%201%20%7C%7C%20%22%20%2B%20trainCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseTrain.toFixed%286%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20validCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseValid.toFixed%286%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20data%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawDataInBuffer%28inputData%2C%20outputData%2C%20buffer%29%20%7B%0A%09buffer.noFill%28%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09buffer.rect%280%2C%200%2C%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28outputData%5Bi%5D%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%2F%2F%20green%20circle%20for%20output%20label%20%3D%3D%3D%201%0A%09%09%09buffer.stroke%28%22darkgreen%22%29%3B%0A%09%09%09buffer.circle%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09%2F%2F%20blue%20cross%20for%20output%20label%20%3D%3D%3D%200%0A%09%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Afunction%20setup%28%29%20%7B%20%2F%2Fnoprotect%20%28for%20large%20arrays%29%0A%09%2F%2F%20check%20for%20number%20of%20intervals%0A%09if%20%28ANZAHL_INTERVALLE%20%3C%202%20%7C%7C%20ANZAHL_INTERVALLE%20%3E%20100%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20Die%20ANZAHL_INTERVALLE%20darf%20nur%20von%202%20bis%20100%20gehen.%22%29%3B%0A%09%09return%20false%3B%0A%09%7D%0A%0A%09%2F%2F%20initial%20console%20output%0A%09console.log%28%22%7C%7C%20%20%20%20%20%20%20%20%7C%7C%20%20%20%20%20%20Training%20%20%20%20%20%20%7C%7C%20%20%20%20%20Validation%20%20%20%20%20%7C%7C%22%29%3B%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%282%20%2a%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%20%2B%2040%29%3B%0A%0A%09%2F%2F%20text%20below%20networks%0A%09fill%28%22black%22%29%3B%0A%09noStroke%28%29%3B%0A%09textSize%2820%29%3B%0A%09text%28%22Naive%20Bayes%20%2B%20Statistik%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09textSize%28PIXEL_SIZE%20%2a%206%29%3B%0A%0A%09%2F%2F%20create%20all%20grafic%20buffers%0A%09trainBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09validBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09decisionBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20initial%20training%20and%20validation%20buffer%0A%09drawDataInBuffer%28trainInputArray%2C%20trainOutputArray%2C%20trainBuffer%29%3B%0A%09drawDataInBuffer%28validInputArray%2C%20validOutputArray%2C%20validBuffer%29%3B%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20train%20model%0A%09naiveBayesCalculateHistogramsPriors%28%29%3B%0A%0A%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09drawPrediction%28%29%3B%0A%0A%09%2F%2F%20end%20of%20training%0A%09console.log%28%22Das%20Training%20ist%20beendet%20%3A-%29%22%29%3B%0A%0A%7D&css=&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E&autorun=off&height=400px#NaiveBayes}}
 </WRAP> </WRAP>
  
Zeile 178: Zeile 178:
 == Monte-Carlo neuronales Netz == == Monte-Carlo neuronales Netz ==
  
-{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0Aconst%20MIN_WEIGHT%20%3D%20-5.0%3B%20%2F%2F%20ganzzahliger%20Wert%0Aconst%20MAX_WEIGHT%20%3D%205.0%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%20MIN_WEIGHT%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%203%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%201000%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%20100%3B%20%2F%2F%20ganzzahlig%20Wert%20%3E%200%0Aconst%20OBJEKTIVE%20%3D%20%22mse%22%3B%20%2F%2F%20entweder%20%22mse%22%20oder%20%22korrekt%22%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20constants%0Aconst%20DATA_RANGE%20%3D%2010%3B%0Aconst%20DATA_WINDOW_SIZE%20%3D%20200%3B%0Aconst%20DATA_SCALE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20DATA_RANGE%29%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%2050%3B%0Aconst%20PIXEL_SIZE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20NUM_DATA_PIXEL%29%3B%0A%0A%2F%2F%20training%20data%0Aconst%20trainInputArray%20%3D%20%5B%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%201.5%5D%2C%0A%09%5B3.5%2C%204.0%5D%2C%0A%09%5B4.0%2C%206.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B4.5%2C%203.0%5D%2C%0A%09%5B5.0%2C%205.0%5D%2C%0A%09%5B5.5%2C%206.0%5D%2C%0A%09%5B6.5%2C%203.0%5D%2C%0A%09%5B7.0%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.0%5D%2C%0A%09%5B8.5%2C%205.5%5D%2C%0A%09%5B1.5%2C%203.0%5D%2C%0A%09%5B1.5%2C%204.5%5D%2C%0A%09%5B1.5%2C%207.0%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B3.0%2C%203.0%5D%2C%0A%09%5B3.0%2C%205.5%5D%2C%0A%09%5B3.0%2C%206.5%5D%2C%0A%09%5B4.0%2C%208.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B6.5%2C%207.5%5D%2C%0A%09%5B8.0%2C%206.5%5D%2C%0A%09%5B8.0%2C%208.5%5D%0A%5D%3B%0Aconst%20trainOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0Aconst%20trainInputMax%20%3D%20%5B9.0%2C%208.5%5D%3B%0Aconst%20trainInputMin%20%3D%20%5B1.5%2C%201.5%5D%3B%0A%0A%2F%2F%20validation%20data%0Aconst%20validInputArray%20%3D%20%5B%0A%09%5B2.5%2C%207.0%5D%2C%0A%09%5B3.5%2C%201.0%5D%2C%0A%09%5B3.5%2C%207.0%5D%2C%0A%09%5B4.0%2C%203.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B4.5%2C%202.5%5D%2C%0A%09%5B4.5%2C%205.0%5D%2C%0A%09%5B6.0%2C%202.5%5D%2C%0A%09%5B6.0%2C%204.5%5D%2C%0A%09%5B6.5%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.5%5D%2C%0A%09%5B8.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%206.5%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B2.5%2C%203.5%5D%2C%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%206.0%5D%2C%0A%09%5B4.0%2C%208.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B5.5%2C%208.5%5D%2C%0A%09%5B6.5%2C%207.0%5D%2C%0A%09%5B7.5%2C%208.5%5D%2C%0A%09%5B8.5%2C%207.0%5D%0A%5D%3B%0Aconst%20validOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0A%0A%2F%2F%20store%20best%20weights%0Alet%20best_w11%2C%20best_w12%2C%20best_b1%2C%20best_w2%2C%20best_b2%3B%0A%2F%2F%20store%20best%20mse%20train%0Alet%20lowest_mseTrain%20%3D%20Number.MAX_VALUE%3B%0Alet%20highest_accuracy%20%3D%20-1%3B%0A%0A%2F%2F%20global%20variables%0Alet%20model%2C%20trainInput%2C%20trainOutput%2C%20validInput%2C%20validOutput%2C%20testInput%2C%20actualEpoch%2C%20actualLogs%2C%20trainBuffer%2C%20validBuffer%2C%20decisionBuffer%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20generate%20data%20tensors%0A%2F%2F%0Afunction%20generateTensors%28%29%20%7B%0A%09let%20normalizedTrainInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedValidInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedTestInputArray%20%3D%20%5B%5D%3B%0A%0A%09%2F%2F%20normalize%20training%20and%20validation%20inputs%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20trainInputArray.length%3B%20i%2B%2B%29%20%7B%0A%09%09normalizedTrainInputArray.push%28%5B%28trainInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28trainInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09normalizedValidInputArray.push%28%5B%28validInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28validInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20generate%20training%20input%20and%20output%20tensors%0A%09trainInput%20%3D%20tf.tensor2d%28normalizedTrainInputArray%2C%20%5BnormalizedTrainInputArray.length%2C%202%5D%29%3B%0A%09trainOutput%20%3D%20tf.tensor2d%28trainOutputArray%2C%20%5BtrainOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20trainOutput%20%3D%20tf.oneHot%28tf.tensor1d%28trainOutputArray%29.toInt%28%29%2C%202%29%3B%0A%09%2F%2F%20trainInput.print%28%29%3B%20%2F%2F%20Print%20Tensor%0A%0A%09%2F%2F%20generate%20validation%20input%20and%20output%20tensors%0A%09validInput%20%3D%20tf.tensor2d%28normalizedValidInputArray%2C%20%5BnormalizedValidInputArray.length%2C%202%5D%29%3B%0A%09validOutput%20%3D%20tf.tensor2d%28validOutputArray%2C%20%5BvalidOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20validOutput%20%3D%20tf.oneHot%28tf.tensor1d%28validOutputArray%29.toInt%28%29%2C%202%29%3B%0A%0A%09%2F%2F%20calculate%20normalized%20testing%20inputs%20for%20visualisation%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09normalizedTestInputArray.push%28%5B%28i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20generate%20testing%20input%20tensor%20for%20visualisation%0A%09testInput%20%3D%20tf.tensor2d%28normalizedTestInputArray%2C%20%5BnormalizedTestInputArray.length%2C%202%5D%29%3B%0A%09%2F%2F%09testInput.print%28%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20build%20neural%20network%20model%20and%20define%20training%0A%2F%2F%0Afunction%20compileModel%28%29%20%7B%0A%09%2F%2F%20neural%20network%20structure%0A%09model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5B2%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27tanh%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27sigmoid%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.sgd%281%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%2C%0A%09%09metrics%3A%20%5B%27mse%27%5D%2C%0A%09%7D%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20neural%20network%0A%2F%2F%0Aasync%20function%20trainModel%28%29%20%7B%0A%09%2F%2F%20there%20is%20no%20training%2C%20the%20model%20is%20just%20randomly%20initialized%0A%09%2F%2F%20the%20best%20initialization%20result%20is%20stored%20and%20drawn%0A%09for%20%28let%20epoch%20%3D%201%3B%20epoch%20%3C%20ANZAHL_EPOCHEN%3B%20epoch%20%3D%20epoch%20%2B%201%29%20%7B%0A%09%09%2F%2F%20generate%20random%20weights%0A%09%09let%20w11%20%3D%20%5B%5D%2C%0A%09%09%09w12%20%3D%20%5B%5D%2C%0A%09%09%09b1%20%3D%20%5B%5D%2C%0A%09%09%09w2%20%3D%20%5B%5D%2C%0A%09%09%09b2%20%3D%20%5B%5D%3B%0A%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_HIDDEN_NEURONS%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09%09w11.push%28Math.floor%28Math.random%28%29%20%2a%20%28MAX_WEIGHT%20-%20MIN_WEIGHT%20%2B%201%29%20%2B%20MIN_WEIGHT%29%29%3B%0A%09%09%09w12.push%28Math.floor%28Math.random%28%29%20%2a%20%28MAX_WEIGHT%20-%20MIN_WEIGHT%20%2B%201%29%20%2B%20MIN_WEIGHT%29%29%3B%0A%09%09%09b1.push%28Math.floor%28Math.random%28%29%20%2a%20%28MAX_WEIGHT%20-%20MIN_WEIGHT%20%2B%201%29%20%2B%20MIN_WEIGHT%29%29%3B%0A%09%09%09w2.push%28%5B%5D%29%3B%0A%09%09%09w2%5Bi%5D.push%28Math.floor%28Math.random%28%29%20%2a%20%28MAX_WEIGHT%20-%20MIN_WEIGHT%20%2B%201%29%20%2B%20MIN_WEIGHT%29%29%3B%0A%09%09%7D%0A%09%09b2.push%28Math.floor%28Math.random%28%29%20%2a%20%28MAX_WEIGHT%20-%20MIN_WEIGHT%20%2B%201%29%20%2B%20MIN_WEIGHT%29%29%3B%0A%09%09%2F%2F%20write%20random%20weight%20tensors%0A%09%09model.layers%5B0%5D.setWeights%28%5Btf.tensor%28%5Bw11%2C%20w12%5D%29%2C%20tf.tensor%28b1%29%5D%29%3B%0A%09%09model.layers%5B1%5D.setWeights%28%5Btf.tensor%28w2%29%2C%20tf.tensor%28b2%29%5D%29%3B%0A%09%09%2F%2F%20calculate%20mse%20over%20training%20set%0A%09%09let%20training%20%3D%20model.predict%28trainInput%29.arraySync%28%29%3B%0A%09%09%2F%2F%20new%20record%3F%0A%09%09if%20%28OBJEKTIVE%20%3D%3D%3D%20%22mse%22%29%20%7B%0A%09%09%09let%20mseTrain%20%3D%20calculateMSE%28training%2C%20trainOutputArray%29%3B%0A%09%09%09if%20%28mseTrain%20%3C%20lowest_mseTrain%29%20%7B%0A%09%09%09%09%2F%2F%20store%20new%20record%0A%09%09%09%09lowest_mseTrain%20%3D%20mseTrain%3B%0A%09%09%09%09%2F%2F%20store%20record%20weights%0A%09%09%09%09best_w11%20%3D%20w11%3B%0A%09%09%09%09best_w12%20%3D%20w12%3B%0A%09%09%09%09best_b1%20%3D%20b1%3B%0A%09%09%09%09best_w2%20%3D%20w2%3B%0A%09%09%09%09best_b2%20%3D%20b2%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20%7B%0A%09%09%09let%20accuracy%20%3D%20calculatePercentageCorrect%28training%2C%20trainOutputArray%29.accuracy%3B%0A%09%09%09if%20%28accuracy%20%3E%20highest_accuracy%29%20%7B%0A%09%09%09%09%2F%2F%20store%20new%20record%0A%09%09%09%09highest_accuracy%20%3D%20accuracy%3B%0A%09%09%09%09%2F%2F%20store%20record%20weights%0A%09%09%09%09best_w11%20%3D%20w11%3B%0A%09%09%09%09best_w12%20%3D%20w12%3B%0A%09%09%09%09best_b1%20%3D%20b1%3B%0A%09%09%09%09best_w2%20%3D%20w2%3B%0A%09%09%09%09best_b2%20%3D%20b2%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09%2F%2F%20draw%20record%0A%09%09if%20%28%28epoch%20%25%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%3D%3D%200%29%20%7C%7C%20%28epoch%20%3D%3D%3D%201%29%29%20%7B%0A%09%09%09%2F%2F%20load%20record%20model%0A%09%09%09model.layers%5B0%5D.setWeights%28%5Btf.tensor%28%5Bbest_w11%2C%20best_w12%5D%29%2C%20tf.tensor%28best_b1%29%5D%29%3B%0A%09%09%09model.layers%5B1%5D.setWeights%28%5Btf.tensor%28best_w2%29%2C%20tf.tensor%28best_b2%29%5D%29%3B%0A%09%09%09%2F%2F%20draw%20prediction%20and%20wait%20for%20it%0A%09%09%09await%20drawPrediction%28epoch%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20mean%20squared%20error%0A%2F%2F%0Afunction%20calculateMSE%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20mse%20%3D%200.0%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09mse%20%3D%20mse%20%2B%20%28predictedOutput%5Bi%5D%20-%20trueOutput%5Bi%5D%29%20%2a%2a%202%3B%0A%09%7D%0A%09return%20mse%20%2F%20predictedOutput.length%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20percentage%20of%20correct%20classifications%0A%2F%2F%0Afunction%20calculatePercentageCorrect%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20correct%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28%28trueOutput%5Bi%5D%20%3D%3D%3D%201%20%26%26%20predictedOutput%5Bi%5D%20%3E%3D%200.5%29%20%7C%7C%20%28trueOutput%5Bi%5D%20%3D%3D%3D%200%20%26%26%20predictedOutput%5Bi%5D%20%3C%200.5%29%29%20%7B%0A%09%09%09correct%20%3D%20correct%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09return%20%7B%0A%09%09accuracy%3A%20Math.round%28correct%20%2a%20100%20%2F%20predictedOutput.length%29%2C%0A%09%09wrong%3A%20predictedOutput.length%20-%20correct%0A%09%7D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%0A%2F%2F%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Aasync%20function%20drawPrediction%28epoch%29%20%7B%0A%09%2F%2F%20make%20predictions%20with%20neural%20network%0A%09let%20training%20%3D%20model.predict%28trainInput%29.arraySync%28%29%3B%0A%09let%20validation%20%3D%20model.predict%28validInput%29.arraySync%28%29%3B%0A%09let%20prediction%20%3D%20model.predict%28testInput%29.arraySync%28%29%3B%0A%0A%09%2F%2F%20calculate%20mse%20and%20percentages%20of%20correct%20classifications%0A%09let%20mseTrain%20%3D%20calculateMSE%28training%2C%20trainOutputArray%29%3B%0A%09let%20mseValid%20%3D%20calculateMSE%28validation%2C%20validOutputArray%29%3B%0A%09let%20trainCorrect%20%3D%20calculatePercentageCorrect%28training%2C%20trainOutputArray%29%3B%0A%09let%20validCorrect%20%3D%20calculatePercentageCorrect%28validation%2C%20validOutputArray%29%3B%0A%0A%09%2F%2F%20draw%20decision%20boundary%0A%09decisionBuffer.noStroke%28%29%3B%0A%09let%20element%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09%2F%2F%20transform%20neural%20network%20output%20into%20a%20color%0A%09%09%09if%20%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%2C%20255%2C%20Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%29%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20255%29%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20check%20for%20decision%20boundary%20and%20alter%20color%0A%09%09%09if%20%28%28element%20%25%20%28NUM_DATA_PIXEL%20%2B%201%29%29%20%21%3D%3D%200%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09if%20%28element%20%3E%3D%20NUM_DATA_PIXEL%20%2B%201%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09decisionBuffer.rect%28DATA_SCALE%20%2a%20i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20PIXEL_SIZE%20%2F%202%2C%20DATA_SCALE%20%2a%20%2810%20-%20j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%29%20-%20PIXEL_SIZE%20%2F%202%2C%20PIXEL_SIZE%2C%20PIXEL_SIZE%29%3B%0A%09%09%09element%20%3D%20element%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09image%28decisionBuffer%2C%200%2C%200%29%3B%0A%09image%28decisionBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20training%20and%20validation%20samples%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20add%20labels%20to%20training%20and%20validation%20feature%20space%20%2F%2F%20wrong%0A%09noStroke%28%29%3B%0A%09text%28%22Training%3A%20%22%20%2B%20trainCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20trainCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%09text%28%22Validation%3A%20%22%20%2B%20validCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%28%22%20%2B%20validCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%20DATA_WINDOW_SIZE%20%2B%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%0A%09%2F%2F%20print%20training%20and%20validation%20results%20to%20console%0A%09console.log%28%22%7C%7C%20%22%20%2B%20epoch.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20trainCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseTrain.toFixed%286%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20validCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseValid.toFixed%286%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20it%20is%20enough%20to%20wait%20for%201%20millisecond%20to%20make%0A%09%2F%2F%20the%20programm%20stop%20until%20the%20canvas%20is%20completed%0A%09return%20await%20waiting%281%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20wait%20for%20some%20milliseconds%0A%2F%2F%0Afunction%20waiting%28milliseconds%29%20%7B%0A%09return%20new%20Promise%28%28resolve%29%20%3D%3E%20%7B%0A%09%09setTimeout%28%28%29%20%3D%3E%20%7B%0A%09%09%09resolve%28%27resolved%27%29%3B%0A%09%09%7D%2C%20milliseconds%29%3B%0A%09%7D%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20data%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawDataInBuffer%28inputData%2C%20outputData%2C%20buffer%29%20%7B%0A%09buffer.noFill%28%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%20%2F%202%29%3B%0A%09buffer.rect%280%2C%200%2C%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28outputData%5Bi%5D%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%2F%2F%20green%20circle%20for%20output%20label%20%3D%3D%3D%201%0A%09%09%09buffer.stroke%28%22darkgreen%22%29%3B%0A%09%09%09buffer.circle%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%2C%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09%2F%2F%20blue%20cross%20for%20output%20label%20%3D%3D%3D%200%0A%09%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Aasync%20function%20setup%28%29%20%7B%20%2F%2Fnoprotect%20%28for%20large%20arrays%29%0A%09%2F%2F%20initial%20console%20output%0A%09console.log%28%22%7C%7C%20%20%20%20%20%20%20%20%7C%7C%20%20%20%20%20%20Training%20%20%20%20%20%20%7C%7C%20%20%20%20%20Validation%20%20%20%20%20%7C%7C%22%29%3B%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%282%20%2a%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%20%2B%2040%29%3B%0A%0A%09%2F%2F%20text%20below%20networks%0A%09fill%28%22black%22%29%3B%0A%09noStroke%28%29%3B%0A%09textSize%2820%29%3B%0A%09if%20%28OBJEKTIVE%20%3D%3D%3D%20%22mse%22%29%20%7B%0A%09%09text%28%22Neuronales%20Netz%20%2B%20Monte%20Carlo%20%28MSE%29%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09%7D%20else%20%7B%0A%09%09text%28%22Neuronales%20Netz%20%2B%20Monte%20Carlo%20%28Korrekt%29%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09%7D%0A%09textSize%28PIXEL_SIZE%20%2a%203%29%3B%0A%0A%09%2F%2F%20create%20all%20grafic%20buffers%0A%09trainBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09validBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09decisionBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20initial%20training%20and%20validation%20buffer%0A%09drawDataInBuffer%28trainInputArray%2C%20trainOutputArray%2C%20trainBuffer%29%3B%0A%09drawDataInBuffer%28validInputArray%2C%20validOutputArray%2C%20validBuffer%29%3B%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20data%20preprocessing%0A%09generateTensors%28%29%3B%0A%0A%09%2F%2F%20define%20model%20and%20training%0A%09compileModel%28%29%3B%0A%0A%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09await%20trainModel%28%29%3B%0A%0A%09%2F%2F%20end%20of%20training%0A%09console.log%28%22Das%20Training%20ist%20beendet%20%3A-%29%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20keyPressed%28%29%20ESC%20%3D%20emergency%20stop%0A%2F%2F%0Afunction%20keyPressed%28%29%20%7B%0A%09if%20%28keyCode%20%3D%3D%3D%2027%29%20%7B%20%2F%2F%20ESC%20key%0A%09%09%2F%2F%20initiate%20stop%20of%20training%20after%20next%20epoch%0A%09%09model.stopTraining%20%3D%20true%3B%0A%09%09%2F%2F%20response%20to%20user%0A%09%09console.log%28%22Training%20wurde%20Abgebrochen%21%20Finales%20Resultat%3A%22%29%3B%0A%09%09%2F%2F%20draw%20final%20Prediction%0A%09%09drawPrediction%28actualEpoch%2C%20actualLogs.loss%29%3B%0A%09%7D%0A%7D&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Fp5%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E&autorun=off&height=400px#MonteCarloNN}}+{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0Aconst%20MIN_WEIGHT%20%3D%20-5.0%3B%20%2F%2F%20ganzzahliger%20Wert%0Aconst%20MAX_WEIGHT%20%3D%205.0%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%20MIN_WEIGHT%0Aconst%20ANZAHL_HIDDEN_NEURONS%20%3D%203%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20ANZAHL_EPOCHEN%20%3D%201000%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%20100%3B%20%2F%2F%20ganzzahlig%20Wert%20%3E%200%0Aconst%20OBJEKTIVE%20%3D%20%22mse%22%3B%20%2F%2F%20entweder%20%22mse%22%20oder%20%22korrekt%22%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20constants%0Aconst%20DATA_RANGE%20%3D%2010%3B%0Aconst%20DATA_WINDOW_SIZE%20%3D%20200%3B%0Aconst%20DATA_SCALE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20DATA_RANGE%29%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%2050%3B%0Aconst%20PIXEL_SIZE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20NUM_DATA_PIXEL%29%3B%0A%0A%2F%2F%20training%20data%0Aconst%20trainInputArray%20%3D%20%5B%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%201.5%5D%2C%0A%09%5B3.5%2C%204.0%5D%2C%0A%09%5B4.0%2C%206.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B4.5%2C%203.0%5D%2C%0A%09%5B5.0%2C%205.0%5D%2C%0A%09%5B5.5%2C%206.0%5D%2C%0A%09%5B6.5%2C%203.0%5D%2C%0A%09%5B7.0%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.0%5D%2C%0A%09%5B8.5%2C%205.5%5D%2C%0A%09%5B1.5%2C%203.0%5D%2C%0A%09%5B1.5%2C%204.5%5D%2C%0A%09%5B1.5%2C%207.0%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B3.0%2C%203.0%5D%2C%0A%09%5B3.0%2C%205.5%5D%2C%0A%09%5B3.0%2C%206.5%5D%2C%0A%09%5B4.0%2C%208.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B6.5%2C%207.5%5D%2C%0A%09%5B8.0%2C%206.5%5D%2C%0A%09%5B8.0%2C%208.5%5D%0A%5D%3B%0Aconst%20trainOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0Aconst%20trainInputMax%20%3D%20%5B9.0%2C%208.5%5D%3B%0Aconst%20trainInputMin%20%3D%20%5B1.5%2C%201.5%5D%3B%0A%0A%2F%2F%20validation%20data%0Aconst%20validInputArray%20%3D%20%5B%0A%09%5B2.5%2C%207.0%5D%2C%0A%09%5B3.5%2C%201.0%5D%2C%0A%09%5B3.5%2C%207.0%5D%2C%0A%09%5B4.0%2C%203.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B4.5%2C%202.5%5D%2C%0A%09%5B4.5%2C%205.0%5D%2C%0A%09%5B6.0%2C%202.5%5D%2C%0A%09%5B6.0%2C%204.5%5D%2C%0A%09%5B6.5%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.5%5D%2C%0A%09%5B8.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%206.5%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B2.5%2C%203.5%5D%2C%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%206.0%5D%2C%0A%09%5B4.0%2C%208.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B5.5%2C%208.5%5D%2C%0A%09%5B6.5%2C%207.0%5D%2C%0A%09%5B7.5%2C%208.5%5D%2C%0A%09%5B8.5%2C%207.0%5D%0A%5D%3B%0Aconst%20validOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0A%0A%2F%2F%20store%20best%20weights%0Alet%20best_w11%2C%20best_w12%2C%20best_b1%2C%20best_w2%2C%20best_b2%3B%0A%2F%2F%20store%20best%20mse%20train%0Alet%20lowest_mseTrain%20%3D%20Number.MAX_VALUE%3B%0Alet%20highest_accuracy%20%3D%20-1%3B%0A%0A%2F%2F%20global%20variables%0Alet%20model%2C%20trainInput%2C%20trainOutput%2C%20validInput%2C%20validOutput%2C%20testInput%2C%20actualEpoch%2C%20actualLogs%2C%20trainBuffer%2C%20validBuffer%2C%20decisionBuffer%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20generate%20data%20tensors%0A%2F%2F%0Afunction%20generateTensors%28%29%20%7B%0A%09let%20normalizedTrainInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedValidInputArray%20%3D%20%5B%5D%3B%0A%09let%20normalizedTestInputArray%20%3D%20%5B%5D%3B%0A%0A%09%2F%2F%20normalize%20training%20and%20validation%20inputs%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20trainInputArray.length%3B%20i%2B%2B%29%20%7B%0A%09%09normalizedTrainInputArray.push%28%5B%28trainInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28trainInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09normalizedValidInputArray.push%28%5B%28validInputArray%5Bi%5D%5B0%5D%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28validInputArray%5Bi%5D%5B1%5D%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%7D%0A%0A%09%2F%2F%20generate%20training%20input%20and%20output%20tensors%0A%09trainInput%20%3D%20tf.tensor2d%28normalizedTrainInputArray%2C%20%5BnormalizedTrainInputArray.length%2C%202%5D%29%3B%0A%09trainOutput%20%3D%20tf.tensor2d%28trainOutputArray%2C%20%5BtrainOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20trainOutput%20%3D%20tf.oneHot%28tf.tensor1d%28trainOutputArray%29.toInt%28%29%2C%202%29%3B%0A%09%2F%2F%20trainInput.print%28%29%3B%20%2F%2F%20Print%20Tensor%0A%0A%09%2F%2F%20generate%20validation%20input%20and%20output%20tensors%0A%09validInput%20%3D%20tf.tensor2d%28normalizedValidInputArray%2C%20%5BnormalizedValidInputArray.length%2C%202%5D%29%3B%0A%09validOutput%20%3D%20tf.tensor2d%28validOutputArray%2C%20%5BvalidOutputArray.length%2C%201%5D%29%3B%0A%09%2F%2F%20let%20validOutput%20%3D%20tf.oneHot%28tf.tensor1d%28validOutputArray%29.toInt%28%29%2C%202%29%3B%0A%0A%09%2F%2F%20calculate%20normalized%20testing%20inputs%20for%20visualisation%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09normalizedTestInputArray.push%28%5B%28i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B0%5D%29%20%2F%20%28trainInputMax%5B0%5D%20-%20trainInputMin%5B0%5D%29%2C%20%28j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20trainInputMin%5B1%5D%29%20%2F%20%28trainInputMax%5B1%5D%20-%20trainInputMin%5B1%5D%29%5D%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20generate%20testing%20input%20tensor%20for%20visualisation%0A%09testInput%20%3D%20tf.tensor2d%28normalizedTestInputArray%2C%20%5BnormalizedTestInputArray.length%2C%202%5D%29%3B%0A%09%2F%2F%09testInput.print%28%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20build%20neural%20network%20model%20and%20define%20training%0A%2F%2F%0Afunction%20compileModel%28%29%20%7B%0A%09%2F%2F%20neural%20network%20structure%0A%09model%20%3D%20tf.sequential%28%7B%0A%09%09layers%3A%20%5B%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27HiddenLayer1%27%2C%0A%09%09%09%09inputShape%3A%20%5B2%5D%2C%0A%09%09%09%09units%3A%20ANZAHL_HIDDEN_NEURONS%2C%0A%09%09%09%09activation%3A%20%27tanh%27%0A%09%09%09%7D%29%2C%0A%09%09%09tf.layers.dense%28%7B%0A%09%09%09%09name%3A%20%27OutputLayer%27%2C%0A%09%09%09%09units%3A%201%2C%0A%09%09%09%09activation%3A%20%27sigmoid%27%0A%09%09%09%7D%29%0A%09%09%5D%0A%09%7D%29%3B%0A%0A%09%2F%2F%20neural%20network%20training%0A%09model.compile%28%7B%0A%09%09optimizer%3A%20tf.train.sgd%281%29%2C%0A%09%09loss%3A%20tf.losses.meanSquaredError%2C%0A%09%09metrics%3A%20%5B%27mse%27%5D%2C%0A%09%7D%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20train%20neural%20network%0A%2F%2F%0Aasync%20function%20trainModel%28%29%20%7B%0A%09%2F%2F%20there%20is%20no%20training%2C%20the%20model%20is%20just%20randomly%20initialized%0A%09%2F%2F%20the%20best%20initialization%20result%20is%20stored%20and%20drawn%0A%09for%20%28let%20epoch%20%3D%201%3B%20epoch%20%3C%20ANZAHL_EPOCHEN%3B%20epoch%20%3D%20epoch%20%2B%201%29%20%7B%0A%09%09%2F%2F%20generate%20random%20weights%0A%09%09let%20w11%20%3D%20%5B%5D%2C%0A%09%09%09w12%20%3D%20%5B%5D%2C%0A%09%09%09b1%20%3D%20%5B%5D%2C%0A%09%09%09w2%20%3D%20%5B%5D%2C%0A%09%09%09b2%20%3D%20%5B%5D%3B%0A%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_HIDDEN_NEURONS%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09%09w11.push%28Math.floor%28Math.random%28%29%20%2a%20%28MAX_WEIGHT%20-%20MIN_WEIGHT%20%2B%201%29%20%2B%20MIN_WEIGHT%29%29%3B%0A%09%09%09w12.push%28Math.floor%28Math.random%28%29%20%2a%20%28MAX_WEIGHT%20-%20MIN_WEIGHT%20%2B%201%29%20%2B%20MIN_WEIGHT%29%29%3B%0A%09%09%09b1.push%28Math.floor%28Math.random%28%29%20%2a%20%28MAX_WEIGHT%20-%20MIN_WEIGHT%20%2B%201%29%20%2B%20MIN_WEIGHT%29%29%3B%0A%09%09%09w2.push%28%5B%5D%29%3B%0A%09%09%09w2%5Bi%5D.push%28Math.floor%28Math.random%28%29%20%2a%20%28MAX_WEIGHT%20-%20MIN_WEIGHT%20%2B%201%29%20%2B%20MIN_WEIGHT%29%29%3B%0A%09%09%7D%0A%09%09b2.push%28Math.floor%28Math.random%28%29%20%2a%20%28MAX_WEIGHT%20-%20MIN_WEIGHT%20%2B%201%29%20%2B%20MIN_WEIGHT%29%29%3B%0A%09%09%2F%2F%20write%20random%20weight%20tensors%0A%09%09model.layers%5B0%5D.setWeights%28%5Btf.tensor%28%5Bw11%2C%20w12%5D%29%2C%20tf.tensor%28b1%29%5D%29%3B%0A%09%09model.layers%5B1%5D.setWeights%28%5Btf.tensor%28w2%29%2C%20tf.tensor%28b2%29%5D%29%3B%0A%09%09%2F%2F%20calculate%20mse%20over%20training%20set%0A%09%09let%20training%20%3D%20model.predict%28trainInput%29.arraySync%28%29%3B%0A%09%09%2F%2F%20new%20record%3F%0A%09%09if%20%28OBJEKTIVE%20%3D%3D%3D%20%22mse%22%29%20%7B%0A%09%09%09let%20mseTrain%20%3D%20calculateMSE%28training%2C%20trainOutputArray%29%3B%0A%09%09%09if%20%28mseTrain%20%3C%20lowest_mseTrain%29%20%7B%0A%09%09%09%09%2F%2F%20store%20new%20record%0A%09%09%09%09lowest_mseTrain%20%3D%20mseTrain%3B%0A%09%09%09%09%2F%2F%20store%20record%20weights%0A%09%09%09%09best_w11%20%3D%20w11%3B%0A%09%09%09%09best_w12%20%3D%20w12%3B%0A%09%09%09%09best_b1%20%3D%20b1%3B%0A%09%09%09%09best_w2%20%3D%20w2%3B%0A%09%09%09%09best_b2%20%3D%20b2%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20%7B%0A%09%09%09let%20accuracy%20%3D%20calculatePercentageCorrect%28training%2C%20trainOutputArray%29.accuracy%3B%0A%09%09%09if%20%28accuracy%20%3E%20highest_accuracy%29%20%7B%0A%09%09%09%09%2F%2F%20store%20new%20record%0A%09%09%09%09highest_accuracy%20%3D%20accuracy%3B%0A%09%09%09%09%2F%2F%20store%20record%20weights%0A%09%09%09%09best_w11%20%3D%20w11%3B%0A%09%09%09%09best_w12%20%3D%20w12%3B%0A%09%09%09%09best_b1%20%3D%20b1%3B%0A%09%09%09%09best_w2%20%3D%20w2%3B%0A%09%09%09%09best_b2%20%3D%20b2%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%09%2F%2F%20draw%20record%0A%09%09if%20%28%28epoch%20%25%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%3D%3D%200%29%20%7C%7C%20%28epoch%20%3D%3D%3D%201%29%29%20%7B%0A%09%09%09%2F%2F%20load%20record%20model%0A%09%09%09model.layers%5B0%5D.setWeights%28%5Btf.tensor%28%5Bbest_w11%2C%20best_w12%5D%29%2C%20tf.tensor%28best_b1%29%5D%29%3B%0A%09%09%09model.layers%5B1%5D.setWeights%28%5Btf.tensor%28best_w2%29%2C%20tf.tensor%28best_b2%29%5D%29%3B%0A%09%09%09%2F%2F%20draw%20prediction%20and%20wait%20for%20it%0A%09%09%09await%20drawPrediction%28epoch%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20mean%20squared%20error%0A%2F%2F%0Afunction%20calculateMSE%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20mse%20%3D%200.0%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09mse%20%3D%20mse%20%2B%20%28predictedOutput%5Bi%5D%20-%20trueOutput%5Bi%5D%29%20%2a%2a%202%3B%0A%09%7D%0A%09return%20mse%20%2F%20predictedOutput.length%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20percentage%20of%20correct%20classifications%0A%2F%2F%0Afunction%20calculatePercentageCorrect%28predictedOutput%2C%20trueOutput%29%20%7B%0A%09let%20correct%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20predictedOutput.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28%28trueOutput%5Bi%5D%20%3D%3D%3D%201%20%26%26%20predictedOutput%5Bi%5D%20%3E%3D%200.5%29%20%7C%7C%20%28trueOutput%5Bi%5D%20%3D%3D%3D%200%20%26%26%20predictedOutput%5Bi%5D%20%3C%200.5%29%29%20%7B%0A%09%09%09correct%20%3D%20correct%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09return%20%7B%0A%09%09accuracy%3A%20Math.round%28correct%20%2a%20100%20%2F%20predictedOutput.length%29%2C%0A%09%09wrong%3A%20predictedOutput.length%20-%20correct%0A%09%7D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%0A%2F%2F%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Aasync%20function%20drawPrediction%28epoch%29%20%7B%0A%09%2F%2F%20make%20predictions%20with%20neural%20network%0A%09let%20training%20%3D%20model.predict%28trainInput%29.arraySync%28%29%3B%0A%09let%20validation%20%3D%20model.predict%28validInput%29.arraySync%28%29%3B%0A%09let%20prediction%20%3D%20model.predict%28testInput%29.arraySync%28%29%3B%0A%0A%09%2F%2F%20calculate%20mse%20and%20percentages%20of%20correct%20classifications%0A%09let%20mseTrain%20%3D%20calculateMSE%28training%2C%20trainOutputArray%29%3B%0A%09let%20mseValid%20%3D%20calculateMSE%28validation%2C%20validOutputArray%29%3B%0A%09let%20trainCorrect%20%3D%20calculatePercentageCorrect%28training%2C%20trainOutputArray%29%3B%0A%09let%20validCorrect%20%3D%20calculatePercentageCorrect%28validation%2C%20validOutputArray%29%3B%0A%0A%09%2F%2F%20draw%20decision%20boundary%0A%09decisionBuffer.noStroke%28%29%3B%0A%09let%20element%20%3D%200%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20i%20%3D%20i%20%2B%201%29%20%7B%0A%09%09for%20%28j%20%3D%200%3B%20j%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20j%20%3D%20j%20%2B%201%29%20%7B%0A%09%09%09%2F%2F%20transform%20neural%20network%20output%20into%20a%20color%0A%09%09%09if%20%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%2C%20255%2C%20Math.round%28%281%20-%20prediction%5Belement%5D%5B0%5D%29%20%2a%20100%20%2B%20200.5%29%29%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09decisionBuffer.fill%28Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20Math.round%28prediction%5Belement%5D%5B0%5D%20%2a%20100%20%2B%20200.5%29%2C%20255%29%3B%0A%09%09%09%7D%0A%09%09%09%2F%2F%20check%20for%20decision%20boundary%20and%20alter%20color%0A%09%09%09if%20%28%28element%20%25%20%28NUM_DATA_PIXEL%20%2B%201%29%29%20%21%3D%3D%200%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%201%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09if%20%28element%20%3E%3D%20NUM_DATA_PIXEL%20%2B%201%20%26%26%20%28%28prediction%5Belement%5D%5B0%5D%20%3E%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3C%3D%200.5%29%20%7C%7C%20%28prediction%5Belement%5D%5B0%5D%20%3C%3D%200.5%20%26%26%20prediction%5Belement%20-%20%28NUM_DATA_PIXEL%20%2B%201%29%5D%5B0%5D%20%3E%200.5%29%29%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28%27red%27%29%3B%0A%09%09%09%7D%0A%09%09%09decisionBuffer.rect%28DATA_SCALE%20%2a%20i%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20PIXEL_SIZE%20%2F%202%2C%20DATA_SCALE%20%2a%20%2810%20-%20j%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%29%20-%20PIXEL_SIZE%20%2F%202%2C%20PIXEL_SIZE%2C%20PIXEL_SIZE%29%3B%0A%09%09%09element%20%3D%20element%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09image%28decisionBuffer%2C%200%2C%200%29%3B%0A%09image%28decisionBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20training%20and%20validation%20samples%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20add%20labels%20to%20training%20and%20validation%20feature%20space%20%2F%2F%20wrong%0A%09noStroke%28%29%3B%0A%09text%28%22Training%3A%20%22%20%2B%20trainCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20trainCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%09text%28%22Validation%3A%20%22%20%2B%20validCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%28%22%20%2B%20validCorrect.wrong%20%2B%20%22%20falsch%29%22%2C%20DATA_WINDOW_SIZE%20%2B%202%20%2a%20PIXEL_SIZE%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%0A%09%2F%2F%20print%20training%20and%20validation%20results%20to%20console%0A%09console.log%28%22%7C%7C%20%22%20%2B%20epoch.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20trainCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseTrain.toFixed%286%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20validCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseValid.toFixed%286%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20it%20is%20enough%20to%20wait%20for%201%20millisecond%20to%20make%0A%09%2F%2F%20the%20programm%20stop%20until%20the%20canvas%20is%20completed%0A%09return%20await%20waiting%281%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20wait%20for%20some%20milliseconds%0A%2F%2F%0Afunction%20waiting%28milliseconds%29%20%7B%0A%09return%20new%20Promise%28%28resolve%29%20%3D%3E%20%7B%0A%09%09setTimeout%28%28%29%20%3D%3E%20%7B%0A%09%09%09resolve%28%27resolved%27%29%3B%0A%09%09%7D%2C%20milliseconds%29%3B%0A%09%7D%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20data%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawDataInBuffer%28inputData%2C%20outputData%2C%20buffer%29%20%7B%0A%09buffer.noFill%28%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%20%2F%202%29%3B%0A%09buffer.rect%280%2C%200%2C%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28outputData%5Bi%5D%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%2F%2F%20green%20circle%20for%20output%20label%20%3D%3D%3D%201%0A%09%09%09buffer.stroke%28%22darkgreen%22%29%3B%0A%09%09%09buffer.circle%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%2C%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09%2F%2F%20blue%20cross%20for%20output%20label%20%3D%3D%3D%200%0A%09%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Aasync%20function%20setup%28%29%20%7B%20%2F%2Fnoprotect%20%28for%20large%20arrays%29%0A%09%2F%2F%20initial%20console%20output%0A%09console.log%28%22%7C%7C%20%20%20%20%20%20%20%20%7C%7C%20%20%20%20%20%20Training%20%20%20%20%20%20%7C%7C%20%20%20%20%20Validation%20%20%20%20%20%7C%7C%22%29%3B%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%282%20%2a%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%20%2B%2040%29%3B%0A%0A%09%2F%2F%20text%20below%20networks%0A%09fill%28%22black%22%29%3B%0A%09noStroke%28%29%3B%0A%09textSize%2820%29%3B%0A%09if%20%28OBJEKTIVE%20%3D%3D%3D%20%22mse%22%29%20%7B%0A%09%09text%28%22Neuronales%20Netz%20%2B%20Monte%20Carlo%20%28MSE%29%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09%7D%20else%20%7B%0A%09%09text%28%22Neuronales%20Netz%20%2B%20Monte%20Carlo%20%28Korrekt%29%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09%7D%0A%09textSize%28PIXEL_SIZE%20%2a%203%29%3B%0A%0A%09%2F%2F%20create%20all%20grafic%20buffers%0A%09trainBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09validBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09decisionBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20initial%20training%20and%20validation%20buffer%0A%09drawDataInBuffer%28trainInputArray%2C%20trainOutputArray%2C%20trainBuffer%29%3B%0A%09drawDataInBuffer%28validInputArray%2C%20validOutputArray%2C%20validBuffer%29%3B%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20data%20preprocessing%0A%09generateTensors%28%29%3B%0A%0A%09%2F%2F%20define%20model%20and%20training%0A%09compileModel%28%29%3B%0A%0A%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09await%20trainModel%28%29%3B%0A%0A%09%2F%2F%20end%20of%20training%0A%09console.log%28%22Das%20Training%20ist%20beendet%20%3A-%29%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20keyPressed%28%29%20ESC%20%3D%20emergency%20stop%0A%2F%2F%0Afunction%20keyPressed%28%29%20%7B%0A%09if%20%28keyCode%20%3D%3D%3D%2027%29%20%7B%20%2F%2F%20ESC%20key%0A%09%09%2F%2F%20initiate%20stop%20of%20training%20after%20next%20epoch%0A%09%09model.stopTraining%20%3D%20true%3B%0A%09%09%2F%2F%20response%20to%20user%0A%09%09console.log%28%22Training%20wurde%20Abgebrochen%21%20Finales%20Resultat%3A%22%29%3B%0A%09%09%2F%2F%20draw%20final%20Prediction%0A%09%09drawPrediction%28actualEpoch%2C%20actualLogs.loss%29%3B%0A%09%7D%0A%7D&css=undefined&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E%0A%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2F%40tensorflow%2Ftfjs%40latest%2Fdist%2Ftf.min.js%22%3E%3C%2Fscript%3E&autorun=off&height=400px#MonteCarloNN}}
  
 \\  \\ 
 == Monte-Carlo Naive Bayes == == Monte-Carlo Naive Bayes ==
  
-{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0Aconst%20ANZAHL_INTERVALLE%20%3D%208%3B%20%2F%2F%20ganzzahliger%20Wert%20zwischen%202%20und%20100%0Aconst%20ANZAHL_EPOCHEN%20%3D%201000%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%20100%3B%20%2F%2F%20ganzzahlig%20Wert%20%3E%200%0Aconst%20OBJEKTIVE%20%3D%20%22mse%22%3B%20%2F%2F%20entweder%20%22mse%22%20oder%20%22korrekt%22%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20constants%0Aconst%20MIN_NO_OF_INTERVALS%20%3D%201%3B%0Aconst%20MAX_NO_OF_INTERVALS%20%3D%20100%3B%0Aconst%20DATA_RANGE%20%3D%2010%3B%0Aconst%20DATA_WINDOW_SIZE%20%3D%20200%3B%0Aconst%20DATA_SCALE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20DATA_RANGE%29%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%20100%3B%0Aconst%20PIXEL_SIZE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20NUM_DATA_PIXEL%29%3B%0Aconst%20MILISEKUNDEN_GRAFIK_UPDATE%20%3D%20200%3B%0A%0A%2F%2F%20training%20data%0Aconst%20trainInputArray%20%3D%20%5B%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%201.5%5D%2C%0A%09%5B3.5%2C%204.0%5D%2C%0A%09%5B4.0%2C%206.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B4.5%2C%203.0%5D%2C%0A%09%5B5.0%2C%205.0%5D%2C%0A%09%5B5.5%2C%206.0%5D%2C%0A%09%5B6.5%2C%203.0%5D%2C%0A%09%5B7.0%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.0%5D%2C%0A%09%5B8.5%2C%205.5%5D%2C%0A%09%5B1.5%2C%203.0%5D%2C%0A%09%5B1.5%2C%204.5%5D%2C%0A%09%5B1.5%2C%207.0%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B3.0%2C%203.0%5D%2C%0A%09%5B3.0%2C%205.5%5D%2C%0A%09%5B3.0%2C%206.5%5D%2C%0A%09%5B4.0%2C%208.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B6.5%2C%207.5%5D%2C%0A%09%5B8.0%2C%206.5%5D%2C%0A%09%5B8.0%2C%208.5%5D%0A%5D%3B%0Aconst%20trainOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0Aconst%20trainInputMax%20%3D%20%5B9.0%2C%208.5%5D%3B%0Aconst%20trainInputMin%20%3D%20%5B1.5%2C%201.5%5D%3B%0Aconst%20NoOfClasses%20%3D%202%3B%0A%0A%2F%2F%20validation%20data%0Aconst%20validInputArray%20%3D%20%5B%0A%09%5B2.5%2C%207.0%5D%2C%0A%09%5B3.5%2C%201.0%5D%2C%0A%09%5B3.5%2C%207.0%5D%2C%0A%09%5B4.0%2C%203.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B4.5%2C%202.5%5D%2C%0A%09%5B4.5%2C%205.0%5D%2C%0A%09%5B6.0%2C%202.5%5D%2C%0A%09%5B6.0%2C%204.5%5D%2C%0A%09%5B6.5%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.5%5D%2C%0A%09%5B8.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%206.5%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B2.5%2C%203.5%5D%2C%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%206.0%5D%2C%0A%09%5B4.0%2C%208.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B5.5%2C%208.5%5D%2C%0A%09%5B6.5%2C%207.0%5D%2C%0A%09%5B7.5%2C%208.5%5D%2C%0A%09%5B8.5%2C%207.0%5D%0A%5D%3B%0Aconst%20validOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0A%0A%2F%2F%20global%20variables%0Alet%20testProbabilities%2C%20trainBuffer%2C%20validBuffer%2C%20decisionBuffer%3B%0Alet%20BayesTable%20%3D%20%5B%5D%3B%0Alet%20BayesPriors%20%3D%20%5B%5D%3B%0A%0A%2F%2F%20store%20best%20priors%20and%20table%0Alet%20best_BayesTable%2C%20best_BayesPriors%3B%0Alet%20lowest_mseTrain%20%3D%20Number.MAX_VALUE%3B%0Alet%20highest_accuracy%20%3D%20-1%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20Uniform%20random%20distributed%20number%20from%200%20including%201%0A%2F%2F%0Afunction%20randomPlus%28%29%20%7B%0A%09return%20random%28%29%20%3E%3D%200.5%20%3F%20Math.random%28%29%20%3A%201%20-%20Math.random%28%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20Naive%20Bayes%20calculate%20histograms%20and%20priors%0A%2F%2F%0Afunction%20naiveBayesDrawHistogramsPriors%28%29%20%7B%0A%09%2F%2F%20many%20draws%0A%09for%20%28let%20e%20%3D%200%3B%20e%20%3C%20EPOCHEN_FUER_GRAFIK_UPDATE%3B%20e%20%3D%20e%20%2B%201%29%20%7B%0A%0A%09%09%2F%2F%20For%20each%20draw%2C%20reset%20table%20and%20priors%0A%09%09%2F%2F%20for%20each%20class%20c%0A%09%09BayesPriors%20%3D%20%5B%5D%3B%0A%09%09BayesTable%20%3D%20%5B%5D%3B%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09BayesPriors.push%28randomPlus%28%29%29%3B%0A%09%09%09BayesTable.push%28%5B%5D%29%3B%0A%09%09%09%2F%2F%20for%20each%20input%20feature%20f%0A%09%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09%09let%20entrySum%20%3D%200%3B%0A%09%09%09%09BayesTable%5Bc%5D.push%28%5B%5D%29%3B%0A%09%09%09%09%2F%2F%20for%20each%20interval%20i%0A%09%09%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_INTERVALLE%3B%20i%2B%2B%29%20%7B%0A%09%09%09%09%09BayesTable%5Bc%5D%5Bf%5D.push%28randomPlus%28%29%29%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09%2F%2F%20Scale%20Bayes%20table%20and%20table%0A%09%09let%20priorsSum%20%3D%200%3B%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09priorsSum%20%3D%20priorsSum%20%2B%20BayesPriors%5Bc%5D%3B%0A%09%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09%09let%20intervalSum%20%3D%200%3B%0A%09%09%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_INTERVALLE%3B%20i%2B%2B%29%20%7B%0A%09%09%09%09%09intervalSum%20%3D%20intervalSum%20%2B%20BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%3B%0A%09%09%09%09%7D%0A%09%09%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_INTERVALLE%3B%20i%2B%2B%29%20%7B%0A%09%09%09%09%09if%20%28intervalSum%20%3E%200%29%20%7B%0A%09%09%09%09%09%09BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%20%3D%20BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%20%2F%20intervalSum%3B%0A%09%09%09%09%09%7D%20else%20%7B%0A%09%09%09%09%09%09BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%20%3D%201%20%2F%20ANZAHL_INTERVALLE%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09if%20%28priorsSum%20%3E%200%29%20%7B%0A%09%09%09%09BayesPriors%5Bc%5D%20%3D%20BayesPriors%5Bc%5D%20%2F%20priorsSum%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09BayesPriors%5Bc%5D%20%3D%201%20%2F%20NoOfClasses%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09%2F%2F%20check%20for%20new%20record%20and%20store%20new%20record%0A%09%09if%20%28OBJEKTIVE%20%3D%3D%3D%20%22mse%22%29%20%7B%0A%09%09%09let%20mse%20%3D%20calculateMSE%28trainInputArray%2C%20trainOutputArray%29%3B%0A%09%09%09if%20%28mse%20%3C%20lowest_mseTrain%29%20%7B%0A%09%09%09%09lowest_mseTrain%20%3D%20mse%3B%0A%09%09%09%09best_BayesTable%20%3D%20JSON.parse%28JSON.stringify%28BayesTable%29%29%3B%0A%09%09%09%09best_BayesPriors%20%3D%20JSON.parse%28JSON.stringify%28BayesPriors%29%29%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20%7B%0A%09%09%09let%20accuracy%20%3D%20calculatePercentageCorrect%28trainInputArray%2C%20trainOutputArray%29.accuracy%3B%0A%09%09%09if%20%28accuracy%20%3E%20highest_accuracy%29%20%7B%0A%09%09%09%09highest_accuracy%20%3D%20accuracy%3B%0A%09%09%09%09best_BayesTable%20%3D%20JSON.parse%28JSON.stringify%28BayesTable%29%29%3B%0A%09%09%09%09best_BayesPriors%20%3D%20JSON.parse%28JSON.stringify%28BayesPriors%29%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%7D%0A%0A%2F%2F%0A%2F%2F%20Naive%20Bayes%20determine%20probability%20that%20sample%20belongs%20to%20first%20class%0A%2F%2F%0Afunction%20naiveBayesProbabilityOfFirstClass%28inputSample%29%20%7B%0A%09%2F%2F%20local%20variables%0A%09let%20BayesProbabilities%20%3D%20%5B%5D%3B%0A%09let%20BayesSum%20%3D%200.0%3B%0A%09let%20interval%20%3D%20%5B%5D%3B%0A%0A%09%2F%2F%20get%20interval%20for%20each%20input%20feature%20f%0A%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09interval.push%28Math.floor%28%28inputSample%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%20%2a%20ANZAHL_INTERVALLE%20%2F%20%28trainInputMax%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%29%29%3B%0A%09%09if%20%28interval%5Bf%5D%20%3E%3D%20ANZAHL_INTERVALLE%29%20%7B%0A%09%09%09interval%5Bf%5D%20%3D%20ANZAHL_INTERVALLE%20-%201%3B%0A%09%09%7D%0A%09%09if%20%28interval%5Bf%5D%20%3C%200%29%20%7B%0A%09%09%09interval%5Bf%5D%20%3D%200%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20calculate%20unscaled%20Bayes%20probabilities%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%2F%2F%20calculate%20product%20of%20p%28xi%7CCj%29%20over%20all%20features%0A%09%09let%20product%20%3D%201%3B%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09product%20%3D%20product%20%2a%20BayesTable%5Bc%5D%5Bf%5D%5Binterval%5Bf%5D%5D%3B%0A%09%09%7D%0A%09%09BayesProbabilities.push%28BayesPriors%5Bc%5D%20%2a%20product%29%3B%0A%09%09BayesSum%20%3D%20BayesSum%20%2B%20BayesProbabilities%5Bc%5D%3B%0A%09%7D%0A%09%2F%2F%20if%20no%20probability%20is%20assigned%20choose%20uniform%0A%09if%20%28BayesSum%20%3D%3D%3D%200%29%20%7B%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09BayesProbabilities%5Bc%5D%20%3D%201%20%2F%20NoOfClasses%3B%0A%09%09%7D%0A%09%09BayesSum%20%3D%201%3B%0A%09%7D%0A%0A%09%2F%2F%20scale%20Bayes%20probabilites%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09BayesProbabilities%5Bc%5D%20%3D%20BayesProbabilities%5Bc%5D%20%2F%20BayesSum%3B%0A%09%7D%0A%09%0A%09%2F%2F%20return%20probability%20of%20first%20class%0A%09return%20BayesProbabilities%5B0%5D%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20mean%20squared%20error%0A%2F%2F%0Afunction%20calculateMSE%28inputData%2C%20desiredOutput%29%20%7B%0A%09let%20mse%20%3D%200.0%3B%0A%09for%20%28s%20%3D%200%3B%20s%20%3C%20inputData.length%3B%20s%2B%2B%29%20%7B%0A%09%09let%20probabilityFirstClass%20%3D%20naiveBayesProbabilityOfFirstClass%28inputData%5Bs%5D%29%3B%0A%09%09mse%20%3D%20mse%20%2B%20%28probabilityFirstClass%20-%20desiredOutput%5Bs%5D%29%20%2a%2a%202%3B%0A%09%7D%0A%09return%20mse%20%2F%20inputData.length%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20percentage%20of%20correct%20classifications%0A%2F%2F%0Afunction%20calculatePercentageCorrect%28inputData%2C%20desiredOutput%29%20%7B%0A%09let%20correct%20%3D%200%3B%0A%09let%20equally%20%3D%200%3B%0A%09for%20%28s%20%3D%200%3B%20s%20%3C%20inputData.length%3B%20s%2B%2B%29%20%7B%0A%09%09let%20probabilityFirstClass%20%3D%20naiveBayesProbabilityOfFirstClass%28inputData%5Bs%5D%29%3B%0A%09%09if%20%28%28desiredOutput%5Bs%5D%20%3D%3D%3D%201%20%26%26%20probabilityFirstClass%20%3E%200.5%29%20%7C%7C%20%28desiredOutput%5Bs%5D%20%3D%3D%3D%200%20%26%26%20probabilityFirstClass%20%3C%200.5%29%29%20%7B%0A%09%09%09correct%20%3D%20correct%20%2B%201%3B%0A%09%09%7D%0A%09%09if%20%28probabilityFirstClass%20%3D%3D%3D%200.5%29%20%7B%0A%09%09%09equally%20%3D%20equally%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09return%20%7B%0A%09%09samples%3A%20inputData.length%2C%0A%09%09correct%3A%20correct%2C%0A%09%09wrong%3A%20inputData.length%20-%20correct%20-%20equally%2C%0A%09%09equally%3A%20equally%2C%0A%09%09accuracy%3A%20Math.round%28100%20%2a%20correct%20%2F%20%28inputData.length%20-%20equally%29%29%2C%0A%09%7D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Afunction%20drawPrediction%28epoch%29%20%7B%0A%09%2F%2F%20restore%20best%20model%0A%09BayesTable%20%3D%20JSON.parse%28JSON.stringify%28best_BayesTable%29%29%3B%0A%09BayesPriors%20%3D%20JSON.parse%28JSON.stringify%28best_BayesPriors%29%29%3B%0A%0A%09%2F%2F%20calculate%20mse%20and%20percentages%20of%20correct%20classifications%0A%09let%20mseTrain%20%3D%20calculateMSE%28trainInputArray%2C%20trainOutputArray%29%3B%0A%09let%20mseValid%20%3D%20calculateMSE%28validInputArray%2C%20validOutputArray%29%3B%0A%09let%20trainCorrect%20%3D%20calculatePercentageCorrect%28trainInputArray%2C%20trainOutputArray%29%3B%0A%09let%20validCorrect%20%3D%20calculatePercentageCorrect%28validInputArray%2C%20validOutputArray%29%3B%0A%0A%09%2F%2F%20calculate%20normalized%20testing%20inputs%20for%20visualisation%0A%09decisionBuffer.noStroke%28%29%3B%0A%09for%20%28x%20%3D%200%3B%20x%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20x%20%3D%20x%20%2B%201%29%20%7B%0A%09%09for%20%28y%20%3D%200%3B%20y%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20y%20%3D%20y%20%2B%201%29%20%7B%0A%09%09%09let%20probabilityOfClass1%20%3D%20naiveBayesProbabilityOfFirstClass%28%5Bx%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%2C%20y%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%5D%29%3B%0A%09%09%09if%20%28probabilityOfClass1%20%3E%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28200%2C%20255%2C%20200%29%3B%20%2F%2F%20green%0A%09%09%09%7D%20else%20if%20%28probabilityOfClass1%20%3C%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28200%2C%20200%2C%20255%29%3B%20%2F%2F%20blue%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09decisionBuffer.fill%28255%2C%20255%2C%20255%29%3B%20%2F%2F%20white%0A%09%09%09%7D%0A%09%09%09decisionBuffer.rect%28DATA_SCALE%20%2a%20x%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20PIXEL_SIZE%20%2F%202%2C%20DATA_SCALE%20%2a%20%2810%20-%20y%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%29%20-%20PIXEL_SIZE%20%2F%202%2C%20PIXEL_SIZE%2C%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09image%28decisionBuffer%2C%200%2C%200%29%3B%0A%09image%28decisionBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20training%20and%20validation%20samples%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20add%20labels%20to%20training%20and%20validation%20feature%20space%20%2F%2F%20wrong%0A%09noStroke%28%29%3B%0A%09text%28%22Training%3A%20%22%20%2B%20trainCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20trainCorrect.wrong%20%2B%20%22%20falsch%2C%20%22%20%2B%20trainCorrect.equally%20%2B%20%22%20%3F%3F%29%22%2C%204%20%2a%20PIXEL_SIZE%2C%208%20%2a%20PIXEL_SIZE%29%3B%0A%09text%28%22Validation%3A%20%22%20%2B%20validCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20validCorrect.wrong%20%2B%20%22%20falsch%2C%20%22%20%2B%20validCorrect.equally%20%2B%20%22%20%3F%3F%29%22%2C%20DATA_WINDOW_SIZE%20%2B%204%20%2a%20PIXEL_SIZE%2C%208%20%2a%20PIXEL_SIZE%29%3B%0A%0A%09%2F%2F%20print%20training%20and%20validation%20results%20to%20console%0A%09console.log%28%22%7C%7C%20%22%20%2B%20%28epoch%2aEPOCHEN_FUER_GRAFIK_UPDATE%29.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20trainCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseTrain.toFixed%286%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20validCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseValid.toFixed%286%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20data%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawDataInBuffer%28inputData%2C%20outputData%2C%20buffer%29%20%7B%0A%09buffer.noFill%28%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09buffer.rect%280%2C%200%2C%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28outputData%5Bi%5D%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%2F%2F%20green%20circle%20for%20output%20label%20%3D%3D%3D%201%0A%09%09%09buffer.stroke%28%22darkgreen%22%29%3B%0A%09%09%09buffer.circle%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09%2F%2F%20blue%20cross%20for%20output%20label%20%3D%3D%3D%200%0A%09%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20wait%20for%20some%20milliseconds%0A%2F%2F%0Afunction%20waiting%28milliseconds%29%20%7B%0A%09return%20new%20Promise%28%28resolve%29%20%3D%3E%20%7B%0A%09%09setTimeout%28%28%29%20%3D%3E%20%7B%0A%09%09%09resolve%28%27resolved%27%29%3B%0A%09%09%7D%2C%20milliseconds%29%3B%0A%09%7D%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Aasync%20function%20setup%28%29%20%7B%20%2F%2Fnoprotect%20%28for%20large%20arrays%29%0A%09%2F%2F%20check%20for%20number%20of%20intervals%0A%09if%20%28ANZAHL_INTERVALLE%20%3C%202%20%7C%7C%20ANZAHL_INTERVALLE%20%3E%20100%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20Die%20ANZAHL_INTERVALLE%20darf%20nur%20von%202%20bis%20100%20gehen.%22%29%3B%0A%09%09return%20false%3B%0A%09%7D%0A%0A%09%2F%2F%20initial%20console%20output%0A%09console.log%28%22%7C%7C%20%20%20%20%20%20%20%20%7C%7C%20%20%20%20%20%20Training%20%20%20%20%20%20%7C%7C%20%20%20%20%20Validation%20%20%20%20%20%7C%7C%22%29%3B%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%282%20%2a%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%20%2B%2040%29%3B%0A%0A%09%2F%2F%20text%20below%20networks%0A%09fill%28%22black%22%29%3B%0A%09noStroke%28%29%3B%0A%09textSize%2820%29%3B%0A%09if%20%28OBJEKTIVE%20%3D%3D%3D%20%22mse%22%29%20%7B%0A%09%09text%28%22Naive%20Bayes%20%2B%20Monte%20Carlo%20%28MSE%29%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09%7D%20else%20%7B%0A%09%09text%28%22Naive%20Bayes%20%2B%20Monte%20Carlo%20%28Korrekt%29%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09%7D%0A%09textSize%28PIXEL_SIZE%20%2a%206%29%3B%0A%0A%09%2F%2F%20create%20all%20grafic%20buffers%0A%09trainBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09validBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09decisionBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20initial%20training%20and%20validation%20buffer%0A%09drawDataInBuffer%28trainInputArray%2C%20trainOutputArray%2C%20trainBuffer%29%3B%0A%09drawDataInBuffer%28validInputArray%2C%20validOutputArray%2C%20validBuffer%29%3B%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20and%20evaluate%20models%0A%09for%20%28let%20e%20%3D%201%3B%20e%20%3C%20ANZAHL_EPOCHEN%20%2F%20EPOCHEN_FUER_GRAFIK_UPDATE%3B%20e%20%3D%20e%20%2B%201%29%20%7B%0A%09%09%2F%2F%20train%20model%0A%09%09naiveBayesDrawHistogramsPriors%28%29%3B%0A%0A%09%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09%09drawPrediction%28e%29%3B%0A%09%09await%20waiting%28MILISEKUNDEN_GRAFIK_UPDATE%29%3B%0A%09%7D%0A%0A%09%2F%2F%20end%20of%20training%0A%09console.log%28%22Das%20Training%20ist%20beendet%20%3A-%29%22%29%3B%0A%0A%7D&css=&html=%3Cscript%20src%3D%22https%3A%2F%2Fcdn.jsdelivr.net%2Fnpm%2Fp5%22%3E%3C%2Fscript%3E&autorun=off&height=400px#MonteCarloNB}}+{{exorciser/jspg?javascript=%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%2F%2F%20Diese%20Trainings-%20und%20Updateparameter%20d%C3%BCrfen%20ge%C3%A4ndert%20werden.%0Aconst%20ANZAHL_INTERVALLE%20%3D%208%3B%20%2F%2F%20ganzzahliger%20Wert%20zwischen%202%20und%20100%0Aconst%20ANZAHL_EPOCHEN%20%3D%201000%3B%20%2F%2F%20ganzzahliger%20Wert%20%3E%200%0Aconst%20EPOCHEN_FUER_GRAFIK_UPDATE%20%3D%20100%3B%20%2F%2F%20ganzzahlig%20Wert%20%3E%200%0Aconst%20OBJEKTIVE%20%3D%20%22mse%22%3B%20%2F%2F%20entweder%20%22mse%22%20oder%20%22korrekt%22%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20CONSTANTS%20AND%20GLOBAL%20VARIABLES%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%20constants%0Aconst%20MIN_NO_OF_INTERVALS%20%3D%201%3B%0Aconst%20MAX_NO_OF_INTERVALS%20%3D%20100%3B%0Aconst%20DATA_RANGE%20%3D%2010%3B%0Aconst%20DATA_WINDOW_SIZE%20%3D%20200%3B%0Aconst%20DATA_SCALE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20DATA_RANGE%29%3B%0Aconst%20NUM_DATA_PIXEL%20%3D%20100%3B%0Aconst%20PIXEL_SIZE%20%3D%20Math.round%28DATA_WINDOW_SIZE%20%2F%20NUM_DATA_PIXEL%29%3B%0Aconst%20MILISEKUNDEN_GRAFIK_UPDATE%20%3D%20200%3B%0A%0A%2F%2F%20training%20data%0Aconst%20trainInputArray%20%3D%20%5B%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%201.5%5D%2C%0A%09%5B3.5%2C%204.0%5D%2C%0A%09%5B4.0%2C%206.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B4.5%2C%203.0%5D%2C%0A%09%5B5.0%2C%205.0%5D%2C%0A%09%5B5.5%2C%206.0%5D%2C%0A%09%5B6.5%2C%203.0%5D%2C%0A%09%5B7.0%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.0%5D%2C%0A%09%5B8.5%2C%205.5%5D%2C%0A%09%5B1.5%2C%203.0%5D%2C%0A%09%5B1.5%2C%204.5%5D%2C%0A%09%5B1.5%2C%207.0%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B3.0%2C%203.0%5D%2C%0A%09%5B3.0%2C%205.5%5D%2C%0A%09%5B3.0%2C%206.5%5D%2C%0A%09%5B4.0%2C%208.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B6.5%2C%207.5%5D%2C%0A%09%5B8.0%2C%206.5%5D%2C%0A%09%5B8.0%2C%208.5%5D%0A%5D%3B%0Aconst%20trainOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0Aconst%20trainInputMax%20%3D%20%5B9.0%2C%208.5%5D%3B%0Aconst%20trainInputMin%20%3D%20%5B1.5%2C%201.5%5D%3B%0Aconst%20NoOfClasses%20%3D%202%3B%0A%0A%2F%2F%20validation%20data%0Aconst%20validInputArray%20%3D%20%5B%0A%09%5B2.5%2C%207.0%5D%2C%0A%09%5B3.5%2C%201.0%5D%2C%0A%09%5B3.5%2C%207.0%5D%2C%0A%09%5B4.0%2C%203.5%5D%2C%0A%09%5B4.5%2C%206.5%5D%2C%0A%09%5B4.5%2C%202.5%5D%2C%0A%09%5B4.5%2C%205.0%5D%2C%0A%09%5B6.0%2C%202.5%5D%2C%0A%09%5B6.0%2C%204.5%5D%2C%0A%09%5B6.5%2C%205.5%5D%2C%0A%09%5B7.5%2C%204.5%5D%2C%0A%09%5B8.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%205.0%5D%2C%0A%09%5B1.5%2C%206.5%5D%2C%0A%09%5B2.0%2C%201.5%5D%2C%0A%09%5B2.5%2C%203.5%5D%2C%0A%09%5B2.5%2C%206.0%5D%2C%0A%09%5B3.5%2C%206.0%5D%2C%0A%09%5B4.0%2C%208.0%5D%2C%0A%09%5B4.0%2C%207.0%5D%2C%0A%09%5B5.5%2C%208.5%5D%2C%0A%09%5B6.5%2C%207.0%5D%2C%0A%09%5B7.5%2C%208.5%5D%2C%0A%09%5B8.5%2C%207.0%5D%0A%5D%3B%0Aconst%20validOutputArray%20%3D%20%5B0%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%200%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%2C%201%5D%3B%0A%0A%2F%2F%20global%20variables%0Alet%20testProbabilities%2C%20trainBuffer%2C%20validBuffer%2C%20decisionBuffer%3B%0Alet%20BayesTable%20%3D%20%5B%5D%3B%0Alet%20BayesPriors%20%3D%20%5B%5D%3B%0A%0A%2F%2F%20store%20best%20priors%20and%20table%0Alet%20best_BayesTable%2C%20best_BayesPriors%3B%0Alet%20lowest_mseTrain%20%3D%20Number.MAX_VALUE%3B%0Alet%20highest_accuracy%20%3D%20-1%3B%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20NEURAL%20NETWORK%20FUNCTIONS%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20Uniform%20random%20distributed%20number%20from%200%20including%201%0A%2F%2F%0Afunction%20randomPlus%28%29%20%7B%0A%09return%20random%28%29%20%3E%3D%200.5%20%3F%20Math.random%28%29%20%3A%201%20-%20Math.random%28%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20Naive%20Bayes%20calculate%20histograms%20and%20priors%0A%2F%2F%0Afunction%20naiveBayesDrawHistogramsPriors%28%29%20%7B%0A%09%2F%2F%20many%20draws%0A%09for%20%28let%20e%20%3D%200%3B%20e%20%3C%20EPOCHEN_FUER_GRAFIK_UPDATE%3B%20e%20%3D%20e%20%2B%201%29%20%7B%0A%0A%09%09%2F%2F%20For%20each%20draw%2C%20reset%20table%20and%20priors%0A%09%09%2F%2F%20for%20each%20class%20c%0A%09%09BayesPriors%20%3D%20%5B%5D%3B%0A%09%09BayesTable%20%3D%20%5B%5D%3B%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09BayesPriors.push%28randomPlus%28%29%29%3B%0A%09%09%09BayesTable.push%28%5B%5D%29%3B%0A%09%09%09%2F%2F%20for%20each%20input%20feature%20f%0A%09%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09%09let%20entrySum%20%3D%200%3B%0A%09%09%09%09BayesTable%5Bc%5D.push%28%5B%5D%29%3B%0A%09%09%09%09%2F%2F%20for%20each%20interval%20i%0A%09%09%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_INTERVALLE%3B%20i%2B%2B%29%20%7B%0A%09%09%09%09%09BayesTable%5Bc%5D%5Bf%5D.push%28randomPlus%28%29%29%3B%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09%2F%2F%20Scale%20Bayes%20table%20and%20table%0A%09%09let%20priorsSum%20%3D%200%3B%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09priorsSum%20%3D%20priorsSum%20%2B%20BayesPriors%5Bc%5D%3B%0A%09%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09%09let%20intervalSum%20%3D%200%3B%0A%09%09%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_INTERVALLE%3B%20i%2B%2B%29%20%7B%0A%09%09%09%09%09intervalSum%20%3D%20intervalSum%20%2B%20BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%3B%0A%09%09%09%09%7D%0A%09%09%09%09for%20%28let%20i%20%3D%200%3B%20i%20%3C%20ANZAHL_INTERVALLE%3B%20i%2B%2B%29%20%7B%0A%09%09%09%09%09if%20%28intervalSum%20%3E%200%29%20%7B%0A%09%09%09%09%09%09BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%20%3D%20BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%20%2F%20intervalSum%3B%0A%09%09%09%09%09%7D%20else%20%7B%0A%09%09%09%09%09%09BayesTable%5Bc%5D%5Bf%5D%5Bi%5D%20%3D%201%20%2F%20ANZAHL_INTERVALLE%3B%0A%09%09%09%09%09%7D%0A%09%09%09%09%7D%0A%09%09%09%7D%0A%09%09%7D%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09if%20%28priorsSum%20%3E%200%29%20%7B%0A%09%09%09%09BayesPriors%5Bc%5D%20%3D%20BayesPriors%5Bc%5D%20%2F%20priorsSum%3B%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09BayesPriors%5Bc%5D%20%3D%201%20%2F%20NoOfClasses%3B%0A%09%09%09%7D%0A%09%09%7D%0A%0A%09%09%2F%2F%20check%20for%20new%20record%20and%20store%20new%20record%0A%09%09if%20%28OBJEKTIVE%20%3D%3D%3D%20%22mse%22%29%20%7B%0A%09%09%09let%20mse%20%3D%20calculateMSE%28trainInputArray%2C%20trainOutputArray%29%3B%0A%09%09%09if%20%28mse%20%3C%20lowest_mseTrain%29%20%7B%0A%09%09%09%09lowest_mseTrain%20%3D%20mse%3B%0A%09%09%09%09best_BayesTable%20%3D%20JSON.parse%28JSON.stringify%28BayesTable%29%29%3B%0A%09%09%09%09best_BayesPriors%20%3D%20JSON.parse%28JSON.stringify%28BayesPriors%29%29%3B%0A%09%09%09%7D%0A%09%09%7D%20else%20%7B%0A%09%09%09let%20accuracy%20%3D%20calculatePercentageCorrect%28trainInputArray%2C%20trainOutputArray%29.accuracy%3B%0A%09%09%09if%20%28accuracy%20%3E%20highest_accuracy%29%20%7B%0A%09%09%09%09highest_accuracy%20%3D%20accuracy%3B%0A%09%09%09%09best_BayesTable%20%3D%20JSON.parse%28JSON.stringify%28BayesTable%29%29%3B%0A%09%09%09%09best_BayesPriors%20%3D%20JSON.parse%28JSON.stringify%28BayesPriors%29%29%3B%0A%09%09%09%7D%0A%09%09%7D%0A%09%7D%0A%7D%0A%0A%2F%2F%0A%2F%2F%20Naive%20Bayes%20determine%20probability%20that%20sample%20belongs%20to%20first%20class%0A%2F%2F%0Afunction%20naiveBayesProbabilityOfFirstClass%28inputSample%29%20%7B%0A%09%2F%2F%20local%20variables%0A%09let%20BayesProbabilities%20%3D%20%5B%5D%3B%0A%09let%20BayesSum%20%3D%200.0%3B%0A%09let%20interval%20%3D%20%5B%5D%3B%0A%0A%09%2F%2F%20get%20interval%20for%20each%20input%20feature%20f%0A%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09interval.push%28Math.floor%28%28inputSample%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%20%2a%20ANZAHL_INTERVALLE%20%2F%20%28trainInputMax%5Bf%5D%20-%20trainInputMin%5Bf%5D%29%29%29%3B%0A%09%09if%20%28interval%5Bf%5D%20%3E%3D%20ANZAHL_INTERVALLE%29%20%7B%0A%09%09%09interval%5Bf%5D%20%3D%20ANZAHL_INTERVALLE%20-%201%3B%0A%09%09%7D%0A%09%09if%20%28interval%5Bf%5D%20%3C%200%29%20%7B%0A%09%09%09interval%5Bf%5D%20%3D%200%3B%0A%09%09%7D%0A%09%7D%0A%0A%09%2F%2F%20calculate%20unscaled%20Bayes%20probabilities%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%2F%2F%20calculate%20product%20of%20p%28xi%7CCj%29%20over%20all%20features%0A%09%09let%20product%20%3D%201%3B%0A%09%09for%20%28let%20f%20%3D%200%3B%20f%20%3C%20trainInputArray%5B0%5D.length%3B%20f%20%3D%20f%20%2B%201%29%20%7B%0A%09%09%09product%20%3D%20product%20%2a%20BayesTable%5Bc%5D%5Bf%5D%5Binterval%5Bf%5D%5D%3B%0A%09%09%7D%0A%09%09BayesProbabilities.push%28BayesPriors%5Bc%5D%20%2a%20product%29%3B%0A%09%09BayesSum%20%3D%20BayesSum%20%2B%20BayesProbabilities%5Bc%5D%3B%0A%09%7D%0A%09%2F%2F%20if%20no%20probability%20is%20assigned%20choose%20uniform%0A%09if%20%28BayesSum%20%3D%3D%3D%200%29%20%7B%0A%09%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09%09BayesProbabilities%5Bc%5D%20%3D%201%20%2F%20NoOfClasses%3B%0A%09%09%7D%0A%09%09BayesSum%20%3D%201%3B%0A%09%7D%0A%0A%09%2F%2F%20scale%20Bayes%20probabilites%0A%09for%20%28let%20c%20%3D%200%3B%20c%20%3C%20NoOfClasses%3B%20c%2B%2B%29%20%7B%0A%09%09BayesProbabilities%5Bc%5D%20%3D%20BayesProbabilities%5Bc%5D%20%2F%20BayesSum%3B%0A%09%7D%0A%09%0A%09%2F%2F%20return%20probability%20of%20first%20class%0A%09return%20BayesProbabilities%5B0%5D%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20mean%20squared%20error%0A%2F%2F%0Afunction%20calculateMSE%28inputData%2C%20desiredOutput%29%20%7B%0A%09let%20mse%20%3D%200.0%3B%0A%09for%20%28s%20%3D%200%3B%20s%20%3C%20inputData.length%3B%20s%2B%2B%29%20%7B%0A%09%09let%20probabilityFirstClass%20%3D%20naiveBayesProbabilityOfFirstClass%28inputData%5Bs%5D%29%3B%0A%09%09mse%20%3D%20mse%20%2B%20%28probabilityFirstClass%20-%20desiredOutput%5Bs%5D%29%20%2a%2a%202%3B%0A%09%7D%0A%09return%20mse%20%2F%20inputData.length%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20calculate%20percentage%20of%20correct%20classifications%0A%2F%2F%0Afunction%20calculatePercentageCorrect%28inputData%2C%20desiredOutput%29%20%7B%0A%09let%20correct%20%3D%200%3B%0A%09let%20equally%20%3D%200%3B%0A%09for%20%28s%20%3D%200%3B%20s%20%3C%20inputData.length%3B%20s%2B%2B%29%20%7B%0A%09%09let%20probabilityFirstClass%20%3D%20naiveBayesProbabilityOfFirstClass%28inputData%5Bs%5D%29%3B%0A%09%09if%20%28%28desiredOutput%5Bs%5D%20%3D%3D%3D%201%20%26%26%20probabilityFirstClass%20%3E%200.5%29%20%7C%7C%20%28desiredOutput%5Bs%5D%20%3D%3D%3D%200%20%26%26%20probabilityFirstClass%20%3C%200.5%29%29%20%7B%0A%09%09%09correct%20%3D%20correct%20%2B%201%3B%0A%09%09%7D%0A%09%09if%20%28probabilityFirstClass%20%3D%3D%3D%200.5%29%20%7B%0A%09%09%09equally%20%3D%20equally%20%2B%201%3B%0A%09%09%7D%0A%09%7D%0A%09return%20%7B%0A%09%09samples%3A%20inputData.length%2C%0A%09%09correct%3A%20correct%2C%0A%09%09wrong%3A%20inputData.length%20-%20correct%20-%20equally%2C%0A%09%09equally%3A%20equally%2C%0A%09%09accuracy%3A%20Math.round%28100%20%2a%20correct%20%2F%20%28inputData.length%20-%20equally%29%29%2C%0A%09%7D%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20FUNCTIONS%20FOR%20VISUALISATION%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20decision%20boundary%20and%20network%20output%0A%2F%2F%0Afunction%20drawPrediction%28epoch%29%20%7B%0A%09%2F%2F%20restore%20best%20model%0A%09BayesTable%20%3D%20JSON.parse%28JSON.stringify%28best_BayesTable%29%29%3B%0A%09BayesPriors%20%3D%20JSON.parse%28JSON.stringify%28best_BayesPriors%29%29%3B%0A%0A%09%2F%2F%20calculate%20mse%20and%20percentages%20of%20correct%20classifications%0A%09let%20mseTrain%20%3D%20calculateMSE%28trainInputArray%2C%20trainOutputArray%29%3B%0A%09let%20mseValid%20%3D%20calculateMSE%28validInputArray%2C%20validOutputArray%29%3B%0A%09let%20trainCorrect%20%3D%20calculatePercentageCorrect%28trainInputArray%2C%20trainOutputArray%29%3B%0A%09let%20validCorrect%20%3D%20calculatePercentageCorrect%28validInputArray%2C%20validOutputArray%29%3B%0A%0A%09%2F%2F%20calculate%20normalized%20testing%20inputs%20for%20visualisation%0A%09decisionBuffer.noStroke%28%29%3B%0A%09for%20%28x%20%3D%200%3B%20x%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20x%20%3D%20x%20%2B%201%29%20%7B%0A%09%09for%20%28y%20%3D%200%3B%20y%20%3C%20NUM_DATA_PIXEL%20%2B%201%3B%20y%20%3D%20y%20%2B%201%29%20%7B%0A%09%09%09let%20probabilityOfClass1%20%3D%20naiveBayesProbabilityOfFirstClass%28%5Bx%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%2C%20y%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%5D%29%3B%0A%09%09%09if%20%28probabilityOfClass1%20%3E%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28200%2C%20255%2C%20200%29%3B%20%2F%2F%20green%0A%09%09%09%7D%20else%20if%20%28probabilityOfClass1%20%3C%200.5%29%20%7B%0A%09%09%09%09decisionBuffer.fill%28200%2C%20200%2C%20255%29%3B%20%2F%2F%20blue%0A%09%09%09%7D%20else%20%7B%0A%09%09%09%09decisionBuffer.fill%28255%2C%20255%2C%20255%29%3B%20%2F%2F%20white%0A%09%09%09%7D%0A%09%09%09decisionBuffer.rect%28DATA_SCALE%20%2a%20x%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%20-%20PIXEL_SIZE%20%2F%202%2C%20DATA_SCALE%20%2a%20%2810%20-%20y%20%2F%20NUM_DATA_PIXEL%20%2a%20DATA_RANGE%29%20-%20PIXEL_SIZE%20%2F%202%2C%20PIXEL_SIZE%2C%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%0A%09image%28decisionBuffer%2C%200%2C%200%29%3B%0A%09image%28decisionBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20training%20and%20validation%20samples%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20add%20labels%20to%20training%20and%20validation%20feature%20space%20%2F%2F%20wrong%0A%09noStroke%28%29%3B%0A%09text%28%22Training%3A%20%22%20%2B%20trainCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20trainCorrect.wrong%20%2B%20%22%20falsch%2C%20%22%20%2B%20trainCorrect.equally%20%2B%20%22%20%3F%3F%29%22%2C%204%20%2a%20PIXEL_SIZE%2C%208%20%2a%20PIXEL_SIZE%29%3B%0A%09text%28%22Validation%3A%20%22%20%2B%20validCorrect.accuracy%20%2B%20%22%25%20%E2%9C%94%EF%B8%8F%20%28%22%20%2B%20validCorrect.wrong%20%2B%20%22%20falsch%2C%20%22%20%2B%20validCorrect.equally%20%2B%20%22%20%3F%3F%29%22%2C%20DATA_WINDOW_SIZE%20%2B%204%20%2a%20PIXEL_SIZE%2C%208%20%2a%20PIXEL_SIZE%29%3B%0A%0A%09%2F%2F%20print%20training%20and%20validation%20results%20to%20console%0A%09console.log%28%22%7C%7C%20%22%20%2B%20%28epoch%2aEPOCHEN_FUER_GRAFIK_UPDATE%29.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20trainCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseTrain.toFixed%286%29%20%2B%20%22%20%7C%7C%20%22%20%2B%20validCorrect.accuracy.toString%28%29.padStart%286%2C%20%22%20%22%29%20%2B%20%22%25%20%7C%20%22%20%2B%20mseValid.toFixed%286%29%20%2B%20%22%20%7C%7C%22%29%3B%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20draw%20data%20in%20graphic%20buffer%0A%2F%2F%0Afunction%20drawDataInBuffer%28inputData%2C%20outputData%2C%20buffer%29%20%7B%0A%09buffer.noFill%28%29%3B%0A%09buffer.strokeWeight%28PIXEL_SIZE%29%3B%0A%09buffer.rect%280%2C%200%2C%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09for%20%28i%20%3D%200%3B%20i%20%3C%20inputData.length%3B%20i%2B%2B%29%20%7B%0A%09%09if%20%28outputData%5Bi%5D%20%3D%3D%3D%201%29%20%7B%0A%09%09%09%2F%2F%20green%20circle%20for%20output%20label%20%3D%3D%3D%201%0A%09%09%09buffer.stroke%28%22darkgreen%22%29%3B%0A%09%09%09buffer.circle%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%2C%204%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%20else%20%7B%0A%09%09%09%2F%2F%20blue%20cross%20for%20output%20label%20%3D%3D%3D%200%0A%09%09%09buffer.stroke%28%22blue%22%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%09buffer.line%28DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20%2B%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20inputData%5Bi%5D%5B0%5D%20-%202%20%2a%20PIXEL_SIZE%2C%20DATA_SCALE%20%2a%20%2810%20-%20inputData%5Bi%5D%5B1%5D%29%20%2B%202%20%2a%20PIXEL_SIZE%29%3B%0A%09%09%7D%0A%09%7D%0A%7D%0A%0A%0A%2F%2F%0A%2F%2F%20wait%20for%20some%20milliseconds%0A%2F%2F%0Afunction%20waiting%28milliseconds%29%20%7B%0A%09return%20new%20Promise%28%28resolve%29%20%3D%3E%20%7B%0A%09%09setTimeout%28%28%29%20%3D%3E%20%7B%0A%09%09%09resolve%28%27resolved%27%29%3B%0A%09%09%7D%2C%20milliseconds%29%3B%0A%09%7D%29%3B%0A%7D%0A%0A%0A%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%2F%2F%20MAIN%20PROGRAM%0A%2F%2F%20%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%2a%0A%0A%0A%2F%2F%0A%2F%2F%20p5.js%20setup%28%29%0A%2F%2F%0Aasync%20function%20setup%28%29%20%7B%20%2F%2Fnoprotect%20%28for%20large%20arrays%29%0A%09%2F%2F%20check%20for%20number%20of%20intervals%0A%09if%20%28ANZAHL_INTERVALLE%20%3C%202%20%7C%7C%20ANZAHL_INTERVALLE%20%3E%20100%29%20%7B%0A%09%09console.log%28%22%E2%9A%A0%EF%B8%8F%20Die%20ANZAHL_INTERVALLE%20darf%20nur%20von%202%20bis%20100%20gehen.%22%29%3B%0A%09%09return%20false%3B%0A%09%7D%0A%0A%09%2F%2F%20initial%20console%20output%0A%09console.log%28%22%7C%7C%20%20%20%20%20%20%20%20%7C%7C%20%20%20%20%20%20Training%20%20%20%20%20%20%7C%7C%20%20%20%20%20Validation%20%20%20%20%20%7C%7C%22%29%3B%0A%09console.log%28%22%7C%7C%20Epoche%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%20korrekt%20%7C%20%20%20%20%20%20MSE%20%7C%7C%22%29%3B%0A%0A%09%2F%2F%20create%20canvas%0A%09createCanvas%282%20%2a%20DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%20%2B%2040%29%3B%0A%0A%09%2F%2F%20text%20below%20networks%0A%09fill%28%22black%22%29%3B%0A%09noStroke%28%29%3B%0A%09textSize%2820%29%3B%0A%09if%20%28OBJEKTIVE%20%3D%3D%3D%20%22mse%22%29%20%7B%0A%09%09text%28%22Naive%20Bayes%20%2B%20Monte%20Carlo%20%28MSE%29%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09%7D%20else%20%7B%0A%09%09text%28%22Naive%20Bayes%20%2B%20Monte%20Carlo%20%28Korrekt%29%22%2C%2010%2C%20DATA_WINDOW_SIZE%20%2B%2025%29%3B%0A%09%7D%0A%09textSize%28PIXEL_SIZE%20%2a%206%29%3B%0A%0A%09%2F%2F%20create%20all%20grafic%20buffers%0A%09trainBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09validBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%09decisionBuffer%20%3D%20createGraphics%28DATA_WINDOW_SIZE%2C%20DATA_WINDOW_SIZE%29%3B%0A%0A%09%2F%2F%20draw%20initial%20training%20and%20validation%20buffer%0A%09drawDataInBuffer%28trainInputArray%2C%20trainOutputArray%2C%20trainBuffer%29%3B%0A%09drawDataInBuffer%28validInputArray%2C%20validOutputArray%2C%20validBuffer%29%3B%0A%09image%28trainBuffer%2C%200%2C%200%29%3B%0A%09image%28validBuffer%2C%20DATA_WINDOW_SIZE%2C%200%29%3B%0A%0A%09%2F%2F%20draw%20and%20evaluate%20models%0A%09for%20%28let%20e%20%3D%201%3B%20e%20%3C%20ANZAHL_EPOCHEN%20%2F%20EPOCHEN_FUER_GRAFIK_UPDATE%3B%20e%20%3D%20e%20%2B%201%29%20%7B%0A%09%09%2F%2F%20train%20model%0A%09%09naiveBayesDrawHistogramsPriors%28%29%3B%0A%0A%09%09%2F%2F%20train%20and%20visualise%20neural%20network%0A%09%09drawPrediction%28e%29%3B%0A%09%09await%20waiting%28MILISEKUNDEN_GRAFIK_UPDATE%29%3B%0A%09%7D%0A%0A%09%2F%2F%20end%20of%20training%0A%09console.log%28%22Das%20Training%20ist%20beendet%20%3A-%29%22%29%3B%0A%0A%7D&css=&html=%3Cscript%20src%3D%22https%3A%2F%2Fapp.exorciser.ch%2Flib%2Fp5.js%22%3E%3C%2Fscript%3E&autorun=off&height=400px#MonteCarloNB}}
  
 ++++Unsere Meinung| ++++Unsere Meinung|