De opgave bestaat uit 3 delen.

Kohonen Netwerken

De taak in het eerste deel is om een Kohonen netwerk te implementeren. Dit Kohonen netwerk dient een grid-structuur te hebben waarvan de afmetingen (aantal kolommen, aantal rijen) eenvoudig te veranderen zijn (bijv., doordat deze parameters zijn van de executable). Het programma dient als invoer een bestand met comma separated values (CSV) te accepteren (voorbeelden vind je hier). De uitvoer dient te bestaan uit:

  • de coordinaat van elke neuron in het Kohonen netwerk;
  • de trainingsvoorbeelden die aan elke neuron zijn toegekend.

Deze uitvoer moet op 2 manieren gevisualiseerd kunnen worden:

  • in een grid (of tabel) waarbij voor elke gridpositie (cel in de tabel) aangegeven is welke voorbeelden op deze positie zijn afgebeeld. Je mag hier gebruik maken van de identifier van de voorbeelden in het invoerbestand om compact naar voorbeelden te verwijzen; de identifier is de eerste kolom in de CSV file.
  • in het geval de invoer 2 dimensionaal is, moet de coordinaat van elke neuron geplot kunnen worden in een 2D scatterplot.

De keuze voor een programmeertaal staat vrij. Wel moet het resultaat eenvoudig onder Linux te gebruiken zijn. Voor het tekenen van scatterplots kun je Gnuplot overwegen. Merk verder op dat verschillende talen ondersteuning hebben voor CSVs; deze mag je gebruiken (python, C, Java, ... of implementeer zelf een reader) Ook kun je CSVs openen in spreadsheet software (LibreOffice Calc, Excel) of Weka.

Om het Kohonen netwerk te testen kun je allereerst gebruik maken van kunstmatige voorbeelden die welgedefinieerde clusters bevatten. Vervolgens kun je je code uitproberen op datasets van de Wereldbank. Voor de visualisatie van de kunstmatige datasets moet de 2D scatterplot gebruikt worden.

Radial Basis Function Netwerken

In het tweede deel zal een radial basis function netwerk met één uitvoerknoop worden geleerd. Hiertoe moet eerst een Kohonen netwerk geleerd worden met de eerder ontwikkelde procedure. De coordinaten van de neuronen in het Kohonennetwerk bepalen de centra van de neuronen in de verborgen laag van het RBF netwerk; de taak is dus om de gewichten naar de uitvoerlaag te leren. Het algoritme moet opnieuw als invoer een CSV file accepteren, waarbij de laatste kolom het te voorspellen attribuut bevat.

Opnieuw staat de keuze voor een implementatietaal vrij. Je kunt een simpel gradient descent algoritme implementeren, of gebruik maken van matrixoperaties. In dat geval kan Matlab of Python (numpy) handig zijn.

Takagi-Sugeno Fuzzy Systems

Een mogelijk voordeel van RBF netwerken is dat deze interpreteerbaar zijn. Het laatste deel van de opgave bestaat eruit voor een RBF netwerk geleerd in de vorige fase aan te geven hoe dit netwerk opgevat kan worden als een Takagi-Sugeno systeem. Bestudeer hiertoe eventueel deze paper.

In te leveren

Je dient het volgende in te leveren:

  • je broncode
  • een readme waarin je beschrijft hoe je je broncode compileert en/of uitvoert
  • een rapport van maximaal 15 pagina's waarin beschreven wordt:
    • de keuzes gemaakt in het leeralgoritme voor Kohonennetwerken (learning rate, update regels)
    • de keuzes gemaakt in het leeralgoritme voor Radial Basis function netwerken (lineaire regressie, normalisatie van de uitvoer of niet)
    • een voorbeeld dat illustreert hoe het geleerde RBF netwerk als Sugeno systeem opgevat kan worden
    • resultaten van de toepassing van het algoritme op de aangeleverde datasets:
      • voor de 2D datasets moet een scatterplot visualisatie opgenomen worden van het Kohonennetwerk voor tenminste 2 verschillende gridafmetingen.
      • voor de RBF datasets moet een onderverdeling gemaakt worden tussen training en test data. Het leren dient te geschieden op een training set; het toepassen op een test dataset. Kies hiertoe ofwel een 50%/50% splits van de aanwezige data, of 10-voudige crossvalidatie. De mean squared error op zowel de training als de testvoorbeelden dient gerapporteerd te worden, voor verschillende afmetingen van het grid.

      Er zijn enkele datasets van de Wereldbank gegeven. Het levert bonuspunten op als je zelf naar de website van de Wereldbank gaat en een interessante dataset weet samen te stellen en zowel een Kohonennetwerk als een RBF netwerk weet te leren voor die dataset.

Het verslag dient aan de gebruikelijke voorwaarden voor een verslag te voldoen: het moet een introductie bevatten, een uiteenzetting van methoden, een beschrijving van resultaten en conclusies. Het moet in goed Nederlands (of Engels) geschreven zijn.

De opgave mag met 2 personen gemaakt worden. Zo mag een persoon zich concentreren op Kohonennetwerken en de ander op RBF netwerken. De rolverdeling moet wel in het verslag aangegeven worden. Inleveren geschiedt door alle bestanden naar snijssen@liacs.nl te mailen. De opgave moet uiterlijk 9 december ingeleverd worden.