Makine Öğrenmesi · Bölüm 3
k en yakın komşu (k-NN)
Renk sensörüyle nesne tanımak: yeni ölçüm, komşularına bakar
Veri. Robot kolun ucundaki renk sensörü her nesne için iki sayı ölçer: ton ve parlaklık. Elimizde 90 etiketli ölçüm var: kırmızı top, mavi silindir, sarı küp. Kol yeni bir nesneyi kavradığında hangisi olduğunu söylemeli.
import numpy as npfrom renk import X, y, Q # 90 ölçüm, etiketleri, yeni ölçümlerk = 5 # komşu sayısıfor q in Q:d = ((X - q) ** 2).sum(1) # her ölçüme uzaklık²near = d.argsort()[:k] # en yakın k ölçümvotes = np.bincount(y[near], minlength=3) # sınıf oylarıprint(votes.argmax()) # en çok oy alanpred = [np.bincount(y[((X - t) ** 2).sum(1).argsort()[:k]], minlength=3).argmax() for t in T]print((np.array(pred) == y_test).mean()) # test doğruluğu
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
- Yeni ölçümün eğitim verisindeki her ölçüme uzaklığı hesaplanır.
- En yakın k ölçüm seçilir ve her biri kendi sınıfına bir oy verir.
- En çok oy alan sınıf tahmindir. Eğitim yoktur: model, verinin kendisidir.
- k = 1 her gürültülü noktaya uyar ve sınırlar parçalanır; k büyüdükçe sınırlar yumuşar. k'yi değiştir, sınırları ve test doğruluğunu izle.
Neden önemli
En basit sınıflandırıcıdır ama çoğu zaman şaşırtıcı derecede iyidir; yeni bir yöntemin karşılaştırıldığı ilk çizgidir. Aynı fikir, yapay zekâ uygulamalarındaki vektör aramanın temelidir: bir sorunun cevabını bulmak için anlamca en yakın metinler aranır.
ESOF 323, 11. hafta: robotlarda derin öğrenme →