KMeans eğitimi
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 66/112
- 7 dk
KMeans modelini eğitirsin.
k seçimi ve eğitim
k için 2-6 arası değerleri siluet skoruyla karşılaştıracağız. İş açısından da makul bir sayı aranır: 2 segment pazarlama için fazla kaba, 8 segment ise yönetilemez.
for k in range(2, 7):
km = KMeans(n_clusters=k, n_init=10, random_state=0).fit(Xs)
print(k, round(silhouette_score(Xs, km.labels_), 3))Teknik ölçüt ile iş ihtiyacı çeliştiğinde ikisini birlikte değerlendirmek gerekir; segmentler kullanılamıyorsa en yüksek siluet bir şey ifade etmez.
Kararlılık kontrolü
Seçilen k'nın kararlı olduğunu farklı tohumlarla ARI karşılaştırması doğrular. Ayrıca segment boyutlarına bakılır: tek müşterili ya da müşterilerin %90'ını içeren bir segment kullanışsızdır.
km = KMeans(n_clusters=3, n_init=10, random_state=0).fit(Xs)
print(np.bincount(km.labels_)) # segment boyutlarıDengeli ve kararlı segmentler, kampanyaların anlamlı gruplara gitmesini sağlar.
Uygulama k'yı seç
k = 2-5 için ölçekli veride KMeans (n_init=10, random_state=0) eğit. Her satırda k'yı, siluet skorunu round(..., 3) ile ve en küçük segmentin boyutunu (np.bincount(km.labels_).min()) yazdır. Siluet ile segment boyutunu birlikte değerlendir.
Başlangıç kodu
import numpy as np
rng = np.random.default_rng(5)
n = 400
grup = rng.integers(0, 3, n)
harcama = np.array([300, 1500, 800])[grup] + rng.normal(0, 120, n)
ziyaret = np.array([2, 4, 12])[grup] + rng.normal(0, 1.2, n)
sepet = harcama / np.maximum(ziyaret, 1)
X = np.column_stack([harcama, ziyaret, sepet])
from sklearn.preprocessing import StandardScaler
Xs = StandardScaler().fit_transform(X)
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
# buraya yazÖrnek çözüm
import numpy as np
rng = np.random.default_rng(5)
n = 400
grup = rng.integers(0, 3, n)
harcama = np.array([300, 1500, 800])[grup] + rng.normal(0, 120, n)
ziyaret = np.array([2, 4, 12])[grup] + rng.normal(0, 1.2, n)
sepet = harcama / np.maximum(ziyaret, 1)
X = np.column_stack([harcama, ziyaret, sepet])
from sklearn.preprocessing import StandardScaler
Xs = StandardScaler().fit_transform(X)
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score
for k in range(2, 6):
km = KMeans(n_clusters=k, n_init=10, random_state=0).fit(Xs)
print(k, round(silhouette_score(Xs, km.labels_), 3), np.bincount(km.labels_).min())Beklenen çıktı
2 0.501 141 3 0.699 128 4 0.711 12 5 0.659 12
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Siluet k=3 ve k=4 için neredeyse eşitse hangisi tercih edilir?
- İkisi de reddedilir
- İş açısından daha yorumlanabilir olan, genellikle daha az küme Doğru cevap
- Her zaman büyük olan
- Rastgele seçim
Açıklama: Daha az segment daha kolay anlatılır ve uygulanır.
2 Segment boyutlarını say.
print(np.____(km.labels_))
print(np.bincount(km.labels_))
Açıklama: bincount her küme numarasının kaç kez geçtiğini verir.
3 Kontrolleri eşleştir.
| Kavram | Anlamı |
|---|---|
siluet |
Ayrılma kalitesi |
ARI tohumlar arası |
Kararlılık |
bincount |
Segment boyutları |
iş ihtiyacı |
Yorumlanabilirlik |