Meydan okuma 3
- Makine Öğrenmesi kursu
- Orta seviye
- Ders 111/112
- 8 dk
KMeans ile kümeleme yaparsın.
Meydan okuma 3: segment + sınıflandırıcı
Denetimsiz ve denetimli öğrenmeyi birleştiren bir senaryo: önce rakam verisini PCA + KMeans ile 10 kümeye ayır, sonra her kümenin gerçek etiketlerle ne kadar örtüştüğünü ölç. Kümeler etiketsiz bulunmuş olsa da yapı gerçek sınıflara ne kadar benziyor?
Z = PCA(n_components=30, random_state=0).fit_transform(StandardScaler().fit_transform(X))
kume = KMeans(n_clusters=10, n_init=10, random_state=0).fit_predict(Z)
print(adjusted_rand_score(y, kume))Ardından her kümeye, içindeki en sık gerçek etiketi atayıp bunu bir "sınıflandırıcı" gibi değerlendirebiliriz.
Uygulama Kümeleri değerlendir
Ölçekli rakam verisini PCA(n_components=30, random_state=0) ile indir ve KMeans(n_clusters=10, n_init=10, random_state=0) ile kümele. ARI'yi round(..., 3) ile yazdır. Ardından her kümeye en sık gerçek etiketini atayıp bu eşlemeyle elde edilen doğruluğu round(..., 3) ile yazdır.
Başlangıç kodu
import numpy as np
from sklearn.datasets import load_digits
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_rand_score
X, y = load_digits(return_X_y=True)
# buraya yazÖrnek çözüm
import numpy as np
from sklearn.datasets import load_digits
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_rand_score
X, y = load_digits(return_X_y=True)
Z = PCA(n_components=30, random_state=0).fit_transform(StandardScaler().fit_transform(X))
kume = KMeans(n_clusters=10, n_init=10, random_state=0).fit_predict(Z)
print(round(adjusted_rand_score(y, kume), 3))
eslem = np.array([np.bincount(y[kume == k]).argmax() for k in range(10)])
print(round((eslem[kume] == y).mean(), 3))Beklenen çıktı
0.553 0.707
Uygulama Denetimli ile karşılaştır
Aynı 30 bileşenli PCA uzayında KNeighborsClassifier(n_neighbors=5)'ın 5 katlı CV doğruluğunu round(..., 3) ile yazdır. Etiket kullanmanın ne kadar fark yarattığını gör.
Başlangıç kodu
from sklearn.datasets import load_digits
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
X, y = load_digits(return_X_y=True)
# buraya yazÖrnek çözüm
from sklearn.datasets import load_digits
from sklearn.pipeline import make_pipeline
from sklearn.preprocessing import StandardScaler
from sklearn.decomposition import PCA
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import cross_val_score
X, y = load_digits(return_X_y=True)
pipe = make_pipeline(StandardScaler(), PCA(n_components=30, random_state=0), KNeighborsClassifier(n_neighbors=5))
print(round(cross_val_score(pipe, X, y, cv=5).mean(), 3))Beklenen çıktı
0.94
Soru ve cevaplar
Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.
1 Kümeye en sık etiketi atamak neden etiketli veriye bakmak demektir?
- Etiketleri kullanır; tam denetimsiz bir değerlendirme değildir Doğru cevap
- Etiket kullanmaz
- Rastgeledir
- Hatalıdır
Açıklama: Kümeleme etiketsizdir ama küme-etiket eşlemesi etiket bilgisi gerektirir.
2 Her kümedeki en sık etiketi bul.
etiket = np.bincount(y[kume == k]).____()
etiket = np.bincount(y[kume == k]).argmax()
Açıklama: bincount sayar, argmax en sık olanın değerini verir.
3 Adımları eşleştir.
| Kavram | Anlamı |
|---|---|
PCA(30) |
Gürültü azaltma |
KMeans(10) |
Etiketsiz gruplama |
ARI |
Yapı benzerliği |
en sık etiket |
Küme-sınıf eşlemesi |