Makine Öğrenmesi · Bölüm 5
Karar ağacı
Çizgi izleyen robotun kararını evet/hayır sorularına bölmek
Veri. Bir uzman, çizgi izleyen robotu elle sürerken 160 an kaydettik: sol ve sağ çizgi sensörünün okuması (0–1023) ve o an seçtiği eylem: sola, düz ya da sağa. Çizgi koyu; sensör koyu yüzeyde büyük değer okur. Robot aynı kararları kendisi versin istiyoruz, ama okunabilir kurallarla.
import numpy as npfrom cizgi import X, y # [sol, sağ], 0 sola 1 düz 2 sağadef gini(y): p = np.bincount(y, minlength=3) / len(y); return 1 - (p ** 2).sum()def best_split(X, y):best = (gini(y), None, None)for f in range(2): # her sensörfor t in np.unique(X[:, f]): # her eşikL = X[:, f] <= tg = (L.sum() * gini(y[L]) + (~L).sum() * gini(y[~L])) / len(y) # bölmeden sonraki safsızlıkif 0 < L.sum() < len(y) and g < best[0]: best = (g, f, t)return bestdef grow(X, y, depth):g, f, t = best_split(X, y)if depth == 0 or f is None: return np.bincount(y).argmax() # yaprak: çoğunlukL = X[:, f] <= treturn (f, t, grow(X[L], y[L], depth - 1), grow(X[~L], y[~L], depth - 1))tree = grow(X, y, depth=3)
Sahnedeki her sayı, aynı algoritmanın tarayıcında yapılan gerçek çalıştırmasından gelir (sabit tohum, her seferinde aynı sonuç). Python kodunu kendi bilgisayarında çalıştırırsan rastgele başlangıçlar farklı olacağı için sayılar biraz değişebilir.
Nasıl çalışır
- Gini safsızlığı, bir kutudaki eylemlerin ne kadar karışık olduğunu ölçer: tek eylem varsa 0.
- Her düğümde iki sensörün de bütün eşikleri denenir; safsızlığı en çok azaltan tek soru seçilir ("sol ≤ 612 mi?").
- İki yarıya aynı işlem uygulanır, derinlik sınırına kadar. Yapraklar çoğunluk eylemini verir.
- Derinlik 1 kaba kalır; 2–3 kuralı bulur. Daha derinde yaprak sayısı artar ama test doğruluğu artmaz: fazladan yapraklar yanlış etiketleri ezberler. Derinliği değiştir, yaprakları ve test doğruluğunu izle.
Neden önemli
Karar ağacının kuralları okunabilir ve doğrudan bir Arduino if-else zincirine çevrilebilir. Yüzlerce ağaç birleşince (rastgele orman, gradyan artırma) tablo verisinde bugün de en güçlü yöntemler arasındadır.
ESOF 323, 11. hafta: robotlarda derin öğrenme →