Menu
CoddyTech

Silüet Puanları

Coddy'nin Machine Learning Journey'sinin Denetimsiz Öğrenme bölümünün bir parçası. Ders 8 / 51.

Atalet k ile her zaman iyileşir, bu yüzden bir dirsek noktasına ihtiyaç duyar. Silüet her noktaya daha adil bir soru sorar: Kendi grubuma mı yoksa sıradaki gruba mı daha yakınım?

Kendi grubundaki 8 noktaya düz çizgilerle bağlı siyah bir nokta, ortalama uzunluk a = 1.3; en yakın diğer gruptaki 8 noktaya kesikli çizgilerle bağlı, ortalama uzunluk b = 3.4. Silüet değeri 0.62

Bir nokta (b - a) / max(a, b) puanı alır: grubu içinde sıkı biçimde kümelenmişse 1'e yakın, sınırdaysa 0'a yakın, yanlış gruptaysa 0'ın altında. Ortalama puan, kümelemenin puanını verir:

from sklearn.metrics import silhouette_score
for k in [2, 3, 4]:
    km = KMeans(n_clusters=k, n_init=10, random_state=0)
    km.fit(X)
    print(k, f"{silhouette_score(X, km.labels_):.3f}")

Elmalar için bu, şunu yazdırır:

2 0.534
3 0.657
4 0.545

En yüksek değerine en iyi k'da, burada 3'te ulaşır; bu noktada noktalar kendilerini en çok ait oldukları yerde hisseder.

challenge icon

Görev

Kolay

İki tahminci, kıyılarına vuran fırtına türlerinin sayısı konusunda anlaşamıyor. Başlangıç kodunda 150 fırtına, en yüksek rüzgâr ve yağış verileri bulunuyor; önce Ana'nın k değerini, ardından Ben'inkini okuyor.

  1. Her k değerini silhouette puanına göre 3 ondalık basamakla puanla.
  2. Hangi tahmincinin k değerinin daha iyi uyduğunu yazdır.
  3. 2 ile 8 arasındaki en iyi k değerini puanıyla birlikte yazdır.

Başka bir kıyı için:

Ana, k = 2: 0.512
Ben, k = 3: 0.574
Ben's k fits better
Best from 2 to 8: k = 3 (0.574)

Kendin dene

import numpy as np
from sklearn.cluster import KMeans
from sklearn.metrics import silhouette_score

# Aşağıdaki satırları değiştirmeyin
rng = np.random.default_rng(6)
# Dört fırtına türü: tipik rüzgâr ve yağış değerleri ile her türden kaç tane olduğu
kinds = [(30, 8, 40), (12, 34, 35), (21, 21, 30), (11, 9, 45)]
parts = []
for w, r, n in kinds:
    parts.append(np.column_stack([rng.normal(w, 2.5, n), rng.normal(r, 3, n)]))
# Bir kıyıdaki 150 fırtına, her satırda bir fırtına: en yüksek rüzgâr hızı (m/s) ve yağış miktarı (saatte mm)
storms = np.round(np.concatenate(parts), 1)

# İki hava tahmincisinin belirlediği fırtına türü sayıları
k_ana = int(input())
k_ben = int(input())

# Kodunuzu aşağıya yazın
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Denetimsiz Öğrenme bölümündeki tüm dersler

Kendi başına pratik yap: Online Python derleyicisi