Seite 1 von 1

"Elbow point" in kmeans

Verfasst: Donnerstag 9. August 2018, 11:49
von Seppl2202
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?

Re: "Elbow point" in kmeans

Verfasst: Donnerstag 9. August 2018, 16:36
von ThomasL
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.

Re: "Elbow point" in kmeans

Verfasst: Montag 13. August 2018, 07:25
von Seppl2202
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.