Menu
CoddyTech

Dirsek Yöntemi

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

k'ya karşı inertia'yı çiz. Her yeni merkez gerçek bir grubu bölerken inertia hızla düşer; sonra yataylaşır. Dirsek, elbow, iyi bir k değeridir:

k from 1 to 8 için iki inertia eğrisi. Solda, elmalar: k = 3'e kadar dik bir düşüş, ardından neredeyse yatay; 3'te kesikli bir çizgi var. Sağda, grupları olmayan noktalar: dirsek içermeyen düzgün bir eğri

Pratik bir kural: Bir merkez daha eklemek ataleti dörtte birden daha az azaltıyorsa dur. Elmaların azalması: önce %56, sonra %69, ardından yalnızca %15. Yani k = 3:

ax.plot(ks, inertias, marker="o")
ax.axvline(3, linestyle="--")

Bükülmesi olmayan yumuşak bir eğri, belirgin gruplar olmadığı anlamına gelir. Bir sonraki derste ikinci bir yargıç gelecek.

challenge icon

Görev

Kolay

Bir bitki uygulaması, ev bitkilerini ışık ve su gereksinimlerine göre bakım planlarına ayırır. Başlangıç kodunda k from 1 to 8 için inertia değerleri, bir grafik ve cutoff bulunur.

  1. k = 1'den başlayarak yukarı doğru ilerle; sonraki k değerinin inertia'yı cutoff değerinden daha az azalttığı yerde dur. Bu k değerini yazdır.
  2. Inertia'yı k değerine göre noktalarla çiz, seçtiğin k değerinde kesikli bir dikey çizgi ekle ve grafiği göster.

Başka bir uygulama için cutoff 0.25:

Care plans: 3

k from 1 to 8 için Elbow: Care Plans başlıklı inertia eğrisi; her k değerinde bir nokta var: k = 3'e kadar keskin bir düşüş, ardından neredeyse düz bir çizgi ve 3'te kesikli bir dikey çizgi

Ardından Coddy grafiğini açıklar.

Kendin dene

import numpy as np
import matplotlib.pyplot as plt
from sklearn.cluster import KMeans

# Aşağıdaki satırları değiştirmeyin
rng = np.random.default_rng(17)
# Dört bitki türü: tipik ışık ve su ihtiyaçları ile her türden kaç tane olduğu
kinds = [(8.5, 2, 35), (2.5, 7.5, 30), (5, 5, 30), (8, 8, 25)]
parts = []
for l, w, n in kinds:
    parts.append(np.column_stack([rng.normal(l, 0.8, n), rng.normal(w, 0.8, n)]))
# 120 ev bitkisi, her biri bir satırda: ışık ve su ihtiyaçları, 1 ile 10 arasında puanlanmış
plants = np.clip(np.round(np.concatenate(parts), 1), 1, 10)

# Inertia'dan alınan, k = 1 ile 8 arasındaki atalet değerleri
ks = list(range(1, 9))
inertias = []
for k in ks:
    km = KMeans(n_clusters=k, n_init=10, random_state=0)
    km.fit(plants)
    inertias.append(km.inertia_)

cutoff = float(input())
fig, ax = plt.subplots()
ax.set_title("Elbow: Care Plans")
ax.set_xlabel("k")
ax.set_ylabel("Inertia")

# 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