KNN Algoritması

Merhabalar Arkadaşlar, bugün sizlere geçen sene Yapay Zeka dersinde ve bu senede Makine Öğrenmesi dersinde öğrendiğimiz KNN Algoritmasından bahsedeceğim. Hazırsanız haydi başlayalım 🙂


  • Yapay zeka, makinelerin karmaşık problemlere insanlar gibi çözümler üretmesini sağlayan bir bilim dalıdır. 
  • Bu genellikle insan zekâsının karakteristik özelliklerini alıp,bilgisayarlara algoritmalar biçiminde uygulanarak gerçekleştirilir.
  • Yapay zeka, genellikle bilgisayar bilimlerinden başka Matematik, Biyoloji, Psikoloji, Felsefe ve diğer farklı bilimler ile de yakından ilgilidir. 
  • Tüm bu alanlardaki bilgilerin birleştirilmesi ile eninde sonunda yapay zeka konusundaki gelişmelere bağlı olacaktır.
  • Yapay zeka konusu üzerine hiçbirinin doğruluğu ya da yanlışlığı kanıtlanmamış birçok farklı yaklaşım bulunmaktadır. 

Image result for makine öğrenmesi nedir

Makine Öğrenmesi (Machine Learning), birçok matematiksel ve istatistiksel yöntemleri kullanarak mevcut verilerden çıkarımlar yapabilen, bu yaptığı çıkarımlarla bilinmeyen tahminlerde bulunan yöntem biçimidir. Makine öğrenmesine sosyal hayatımızdan bazı örnekler verebiliriz : Yüz tanıma, Veri sınıflandırma, Spam tespitileri. Yapay Zeka ile içine olan bir alandır. KNN algoritması her iki alanda da kullanılmaktadır.


Yapay Zeka ve Makine Öğrenmesini kısaca tanıdıktan sonra artık algoritmamızı tanımaya başlayabiliriz. 

KNN Algoritması

  • Gözetimli öğrenme metotlarından sınıflandırma (classification) işleminde kullanılan K-KN (K-Nearest Neighborhood, En Yakın K Komşu) algoritmasıdır.
  • Sınıflandırma işleminde K değerine bakılarak eleman sayısını belirler. Her ne kadar KNN algoritması k-means algoritmasındaki benzer özellikleri taşısa da büyük farklılıklar da içermektedir. 
  • KNN algoritması bir eğitim verisi içerirken k-means algoritması bir eğitim verisi içermez. Yeni bir değer geldiğinde K değerine mesafeler hesaplanır ve yeni değer bir kümeye ilave edilir.
  • Eğitim kümesinin büyük olması ve k değerini uygun seçilmesi KNN açısından çok önemlidir. KNN algoritmasına karar verdiğinizde eğitim verinizi ve k değerini arttırarak başarınıza bakıp. Başarı sabitlenmeye başladığında iyi bir KNN tahmin sistemi yapmışınızdır diyebiliriz.

KNN algoritmasının çalışma prensibi, nesnelerin birbirleri arasında yakınlık ilişkilerine göre kümeleme işlemi yapmaktadır. Doğrusal ayrıştırma yöntemi ile koordinat düzleminde çalışırlar.

KNN, Basit bir makine öğrenme algoritmasıdır. Küçük çaplı projelerde gayet iyi sonuçlar verebilir ancak büyük veriler üzerinde işlemler yaparken süre anlamında uzun sürelerde işlemleri tamamladığı için genellikle küçük çaplı işlemlerde tercih edilir.


KNN algoritmasını öğrendikten sonra çok sevdiğim bir dil olan Swift ile örnek yapacağız.

Beşiktaş ve Fenerbahçe kulüplerinin son 10 yılda atmış olduğu gollere bakarak bu sene kim şampiyon olur onu tahmin eden bir program yazdık.

// öğrenme verimiz

let fenerbahceData:[Int] = [78,60,60,60,74,56,61,70,53,63] // attığı gol sayısı - Fenerbahce
let besiktasData:[Int] = [69,73,75,55,53,63,50,83,60,45] // attığı gol sayısı - Besiktas
let sampiyonlukData:[String] = ["f","b","b","f","f","b","f","b","f","f"]

// test verimiz

let dataW = 58 // fenerbahce
let dataH = 47 // besiktas

func elementCount<Arr:Sequence>(array:Arr,v:Arr.Iterator.Element) -> Int where Arr.Iterator.Element:Equatable {
    
    var count:Int = 0
    
    array.forEach { (val) in
        if v == val {
            count += 1
        }
    }
    
    return count
}

// veriler arası uzaklığı bulan fonksiyon
func mesafe(x:Int,y:Int) -> Int {
    
    return abs(x) + abs(y)
    
}

func kSet() -> [Int] {
    
    var fbfark:[Int] = []
    var bjkfark:[Int] = []
    var sampiyonData:[Int] = []
    
    for i in 0..<sampiyonlukData.count {
        
        fbfark.insert(dataW - fenerbahceData[i], at: i)
        bjkfark.insert(dataH - besiktasData[i], at: i)
        sampiyonData.insert(mesafe(x: fbfark[i], y: bjkfark[i]), at: i)
        
    }
     return sampiyonData
    
}

// algoritmanın yapılacak olan son işlemleri
func kFinal(k:Int) -> String {
    
    let tempkDat = kSet()
    var kDat = kSet().sorted(by: {$0 < $1})
    var f:[String] = []
    
    // bütün indisleri gezme işlemleri
    for i in 0..<k {
        
        let kindis = tempkDat.firstIndex(of: kDat.first!)
        kDat.removeFirst()
        f.insert(sampiyonlukData[kindis!], at: i)
        
    }
    
    // verinin hangi sınıfa ait olduğunu bulduğumuz alan
    if elementCount(array: f, v: "f") > elementCount(array: f, v: "b") {
        return "F"
    } else if elementCount(array: f, v: "f") < elementCount(array: f, v: "b") {
        return "B"
    } else {
        return "nil"
    }
    
}

print(kFinal(k: 3)) // F - 3 defa komşuluğa bakıyor ve doğru sonucu buluyor.

Algoritmanın sonunda sağlıklı bir cevap bulabilmek için 3 k değeri verdik. Karşılaştırmalar sonucunda değerin yakınlığı Fenerbahçe’ye ait olduğu tespit edildi. Bu şekilde sizlerle istediğiniz dillerde benzer uygulamalar, alıştırmalar yapabilirsiniz.

Kaynaklar : https://kenanatmaca.com/knn-k-nearest-neigborhood-algoritmasi/

http://www.pythondersleri.com/2017/08/knn-algoritmas-ve-ornek-uygulama.html

Gelecek derste görüşünceye dek hoşçakalın 🙂

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir