"Elbow point" in kmeans

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
Seppl2202
User
Beiträge: 16
Registriert: Dienstag 10. Juli 2018, 06:24

Donnerstag 9. August 2018, 11:49

Hallo,
mein kmeans-Algorithmus funktioniert mittlerweile, nun möchte ich die optimale Anzahl an Clustern automatisch bestimmen. Man muss zunächst sagen, dass die Daten sehr ähnlich sind (Verkaufswerte) und die Silhouettenkoeffizienten sehr niedrig sind.
Ich habe hier mal beispielhaft die inertia_-Werte des kmeans für die Clusterannzahl 1-20 geplottet:
Bild

Man sieht hier eine mögliche Anzahl an optimaler Cluster von drei, diese ist aber nicht gut, da es noch mehr sinnvolle Cluster gibt.
Daher würde ich gerne im Bereich zwischen 5 und 20 nach der optimalen Anzahl suchen.
So sieht meine Code aktuell aus:

Code: Alles auswählen

for k in range(1,20):
    km = KMeans(n_clusters=k, random_state=0)
    km = km.fit(normalized_modeling_data)
    sum_squared_dist.append(km.inertia_)
Mein erster, sehr primitiver Ansatz wäre eine Geradengleichung durch die Punkte 5 und 20 zu berechnen (mit y=m*x + b).
Dann könnte man im Intervall 5 bis 20 für jeden Punkt den Abstand zu dieser Geraden berechnen und das Maximum wäre dann die optimale Anzahl an Cluster.
Hat so etwas jemand schon einmal gemacht, kann mir helfen oder hat möglicherweise sogar eine bessere Idee?
Benutzeravatar
ThomasL
User
Beiträge: 303
Registriert: Montag 14. Mai 2018, 14:44
Wohnort: Kreis Unna NRW

Donnerstag 9. August 2018, 16:36

Laut Andrew Ng kann man k mit Hilfe der Elbow-Methode nehmen, wenn ein sichtbarer Knick vorhanden ist.
Wenn nicht, so sollte man überlegen wofür man das Clustering überhaupt macht. d.h. wie lautet die Aufgabenstellung.
Er bringt ein Beispiel mit T-Shirtgrößen, ist es für einen T-Shirt Hersteller sinnvoller 3 Größen S,M,L oder 5 Größen XS,S,M,L,XL zu fertigen.
Eine reine mathematische Optimierung muss nicht immer die wirtschaftlichste sein.
Ich bin Pazifist und greife niemanden an, auch nicht mit Worten.
Für alle meine Code Beispiele gilt: "There is always a better way."
Seppl2202
User
Beiträge: 16
Registriert: Dienstag 10. Juli 2018, 06:24

Montag 13. August 2018, 07:25

Ich mache das Clustering auf meine Artikel um herauszufinden, welche unterschiedlichen Verläufe der Verkaufszahlen es gibt. Möglicherweise finde ich so Artikelgruppen, die ich noch gar nicht auf dem Schirm hatte.
Antworten