CodeBlanks Logo Icon CodeBlanks

Başlatma

KMeans başlatma yöntemi k-means++ varsayılan olarak kullanılır.

Başlatmanın önemi

Lloyd algoritması başlangıç merkezlerine bağlıdır. Kötü başlangıç (örneğin iki merkezin aynı gerçek kümeye düşmesi) yerel bir en iyide takılır: bir küme ikiye bölünür, iki küme birleşir.

for rs in range(3):
    km = KMeans(n_clusters=5, init="random", n_init=1, random_state=rs).fit(X)
    print(rs, round(km.inertia_))   # tohuma göre farklı sonuç

Bu yüzden başlatma yöntemi ve tekrar sayısı KMeans'in en önemli ayarlarıdır.

k-means++

scikit-learn'ün varsayılan başlatması k-means++'tır: ilk merkez rastgele seçilir, sonraki her merkez mevcut merkezlere uzak noktalardan, uzaklığın karesiyle orantılı olasılıkla seçilir. Merkezler baştan yayılmış olur:

km = KMeans(n_clusters=5, init="k-means++", n_init=1, random_state=0)
# init="random": örnekler arasından düzgün rastgele

k-means++ hem daha iyi çözüm hem de genellikle daha az tur sağlar.

Uygulama Başlatmaları karşılaştır

Tohum 0-9 için init="random" ve init="k-means++" ile birer n_init=1 KMeans (5 küme) eğit. Her yöntem için en kötü (en büyük) inertia'yı round ile tam sayı olarak aynı satırda yazdır (önce random).

Başlangıç kodu

model.py
import numpy as np
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

X, _ = make_blobs(n_samples=500, centers=5, cluster_std=1.0, random_state=3)

# buraya yaz

Örnek çözüm

model.py
import numpy as np
from sklearn.datasets import make_blobs
from sklearn.cluster import KMeans

X, _ = make_blobs(n_samples=500, centers=5, cluster_std=1.0, random_state=3)

kotu = []
for init in ["random", "k-means++"]:
    kotu.append(round(max(KMeans(n_clusters=5, init=init, n_init=1, random_state=rs).fit(X).inertia_ for rs in range(10))))
print(*kotu)

Beklenen çıktı

2224 2145

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 Rastgele başlatmanın tipik hatası nedir?

  • Hata vermesi
  • İki merkezin aynı kümeye düşmesi Doğru cevap
  • Algoritmanın yakınsamaması
  • Merkezlerin silinmesi

Açıklama: Bu durumda bir gerçek küme bölünür, başka bir yerde iki küme birleşir.

2 Merkezleri yayılmış biçimde başlat.

Soru
km = KMeans(n_clusters=5, init=____)
Cevap
km = KMeans(n_clusters=5, init="k-means++")

Açıklama: "k-means++" varsayılandır.

3 Başlatmaları eşleştir.

Kavram Anlamı
init="random" Düzgün rastgele örnek
init="k-means++" Uzaklıkla orantılı seçim
kötü başlangıç Yerel en iyi
n_iter_ Gereken tur

Orta seviye bölümündeki tüm dersler