Enige uitleg over KMeans en het programma.
KMeans is een clusteringsalgoritme.
- Begin met het laden van een dataset.
Die bepaalt met het aantal kolommen ook het aantal dimensies (coördinaten van de punten).
- Het aantal clusters (k, vandaar de naam) ligt vast en wordt voorafgaand aan de clustering gekozen.
- Het programma begint met random een aantal punten (k centroids) te kiezen als centrum van de clusters.
In een aantal iteraties verschuiven deze naar de gemiddelde locatie van de cluster, waarna de punten worden toegekend aan de cluster van de dichtstbijzijnde centroid.
Die iteraties stoppen als de centroids niet meer verschuiven.
- De uitkomst is nogal afhankelijk van de gekozen centroids.
De Fs (een anova-maat voor de variatie binnen groepen vergeleken met die tussen groepen) kan worden gebruikt als indicatie van de kwaliteit van de clustering.
- Het programma kiest geen uitkomst op basis van die Fs, maar dat kan je zelf wel doen door het proces met dezelfde punten een aantal keren te herhalen.
Het gebruik:
- Stel je wilt een computer kopen. Factoren die je van belang vindt zijn prijs, kloksnelheid en zo nog wat zaken.
Maar het kan ook gaan om kwalificaties van kandidaten voor een bepaalde klus.
- Die gegevens verzamel je voor de kandidaatcomputers.
Eventueel schaal je ze naar het belang dat ze voor je hebben.
(En ze moeten liefst ook een beetje binnen het scherm vallen.)
- Het programma helpt dan vergelijkbare computers te detecteren.
- Het laden van een dataset wist de eerdere data.
Datapunten kunnen worden toegevoegd door op het canvas te klikken, of met de Throw-knop (voor een random datapunt).
- En ontegenzeggelijk de belangrijkste knop van allemaal: de Warp-knop.
Het programma:
- Het programma is geschreven in Scala.js (scalaversie 3, cross-gecompileerd ook voor de JVM / Scala-swing).
Het algoritme is ontleend aan James Cutajar (YouTube).
Een mooi voorbeeld van puur Functioneel programmeren.
Over Functioneel Programmeren, zie Monads
en ook TicTacToe (beide dit blog).
Voor de tabbladen zie w3Schools.
Ik beschrijf Webix elders op dit blog. (Het was gratis toen ik het downloade, maar dat is het nu niet meer.)
ToDo:
- De eerste twee kolommen bepalen nu de getoonde positie (x en y ) van een punt.
Het is de bedoeling dat (bij meer factoren oftewel dimensies) de x en y voor het tonen van de clusterwolk gekozen kunnen worden.
(En later misschien de x, y en z, waarbij het beeld zou kunnen worden geroteerd.)
- Icon vervangen.
- Naamloze punten (of "gegooid"/thrown dan wel via aanklikken) zouden een gegenereerde naam kunnen krijgen.
- Punten verwijderen of verslepen
- Bug: bij minder punten dan clusters worden geen punten getoond.
Some explanation about KMeans and the program.
KMeans is a clustering-algorithm.
- Start by loading a dataset.
The number of colums determines the number of dimensions (coordinates of the points).
- The number of clusters (k, hence the name) is fixed and is determined before clustering.
- The program begins by randomly choosing a number of points (k centroids) as the centers of the clusters.
In a number of iterations these centroids shift to the clusters' mean-location, and the points are then re-assigned to the cluster of the nearest centroid.
The iterations stop when the centroids don't move anymore.
- The result is rather dependent on the chosen set of centroids.
The Fs (an anova-statistic for the variance within groups compared with that between those groups) can be used as an indication of quality of the clustering.
- The program doesn't choose a result based on this Fs, but you can do this yourself by repeating the proces a number of times with the same dataset.
The use:
- Say you want to buy a computer. Features you value are price, clock rate and some other properties.
But you could also be interested in qualifications of candidates for a certain task.
- You collect those data for the computers or candidates.
Possibly you scale them to the interest they have for you.
(And it would be nice if they fit on the screen.)
- The program helps you to detect comparable candidates or computers.
- Loading a dataset clears previous data.
Datapoints can be added by clicking the canvas, or by the Throw-button (for a random datapoint).
- And undeniable the most important button of all: the Warp-button.
The program:
- The program is written in Scala.js (scalaversion 3, cross-compiled also for the JVM / Scala-swing).
The algorithm is derived from James Cutajar (YouTube).
It's a nice example of pure Functional Programming.
About Functional Programming, see Monads
and also TicTacToe (both on this blog).
For the tabs see w3Schools.
I describe Webix elsewhere on this blog. (It was free when I downloaded it, but not anymore.)