- 31 Ara 2018
- 79
- 3
Giriş
Merhaba, geçen konularımızda Temel Kavramlar, Makine Öğrenmesi ve Veri Hazırlama gibi konulara değinmiştik. Eğer bu konuları henüz okumadıysanız, sırayla bu konuları okumanız öğrenme süreci açısından daha faydalı olacaktır. Konulara gitmek için, isimlerinin üzerine tıklamanız yeterlidir.
Artık bu noktaya kadar Yapay Zekânın temel kavramlarına hakkında bilgi sahibi olarak gereken temel yetkinliklerimizi kısmen kazanmış olduk. Bundan sonraki aşamada artık Yapay Zekâ Algoritmalarını ele alarak, bu algoritmaları pekiştireceğiz. Bugün Makine Öğrenmesi Algoritmalarına Giriş niteliği taşıyan KNN (K Nearest Neighborhood, En Yakın K Komşu) algoritmasının çalışma yapısını inceleyerek, örnekler üzerinden pekiştirmeye çalışacağız.
KNN Algoritması
KNN Algoritması, denetimli makine öğrenmesi Algoritmalarındandır. Bu algoritma ile, gelen verinin, elimizde var olan ve sonuçlarını bildiğimiz bütün verilere göre mesafesi ölçülerek, en yakın olduğu K tane komşusu alınır. Alınan bu K tane komşu, çoğunlukla hangi sınıf kategorisine aitse gelen verininde bu sınıf kategorisine ait olduğu söylenebilir.
Algoritmanın çalışma yapısını basit bir örnekle özetleyecek olursak;
Bir toplum içerisinde kadınların ve erkeklerin olduğunu ve bu kişilerin hepsinin saç uzunluklarını bildiğinizi düşünün. Yeni gelen birinin saç uzunluğunu ölçerek, o toplumdakilerin saç uzunluğunun bu kişinin saç uzunluğuna en yakın olduğu 3 kişiyi seçtiğimizi düşünün. Bu 3 kişinin içerisinde kadınların sayısı daha fazlaysa yeni gelen kişinin kadın olduğunu söyleyebiliriz.
Tam tersi olarak eğer bu 3 kişinin içerisinde erkeklerin sayısı fazlaysa yeni gelen kişinin erkek olduğunu söyleyebiliriz.
Verdiğimiz örnek üzerinden kısa bir analiz yapacak olursak, kadın ve erkek ayrımının birer sınıflandırma olduğunu söyleyebiliriz. Gelen herhangi bir kişinin(ki gelen kişileride veriler olarak görebiliriz) diğer kişilerin özellikleriyle olan mesafelerini ölçerek, en yakın olduğu K tane(bu örnek için K=3 seçtik) kişiyi alıp, bu kişilerin çoğunluğunun dahil olduğu sınıfa (Erkek-Kadın) göre yeni gelen kişinin sınıfı(Erkek veya Kadın olduğu) hakkında yorum yapabiliriz.
KNN Algoritması verilerin arasındaki mesafe ölçümünü yapabilmek için çeşitli mesafe ölçüm yöntemleri kullanabilir. Bir çok mesafe ölçüm yöntemi olmasına karşın şimdilik bu yöntemlerden sadece Öklid, Manhattan ve Minkowski mesafe ölçüm yöntemlerine değineceğiz.
Öklid Uzaklığı
Öklid Uzaklığı, kümeleme ve sınıflandırma Algoritmalarında yaygın olarak kullanılan bir mesafe ölçüm yöntemidir. Bu mesafe ölçüm yönteminde iki nokta arasındaki doğrusal uzaklık hesaplanır.
Manhattan Uzaklığı
Manhattan uzaklığı n boyutlu 2 nokta arasındaki, her bir boyutun farklarının mutlak değerleri toplamıdır. Şu şekilde daha iyi anlayabilirsiniz:
Minkowski Uzaklığı
Minkowski uzaklığı öklid uzayında tanımlı bir dizidir. Yani boyutsal anlamda ölçümlerin yapılabildiği ölçüm çeşididir. Daha da açıklayıcı olursak Minkowski uzaklığı iki nokta arasındaki bir yayın uzunluğunu hesaplayabilir diyebiliriz. Birçok sınıflandırma ve kümeleme algoritmasında kullanılan ve en yaygın ölçüm yöntemi diyebileceğimiz öklid mesafesi, Manhattan gibi uzaklık ölçüm yöntemlerinin genelleştirilmiş halidir.
Genel olarak mesafe formülleri şu şekildedir:
Artık KNN Algoritmasının nasıl çalıştığı ve veriler arasındaki uzaklıkların (benzerlik ölçümlerinin) hangi ölçüm yöntemleri kullanılarak ölçüldüğü gibi konular hakkında fikir sahibiyiz. Şimdi bir örnekle bu algoritmanın örnekler üzerinde nasıl çalıştığını görerek, detayları kavrayıp, Python dili ile kodlanması aşamasına geçelim.
KNN Algoritması Örneği
Öncelikle önceki konularımızda belirttiğimiz gibi, herhangi bir Makine Öğrenmesi Algoritmasıyla çalışıyorsak, bu algoritmanın en önemli elemanı bir veri setidir. Veri Seti aracılığıyla bir Matematiksel Model oluşturarak, bu veri setine göre işlemler yapıp, çıktısını bilmediğimiz verilerimizin özelliklerini kullanarak, önceden oluşturduğumuz Matematiksel Modele göre çıktılarına ulaşabiliriz. Şimdilik hesaplamaları el ile yapacağımız için karar aşamasında bize yol gösterecek olan, veri setimiz 3 elemanlı olacak.(Tabi ki problemlerde elimizdeki veri setlerinden tutarlı ve doğru sonuçlar alabilmek için veri setleri çok daha büyük olur ama şimdilik konunun anlaşılarak özümsenmesi için 3 elemanlı bir veri seti ile çalışacağız.)
Veri Seti
Veri setimiz çeşitli yaşlardan ve ırklardan insanların yüzlerinin rgb(red-green-blue) renk değerlerini alarak (insan yüzüne ait olmayan renk değerlerinin de bulunduğu bir veri setidir) bu değerlerden "insan" veya "insan değil" çıkarımının yapıldığı bir veri setidir. Veri Setimiz şu şekildedir:
Kod:
[COLOR="Red"]r [/COLOR][COLOR="Lime"] g[/COLOR][COLOR="Blue"] b [/COLOR][COLOR="White"] insan?[/COLOR]
74 85 123 1
73 84 122 1
6 22 304 0
Veri setinin tamamına buradan erişebilirsiniz.
şimdi veri setimizi hazırladığımıza göre işlemlerimize geçebiliriz. Öncelikle sistemimize yeni bir veri geldiğini düşünelim. Yeni gelen verimizin değerleri şu şekildedir:
Kod:
[COLOR="Red"]r[/COLOR][COLOR="Lime"] g[/COLOR][COLOR="Blue"] b [/COLOR][COLOR="White"] insan?[/COLOR]
203 213 253 -
Gördüğünüz gibi yeni gelen verilerimizde yüzün renk değerleri mevcut ama bu yüzün bir insana ait olup olmadığının herhangi bir değeri mevcut değil. Bu mevcut olmayan değer bütün bu organizasyonu oluşturmamızı sağlayan şeydir. Makine Öğrenmesi Algoritmalarımızın ve Veri Setlerimizin varlık sebebidir. Yani baştan beri amacımız bir alana ait elimizde var olan verilerimizden çeşitli Matematiksel Modellemeler ve Çıkarımlar yaparak bilinmeyen veriye mümkün olan en doğru şekilde ulaşmaktır.
Burada bilinmeyen veriler için çıkarım yapabileceğimiz Matematiksel Model olarak KNN Algoritmasını seçtik. Şimdi gelen verimize bu algoritmamızı uygulayarak sonucu hep birlikte görelim.
Öncelikle her bir niteliğimiz için (ki burada niteliklerimiz renk değerlerimizdir) bilinen veri setimizde mesafe ölçümlerimizi yapalım. Burada mesafe ölçüm yöntemi olarak Öklid Uzaklığını kullanacağız.
Kod:
[COLOR="Red"]r [/COLOR][COLOR="Lime"] g [/COLOR] [COLOR="Blue"] b [/COLOR][COLOR="White"] insan?[/COLOR]
74 85 123 1 => ((203-74)^2 + (213-85)^2 + (253-123)^2)^(1/2) = [COLOR="Aqua"]229.3578[/COLOR]
73 84 122 1 => ((203-73)^2 + (213-84)^2 + (253-122)^2)^(1/2) = [COLOR="Red"]225.1710[/COLOR]
6 22 304 0 => ((203-6)^2 + (213-22)^2 + (253-304)^2)^(1/2) = [COLOR="Aqua"]279.0896[/COLOR]
Ölçümleri dikkatlice inceleyerek, neyin ne için yapıldığını sorgulayın. Burada yaptığımız işlem Öklid uzaklık formülüne göre önceden bildiğimiz veri setimizin içerisindeki her bir veri ile yeni gelen verimizin mesafesini ölçmektir. (Bu ölçümü yaparken niteliklerin her biri için gerekli işlemler öklid uzaklık formülüne göre yapılır.)
Ýşlemler tamamlandıktan sonra en düşük mesafe değerine sahip (yani yeni gelen verimize en yakın) K tane değer alınarak, baskın olan sınıf, yeni gelen verinin sınıfı olarak belirlenir. Bu örneğimizde çok düşük sayıda veri seti ile çalıştığımız için K değerini ancak 1 seçebiliriz. Kayıt sayısının fazla olduğu durumlarda K değeri çoğu zaman 1 sayısından büyük olarak seçilir. Burada önemli olan K değerini ne gereksiz yere çok büyük ne de yetersiz kalacak kadar çok küçük seçmemektir.
K değerimiz 1 olduğu için en düşük uzaklık değerine sahip 1 veri seçilir. Dolayısıyla bu veride, veri seti içerisindeki 2 numaralı kayıt olduğu için yeni gelen verimizin sınıfı bu 2 numaralı kayıtın sınıfı ile aynı olacaktır.
Sonuç olarak şu çıkarımı yapabiliriz; Yeni gelen verimizin renk değerleri Algoritmamıza göre insan yüzünün renk değerleri olabilecek niteliktedir. Dolayısıyla yeni gelen verimizin sınıfı "insan" sınıfıdır. insan niteliği 1 olmuş olur.
Bu aşamaya kadar KNN Algoritmasının çalışma yapısını ve bir Makine Öğrenmesi Algoritmasının arkasında dönen Matematiğin nasıl bir yapıya sahip olduğunu anlamaya çalıştık. Bu aşamadan sonraki aşama da, son aşama olan anladığımızı Bilgisayar Bilimleri alanındaki yeteneklerimizle birleştirerek kodlama aşamasına geçip, konumuzu sonuçlandıracağız.
Python ile KNN Algoritmasının kodlanması konusuna buradan ulaşabilirsiniz.
Son düzenleme: