KMeans algoritması
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 53/112
- 5 dk
KMeans, k centroidi rastgele başlatır ve iteratif olarak günceller.
Lloyd algoritması
KMeans'in standart çözümü Lloyd algoritmasıdır. Her adımda inertia ya azalır ya aynı kalır; bu yüzden algoritma her zaman yakınsar, ama bulduğu çözüm yerel bir en iyi olabilir.
def kmeans_adim(X, merkez):
d = ((X[:, None, :] - merkez[None, :, :]) ** 2).sum(axis=2)
etiket = d.argmin(axis=1) # atama
yeni = np.array([X[etiket == k].mean(axis=0) for k in range(len(merkez))])
return etiket, yeni # güncellemen_iter_, yakınsamaya kadar kaç tur gerektiğini gösterir; max_iter üst sınırdır.
Yayınlamayla mesafe matrisi
X[:, None, :] - merkez[None, :, :] ifadesi (n, 1, d) ile (1, k, d) şekillerini (n, k, d)'ye yayınlar; son eksen boyunca toplam, her örneğin her merkeze kare mesafesini verir. Döngüsüz ve hızlıdır:
print(X.shape, merkez.shape) # (500, 2) (5, 2)
d = ((X[:, None, :] - merkez[None, :, :]) ** 2).sum(axis=2)
print(d.shape) # (500, 5)Aynı kalıp KNN'de, RBF çekirdeğinde ve attention hesabında da karşına çıkacak.
Uygulama Elle KMeans
İlk 5 örneği başlangıç merkezi alarak Lloyd algoritmasını 10 tur çalıştır (atama + güncelleme). Son inertia değerini (en yakın merkeze kare mesafelerin toplamı) round ile tam sayı olarak yazdır.
Başlangıç kodu
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
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)
merkez = X[:5].copy()
for _ in range(10):
d = ((X[:, None, :] - merkez[None, :, :]) ** 2).sum(axis=2)
etiket = d.argmin(axis=1)
merkez = np.array([X[etiket == k].mean(axis=0) for k in range(5)])
d = ((X[:, None, :] - merkez[None, :, :]) ** 2).sum(axis=2)
print(round(d.min(axis=1).sum()))Beklenen çıktı
1083
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Lloyd algoritmasında inertia bir turdan diğerine nasıl değişir?
- Rastgele değişir
- Hep sabittir
- Azalır ya da aynı kalır Doğru cevap
- Her zaman artar
Açıklama: Hem atama hem güncelleme adımı kare mesafe toplamını artıramaz.
2 Her örneği en yakın merkeze ata.
etiket = d.____(axis=1)
etiket = d.argmin(axis=1)
Açıklama: argmin(axis=1) her satırda en küçük mesafenin sütununu verir.
3 Parçaları eşleştir.
| Kavram | Anlamı |
|---|---|
atama |
d.argmin(axis=1) |
güncelleme |
Küme ortalaması |
n_iter_ |
Yakınsama turu |
yerel en iyi |
Lloyd'un sınırı |