KNN (K-En Yakın Komşu) (K-En Yakın Komşu Algoritması)

KNN, yeni bir veriyi en yakın K komşusuna bakarak sınıflandıran veya değer tahmin eden denetimli, tembel öğrenme algoritmasıdır.

KNN (K-En Yakın Komşu), yeni bir veri noktasını eğitim setindeki en yakın K komşusuna bakarak sınıflandıran veya sayısal değer tahmin eden denetimli bir makine öğrenimi algoritmasıdır. 1951'de Evelyn Fix ve Joseph Hodges'ın ABD Hava Kuvvetleri için hazırladığı raporla ortaya çıkan yöntem, 75 yılı aşkın süredir hem ders kitaplarının hem de gerçek üretim sistemlerinin vazgeçilmezi olmayı sürdürüyor. Algoritmanın mantığı günlük sezgiyle örtüşür: bir şeyin ne olduğunu bilmiyorsanız, ona en çok benzeyen örneklere bakarsınız. K=5 seçildiyse, yeni noktaya en yakın 5 eğitim örneği bulunur; sınıflandırmada bu 5 komşunun çoğunluk oyu, regresyonda ise değerlerinin (isteğe bağlı mesafe ağırlıklı) ortalaması sonucu belirler. KNN "tembel öğrenme" (lazy learning) ailesindendir: eğitim aşamasında model kurmaz, veriyi olduğu gibi bellekte tutar ve tüm hesabı tahmin anına erteler. Eğitim maliyeti fiilen sıfırdır; buna karşılık her tahmin, n örnek ve d boyut için O(n·d) mesafe hesabı gerektirir. Aynı zamanda non-parametriktir: veri dağılımı hakkında hiçbir varsayım yapmaz, karar sınırının şeklini doğrudan veriden okur. Mesafe ölçümünde en yaygın tercih Öklid mesafesidir; Manhattan, Minkowski, cosine benzerliği ve kategorik veri için Hamming mesafesi de kullanılır. Özellik ölçekleri farklıysa min-max normalizasyonu veya z-skoru standartlaştırması şarttır; aksi hâlde 0–1000 aralığındaki bir özellik, 0–1 aralığındakini tamamen bastırır. K seçimi bias-variance dengesini belirler: K=1 gürültüye aşırı duyarlıdır ve overfitting üretir, çok büyük K karar sınırını körleştirir. Pratikte K, çapraz doğrulama ile tek sayılar arasından seçilir; √n kuralı iyi bir başlangıç noktasıdır. KNN'in mesafe temelli çekirdeği, 2026'nın en güncel yapay zeka mimarilerinde de yaşıyor: RAG sistemlerindeki vektör araması, özünde embedding uzayında yürütülen bir yaklaşık en yakın komşu (ANN) sorgusudur. FAISS, HNSW tabanlı indeksler ve Pinecone, Weaviate, Qdrant, Milvus gibi vektör veritabanları milyarlarca vektör üzerinde milisaniyeler içinde komşu arayarak bu klasik fikri LLM çağının bel kemiği hâline getirdi. Scikit-learn tarafında KNeighborsClassifier ve KNeighborsRegressor sınıfları algoritmayı KD-Tree ve Ball Tree hızlandırmalarıyla birlikte sunar.

KNN Adım Adım Nasıl Çalışır?

Algoritma dört adımda ilerler. (1) K değeri seçilir, örneğin K=5. (2) Yeni nokta ile tüm eğitim örnekleri arasındaki mesafe hesaplanır; Öklid formülü d = √(Σ(xᵢ − yᵢ)²) en yaygın tercihtir. (3) En küçük K mesafeye sahip komşular alınır. (4) Sınıflandırmada çoğunluk oylaması yapılır, regresyonda K komşunun hedef değerlerinin aritmetik veya mesafe ağırlıklı ortalaması alınır. Ağırlıklı varyantta her komşunun oyu 1/d ile çarpılır; yakın komşular kararı daha çok etkiler. Özellik ölçekleme bu sürecin en kritik ön adımıdır. Yaş (0–100) ile yıllık gelir (0–1.000.000 TL) aynı mesafe hesabına ham hâliyle girerse gelir sütunu sonucu tek başına belirler. Min-Max normalizasyonu tüm değerleri 0–1 aralığına çeker; StandardScaler ise ortalamayı 0, standart sapmayı 1 yapar. Scikit-learn'de bu iki adım genellikle tek bir Pipeline içinde zincirlenir: `Pipeline([('scaler', StandardScaler()), ('knn', KNeighborsClassifier(n_neighbors=5))])`.

K Değeri Nasıl Seçilir?

K, modelin bias-variance dengesini doğrudan ayarlayan tek hiperparametredir. K=1'de model tek komşuya güvenir: eğitim hatası sıfırdır ama gürültülü tek bir nokta bile kararı bozar, karar sınırı testere dişine döner (overfitting). K büyüdükçe sınır yumuşar; K=n'e yaklaşıldığında model her noktaya çoğunluk sınıfını atayan işe yaramaz bir tahminciye dönüşür (underfitting). Pratik rehber: - Küçük veri setlerinde K=3–7 çoğunlukla yeterlidir. - √n kuralı iyi bir başlangıçtır: 1.000 örneklik sette K≈31 civarından aramaya başlanır. - İkili sınıflandırmada K tek sayı seçilir; oy beraberliği yaşanmaz. - GridSearchCV ile Stratified K-Fold çapraz doğrulama, doğrulama hatasının dirsek (elbow) yaptığı noktayı güvenilir biçimde bulur. - Dengesiz sınıflarda büyük K, azınlık sınıfını ezme eğilimindedir; mesafe ağırlıklı oylama (weights='distance') bu etkiyi kısmen dengeler.

Mesafe Metrikleri

oklid Öklid (L2)

İki nokta arasındaki kuş uçuşu mesafe; sayısal ve ölçeklenmiş verilerde varsayılan tercih.

manhattan Manhattan (L1)

Eksenler boyunca toplam fark; yüksek boyutlu ve aykırı değer içeren verilerde L2'den daha kararlıdır.

minkowski Minkowski

L1 ve L2'yi genelleştiren parametrik metrik; p=1 Manhattan'a, p=2 Öklid'e karşılık gelir.

cosine Cosine Benzerliği

Vektörler arasındaki açıya bakar, büyüklüğü yok sayar; TF-IDF ve embedding tabanlı metin aramada standarttır.

hamming Hamming

Kaç konumun farklı olduğunu sayar; kategorik ve ikili (binary) özellikler için uygundur.

Kullanım Alanları

  • check_circle Tıbbi Teşhis: Yaş, kan değerleri ve görüntü özelliklerine göre hastalık sınıflandırması; Pima diyabet ve Wisconsin meme kanseri setleri klasik KNN kıyas noktalarıdır.
  • check_circle Tavsiye Sistemleri: Benzer kullanıcı veya ürünleri bularak film, müzik ve ürün önerme; işbirlikçi filtrelemenin (collaborative filtering) temel yapı taşıdır.
  • check_circle RAG ve Vektör Arama: LLM destekli sistemlerde sorgu embedding'ine en yakın belge parçalarını getirme; FAISS ve vektör veritabanlarındaki ANN araması KNN'in modern hâlidir.
  • check_circle Anomali ve Dolandırıcılık Tespiti: Ağ trafiğinde veya kart işlemlerinde en yakın komşulara uzaklığı yüksek noktaları outlier olarak işaretleme.
  • check_circle Metin ve Görüntü Sınıflandırma: TF-IDF ya da embedding vektörleri üzerinde spam tespiti, konu etiketleme; küçük veri setlerinde hızlı bir baseline olarak MNIST'te %97 civarı doğruluğa ulaşır.
  • check_circle Eksik Veri Doldurma: KNNImputer, eksik hücreleri en benzer K satırın değerleriyle doldurur; ortalama ile doldurmaya göre veri yapısını daha iyi korur.

Avantajlar ve Dezavantajlar

arti-basit Basit ve Yorumlanabilir

Tek ana hiperparametre (K) vardır; bir tahminin nedeni komşuları gösterilerek doğrudan açıklanabilir.

arti-egitimsiz Eğitim Maliyeti Sıfır

Model kurulmaz; yeni veri geldiğinde yeniden eğitim gerekmeden set büyütülerek güncel kalınır.

arti-nonparametrik Varsayımsız (Non-parametrik)

Veri dağılımı hakkında hipotez kurmaz; doğrusal olmayan karmaşık karar sınırlarını doğal olarak öğrenir.

eksi-yavas Yavaş Tahmin

Her sorgu O(n·d) mesafe hesabı ister; milyonlarca örnekte indekssiz kullanım pratik değildir.

eksi-bellek Yüksek Bellek Tüketimi

Tüm eğitim seti RAM'de tutulur; veri büyüdükçe bellek ihtiyacı doğrusal artar.

eksi-boyut Boyut Lanetine Duyarlı

Boyut arttıkça mesafeler birbirine yaklaşır; 100+ boyutta PCA veya özellik seçimi fiilen zorunludur.

KNN'i Hızlandırma: KD-Tree'den FAISS ve Vektör Veritabanlarına

Kaba kuvvet arama her sorguda tüm setle karşılaştırma yapar. KD-Tree ve Ball Tree gibi uzamsal indeksler bu maliyeti düşük boyutlarda O(d·log n) seviyesine indirir; scikit-learn `algorithm` parametresiyle uygun yapıyı otomatik seçer. Ancak KD-Tree yaklaşık 20 boyutun üzerinde kaba kuvvete karşı üstünlüğünü yitirir. Yüksek boyutlu embedding çağının cevabı yaklaşık en yakın komşu (ANN) yöntemleridir. HNSW (Hierarchical Navigable Small World) grafiği, %95+ recall ile milisaniye altı sorgu süresi sunar ve bugün Qdrant, Weaviate, Milvus ve pgvector'ün varsayılan indeksidir. Meta'nın açık kaynak FAISS kütüphanesi IVF ve PQ (product quantization) teknikleriyle milyarlarca vektörü GPU üzerinde tarayabilir; Google'ın ScaNN ve Spotify'ın Annoy kütüphaneleri de yaygın alternatiflerdir. 2026 itibarıyla her RAG hattında çalışan bu ANN katmanı, 1951 tarihli KNN fikrinin en büyük ölçekli uygulamasıdır.

Sık Sorulan Sorular

  • check_circle KNN ile K-Means arasındaki fark nedir?: KNN denetimli bir sınıflandırma/regresyon algoritmasıdır ve etiketli veri gerektirir; K-Means ise etiketsiz veriyi K kümeye ayıran denetimsiz bir kümeleme yöntemidir. İkisindeki K farklı şeyleri ifade eder: KNN'de bakılan komşu sayısı, K-Means'te küme sayısıdır.
  • check_circle KNN'de en iyi K değeri nasıl bulunur?: GridSearchCV ile çapraz doğrulama yapılır ve doğrulama hatasının en düşük olduğu K seçilir. √n kuralı başlangıç noktası verir; ikili sınıflandırmada beraberliği önlemek için K tek sayı tutulur.
  • check_circle KNN regresyon için nasıl kullanılır?: K komşunun hedef değerlerinin aritmetik ortalaması tahmin olarak döndürülür; weights='distance' seçeneğiyle yakın komşulara daha büyük ağırlık verilir. Scikit-learn'de KNeighborsRegressor bu işi görür.
  • check_circle Boyut laneti KNN'i neden bozar?: Boyut sayısı arttıkça noktalar arası mesafeler birbirine yakınsar ve 'en yakın' ile 'en uzak' komşu ayrımı silikleşir. 100+ boyutlu veride PCA ile boyut azaltma veya özellik seçimi uygulamak gerekir.
  • check_circle KNN büyük veride kullanılabilir mi?: Kaba kuvvetle pratik değildir; KD-Tree/Ball Tree düşük boyutta, FAISS ve HNSW tabanlı ANN indeksleri yüksek boyutta çözümdür. Vektör veritabanları bu yaklaşımla milyarlarca kayıtta milisaniye altı arama yapar.
  • check_circle KNN'den önce veri ölçeklemek şart mı?: Evet. Mesafe tabanlı olduğu için ölçeği büyük özellikler hesabı domine eder; StandardScaler veya Min-Max normalizasyonu uygulanmadan kurulan KNN çoğu zaman yanıltıcı sonuç verir.