Künstliche Intelligenz (KI) als Hobby / Artificial Intelligence (AI) as a Hobby
Facebook Gruppe: Künstliche Intelligenz (KI) als Hobby
k-Means-Algorithmus für Clusteranalyse in PHP
Basierend auf dem Skript: K-Means Clustering
Angeregt durch und auf deutsch erklärt im Online-Tutorial: Machine Learning #16 - Unüberwachtes Lernen #1 - k-Means Clustering
Einleitung
Der Terragon k-Means-Algorithmus für die Clusteranalyse in PHP generiert X-Cluster von einer 2-dimensionalen Punkte-Schar, die in einem 2-dimensionalen Array übergeben wird.
Wikipedia: Ein k-Means-Algorithmus ist ein Verfahren zur Vektorquantisierung, das auch zur Clusteranalyse verwendet wird. Dabei wird aus einer Menge von ähnlichen Objekten eine vorher bekannte Anzahl von k Gruppen gebildet. Der Algorithmus ist eine der am häufigsten verwendeten Techniken zur Gruppierung von Objekten, da er schnell die Zentren der Cluster findet.
Schritt 1: Datenpunkte als Array vorgeben
Das 2-dimensionale Array besteht in unserem Beispiel aus 10 Datenpunkten, die auch grafisch in einem Koordinatnsystem dargestellt werden können.
Datenpunkte Original:
Kopieren Sie die Messdaten z.B. aus einer Tabellenkalkulation, oder tippen Sie von Hand die X Werte (links) und Y Werte (rechts) in die Felder. Jeder Wert muss in eine neue Zeile geschrieben werden (und die Zeilen-Anzahl von X und Y muss natürlich gleich sein).
Diese Daten wurden erkannt:
Array ( [0] => Array ( [0] => 1 [1] => 2 ) [1] => Array ( [0] => 2 [1] => 3 ) [2] => Array ( [0] => 3 [1] => 4 ) [3] => Array ( [0] => 6 [1] => 6 ) [4] => Array ( [0] => 9 [1] => 5 ) [5] => Array ( [0] => 8 [1] => 8 ) [6] => Array ( [0] => 7 [1] => 9 ) [7] => Array ( [0] => 5 [1] => 3 ) [8] => Array ( [0] => 6 [1] => 2 ) [9] => Array ( [0] => 4 [1] => 5 ) )
Schritt 2: Datenpunkte Normalisieren
Je nachdem, wie die Punkte vorgegeben wurden, müssen sie vor der Verarbeitung normalisiert werden, also in einen Wertebereich zwischen 0 und 1 skaliert werden.
Datenpunkte Normalisiert:
Array ( [0] => Array ( [0] => 0.44721359549996 [1] => 0.89442719099992 ) [1] => Array ( [0] => 0.55470019622523 [1] => 0.83205029433784 ) [2] => Array ( [0] => 0.6 [1] => 0.8 ) [3] => Array ( [0] => 0.70710678118655 [1] => 0.70710678118655 ) [4] => Array ( [0] => 0.87415727612154 [1] => 0.48564293117863 ) [5] => Array ( [0] => 0.70710678118655 [1] => 0.70710678118655 ) [6] => Array ( [0] => 0.61394061351492 [1] => 0.78935221737633 ) [7] => Array ( [0] => 0.85749292571254 [1] => 0.51449575542753 ) [8] => Array ( [0] => 0.94868329805051 [1] => 0.31622776601684 ) [9] => Array ( [0] => 0.62469504755442 [1] => 0.78086880944303 ) )
Schritt 3: k-Means Clustering durchführen
Jetzt wird die Clusteranalyse per Iteration durchgeführt.
In dem Array werden die Cluster-Mittelpunkte unter [centroids] wiedergegeben.
Darunter werden dann die Cluster-Arrays mit den Datenpunkten ausgegeben. Die [Nummer] vor den Datenpunkten im Array entspricht der [Nummer] des Cluster-Mittelpunktes darüber mit der gleichen Nummer.
Ergebnis Cluster:
Array ( [centroids] => Array ( [0] => Array ( [0] => 0.06941056083938 [1] => 0.086763201049226 ) [1] => Array ( [0] => 0.94868329805051 [1] => 0.31622776601684 ) [2] => Array ( [0] => 0.81659567967985 [1] => 0.57721009686959 ) ) [2] => Array ( [0] => 0.44721359549996,0.89442719099992 [1] => 0.55470019622523,0.83205029433784 [2] => 0.6,0.8 [3] => 0.70710678118655,0.70710678118655 [4] => 0.87415727612154,0.48564293117863 [5] => 0.70710678118655,0.70710678118655 [6] => 0.61394061351492,0.78935221737633 [7] => 0.85749292571254,0.51449575542753 [8] => 0.62469504755442,0.78086880944303 ) [1] => Array ( [0] => 0.94868329805051,0.31622776601684 ) )
Hinweise:
Die Ergebnisse sind die normalisierten Koordinaten! Es können also leider nicht direkt die originalen Punkte abgelesen werden!