Python ile Yapay Zekâ (Makine Öğrenmesi - KNN Algoritması) #4

LEOHUNTERA

Üye
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.

main-qimg-7c205680db327d1736dadfaae3d638ab


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.

distance.jpg


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:

images


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.

minkowski.png


Genel olarak mesafe formülleri şu şekildedir:

KNN_similarity.png


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:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.