Merhabalar bu yazımda Makine Öğrenme algoritmalarından gözetimli öğrenme kategorisinde yer alan KNN algoritması nedir nasıl çalışır ve Swift dili ile yazdığım boy ve kiloya göre cinsiyet tahmini yapan kodu sizlerle paylaşacağım.
Bu algoritmanın adı K komşu algoritmasıdır. Çalışma mantığı nesnelerin bir biri arasında yakınlık ilişkilerine göre kümeleme işlemi yapar. Doğrusal ayrıştırma yöntemi ile kordinat düzleminde çalışır.
Uzaklık bulurken bir çok farklı uzaklık formulleri bulunmaktadır. Öklid,Manhattan,Gauss vs.
Basit bir makine öğrenme algoritmasıdır. Bazı durumlarda çok iyi sonuçlar verebilir ancak maliyet bakımından büyük veriler üzerinde işlemleri süre bazında uzun sürede gerçekleştirdiği için daha çok küçük çaplı öğrenme işlemlerinde tercih edilir.
Aşağıda yazdığım örneği inceleyebilirsiniz.
import Foundation // TRAİN DATA let heightData:[Int] = [180,170,150,160,175,185,173,183,153,163] let weightData:[Int] = [80,70,65,55,65,90,100,110,60,45] let sexData:[String] = ["m","m","f","f","f","m","m","m","f","f"] // TEST DATA let dataW = 60 let dataH = 170 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 } func manhattanDistance(x:Int,y:Int) -> Int { return abs(x) + abs(y) } func kSet() -> [Int] { var wfark:[Int] = [] var hfark:[Int] = [] var kData:[Int] = [] for i in 0..<sexData.count { wfark.insert(dataW - weightData[i], at: i) hfark.insert(dataH - heightData[i], at: i) kData.insert(manhattanDistance(x: hfark[i], y: wfark[i]), at: i) } return kData } func kFinal(k:Int) -> String { let tempkDat = kSet() var kDat = kSet().sorted(by: {$0 < $1}) var f:[String] = [] for i in 0..<k { let kindis = tempkDat.index(of: kDat.first!) kDat.removeFirst() f.insert(sexData[kindis!], at: i) } if elementCount(array: f, v: "m") > elementCount(array: f, v: "f") { return "M" } else if elementCount(array: f, v: "m") < elementCount(array: f, v: "f") { return "F" } else { return "nil" } } print(kFinal(k: 3)) // M
Algoritmadaki uzaklık her bir test verisi ile öğrenilen verinin farkı ve bu çıkan sonuçların formül ile uzaklık hesabının yapılıp burada bulunan en küçük değerlerin kontrolü ile kontrol edilir. Algoritmada bulunan “K” K tane komşu demektir ve test verimizin kordinat düzlemindeki bulunduğu noktaya en yakın olan komşular anlamı taşımaktadır.
Yukardaki örnektede öğrenilen veriler sonucu verilen test verimizi uygun olan kümeye yerleştirmiş olduk. Değerleri değiştirip farklı sonuçları görebilirsiniz.
Bu yazı yorumlara kapalı.