python knn k nearest neighbours k en yakin komşu algoritmasi data science ml ai

Python ile Sınıflandırma Analizleri – KNN (K-Nearest Neighbours, K-En Yakın Komşu) Algoritması

Merhaba, iyi günler.

Bugün; çeşitli veri kümeleri üzerinde özel işlemler ile farklı çözümlemeler için yapılandırılmış denetimli/gözetimli öğrenme algoritmalarından, kümeleme yöntemleri ile benzerlik (k) değerleri ele alınarak geliştirilmiş En Yakın Komşu (K-Nearest Neighbours – KNN) algoritması üzerine çeşitli bilgi ve çözümlemeler aktarmaya çalışacağım.

Genel konu özetinin bulunduğu Python Veri Analizi yazısına link üzerinden ulaşabilirsiniz.

En Yakın Komşu Algoritması – EYKA (K-Nearest Neighbours – KNN); sınıflandırma işleminde bulunulacak örnek veri noktasının bulunduğu sınıfın (öğrenim kümesi) ve en yakın komşunun (elemanın), k değerine (benzerliğe) göre belirlendiği bir denetimli/gözetimli makine öğrenme yöntemi olarak ifade edilmektedir.

Literatür üzerinde yer alan temel/basit ifadesi ile tekrar tanımlanacak olursa; 

Sınıfı bilinmeyen verilerin, eğitim setindeki diğer veriler ile karşılaştırılıp bir uzaklık ölçümü gerçekleştirilmesi sonucu hesaplanan uzaklığa göre henüz bir sınıfa atanamamış verinin, en ideal (optimal) sınıfa atanarak sınıflandırılması olarak ifade edilmektedir.

KNN  algoritması; 1950’li yılların başında Evelyn Fix ve Joseph L. Hodges Jr. tarafından geliştirilmiş, 1965 yılında N.J. Nilsson’ın minimum uzaklık sınıflayıcı çalışmaları ile gelişimi hız kazanmış ve 1967 yılında ilk olarak genişletilip istatiksel analizlere (RegresyonRegression) yönelik kullanılması/önerilmesi Thomas M. Cover ve Peter. E. Hart tarafından gerçekleşmiştir.

KNN algoritması; hem sınıflandırma hem de regresyon çalışmaları içerisinde kullanılması yönü ile popüler olarak tercih edilen bir algoritmadır.

Genel sınıflandırma algoritmaları (modelleri) kendi çözümleri içerisinde bir sınıflayıcı oluşturarak sistem içerisindeki her veri değeri üzerinde bu sınıflayıcıyı kullanır.Genel olarak bu sınıflandırma algoritmalarına nazaran KNN algoritması her değer için, ilgili değere en yakın komşu kümesi üzerinden bir sınıflayıcı oluşturarak değerleri sınıflandırır. (Doğruluk değeri ideal seviyedeki bir sınıflandırma çözümü.)

Elbetteki tekrarlanan bu sınıflayıcı algoritmik çözüm, sınıflandırma sürecinin zaman almasına neden olmaktadır.
Bundan ötürü literatürde Tembel Öğrenci Algoritması (Yöntemi) olarak da ifade edilmektedir.

Algoritmaya yönelik uzaklık hesaplaması tipleri (sadece bir kısmı);

KNN Uzaklık Hesaplaması Algoritma Türleri

Euclidean (Öklidyen) Uzaklık Hesaplaması; Öklid Uzayı Rn içinde, iki nokta arası verilen mesafe hesaplaması olarak ifade edilmektedir.

Geliştiren: Euclid (Öklid) ve Pythagoras (Pisagor)

n boyutlu uzayda Euclidean (Öklidyen) Uzaklık hesaplaması;

euclidean formula

şeklinde gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

Euclidean Uzaklık Hesaplaması temsili görünümü; (Noktasal)

euclidean distance formula

şeklindedir.

Manhattan Uzaklık HesaplamasıRn içinde (uyarlanabilir) eksenler boyunca dik açılarda ölçülen iki nokta arasındaki mesafe hesaplaması olarak ifade edilmektedir.

Geliştiren: Hermann Minkowski (Bilinen)

n boyutlu uzayda Manhattan Uzaklık hesaplaması;

manhattan formula

şeklinde gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

Manhattan Uzaklık Hesaplaması temsili görünümü; (Noktasal)

manhattan distance formula

şeklindedir.

Chebyshev Uzaklık HesaplamasıRn içinde (uyarlanabilir) herhangi bir koordinat boyutu boyunca iki vektör arasındaki en büyük fark içeren mesafe hesaplaması olarak ifade edilmektedir.

Geliştiren: Pafnuty Chebyshev

n boyutlu uzayda Chebyshev Uzaklık hesaplaması;

chebyshev formula

şeklinde gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

Chebyshev Uzaklık Hesaplaması temsili görünümü; (Noktasal)

chebyshev distance formula

şeklindedir.

Hammign Uzaklık HesaplamasıRn içinde (uyarlanabilir) iki vektör arasındaki farklı olan değerlerin sayısı olarak ifade edilmektedir. (Değer sayısı mesafe olarak ifadelendirilir.)

Geliştiren: Richard Hamming

n boyutlu uzayda Hamming Uzaklık hesaplaması; (algoritmik olarak)

hamming formula

şeklinde (çözüm) gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

Hamming Uzaklık hesaplaması temsili görünümü;

hamming distance formula

şeklindedir.

Minkowski Uzaklık HesaplamasıRn içinde (uyarlanabilir) normlu kullanılan bir metrik* mesafe hesaplaması olarak ifade edilmektedir.

*Uzaklık kavramının (mesafe) vektör olarak temsil edilmesi. (Genel temsili tanım olarak.)

Geliştiren: Hermann Minkowski

n boyutlu uzayda Minkowski Uzaklık hesaplaması;

minkowski formula

şeklinde gerçekleştirilir.

Minkowski Uzaklık Hesaplaması gerçekleştirilirken denkleme yönelik üç ana gereksinim mevcuttur.
Bunlar; 

  • Sıfır Vektör (Zero Vector): Başlangıç ve bitiş noktası aynı olan yönlü doğru parçalarının temsil ettiği vektör olarak ifade edilmektedir.
    Boyu/Uzunluğu sıfır olan vektördür.
    Temsili olarak;
zero vector formula

şeklinde çözümlenir ve;

zero vector formula single

şeklinde gösterilir. (Sembolik)

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

  • Skaler Faktör (Scaler Factor): Tanımlı bir vektörün yönünü koruyan ama uzunluğunu değiştirmeyen değer olarak ifade edilmektedir.
  • Üçgen Eşitsizliği Çözümlemesi (Triangle Inequality Analysis) : Geometrik eleman olan üçgene ait kenarların uzunluklarına yönelik eşitsizlik çözümü olarak ifade edilmektedir. 

Minkowski Uzaklık Hesaplaması temsili görünümü; (Noktasal)

minkowski distance formula

şeklindedir.

Mahalanobis Uzaklık HesaplamasıRn içinde (uyarlanabilir) verinin varyans-kovaryans yapısını göz önüne alan ve tekil bir aykırı gözlem denemesi için kullanılabilen bir uzaklık formülü tanımlayan mesafe hesaplaması olarak ifade edilmektedir.

Geliştiren: Prasanta Chandra Mahalanobis

n boyutlu uzayda Mahalanobis Uzaklık hesaplaması;

mahalanobis formula

şeklinde çözümlenir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

Mahalanobis Uzaklık Hesaplaması temsili görünümü; (Noktasal)

mahalanobis distance formula

şeklindedir.

Haversine Uzaklık HesaplamasıRn içinde (uyarlanabilir) enlem ve boylam ve değerleri kullanarak bir küre üzerindeki (Genel olarak) mesafe hesaplaması olarak ifade edilmektedir.

Geliştiren: James Inman

n boyutlu uzayda Haversine Uzaklık hesaplaması;

haversine formula

şeklinde çözümlenir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

Haversine Uzaklık Hesaplaması temsili görünümü; (Noktasal)

haversine distance formula

şeklindedir.

Levenshtein Uzaklık Hesaplaması; iki dizi/dizilim arasındaki benzerliği derecelendirmek olarak ifade edilmektedir. (Değer sayısı mesafe olarak ifadelendirilir.)

Geliştiren: Vladimir Levenshtein

Levenshtein Uzaklık hesaplaması; (Temsili)

levenshtein distance formula

şeklinde gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

Sørensen-Dice Uzaklık Hesaplaması; sezgisel ağırlıklı olarak iki veri seti arasındaki örtüşme yüzdesi incelenip
0 ile 1 arasında bir değer verilerek değerlendirme gerçekleştirilmesi olarak ifade edilmektedir.
(Değer mesafe olarak ifadelendirilir.)

Geliştiren: Thorvald Sørensen ve Lee Raymond Dice

 Sørensen-Dice Uzaklık hesaplaması;

sorensen dice formula

şeklinde gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

Sørensen-Dice Uzaklık Hesaplaması temsili görünümü; (Algoritmik)

sorensen and dice distance formula

şeklindedir.

Jacckard Uzaklık Hesaplaması; veri setleri üzerindeki benzerlik ya da farklılıkları inceleyip 0 ile 1 arasında bir değer verilerek değerlendirme gerçekleştirilmesi olarak ifade edilmektedir.
(Değer mesafe olarak ifadelendirilir.)

Geliştiren: Paul Jacckard

 Jacckard Uzaklık hesaplaması;

jacckard formula

şeklinde gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

Jacckard Uzaklık Hesaplaması temsili görünümü; (Algoritmik)

jacckard distance formula

şeklindedir.

KNN (K-Nearest Neighbours, K-En Yakın Komşu) Algoritması Uygulama Örneği

KNN (K-Nearest Neighbours, K-En Yakın Komşu) algoritması uygulamasına örnek olarak, çokça duyulan ve kullanılan Iris Veri Seti üzerinden basit bir örnek ile çözümlemelerde bulunalım.

İlgili veri setine ait csv. uzantılı dosyasına buradan ulaşabilirsiniz.

microsoft power bi iris machine learning data sets support vector machine

Iris Veri Seti 3 Iris bitki türüne (Iris Setosa, Iris Virginica ve Iris Versicolor) ait, her bir türden 50 örnek olmak üzere toplam 150 örnek sayısına sahip bir veri setidir.

Iris Veri Seti içerisinde;

Sınıflar (Türler);

  • Iris Setosa,
  • Iris Versicolor,
  • Iris Virginica.

Veri Özellikleri (Ortak Özellikler);

  • Sepal Uzunluk (cm),
  • Sepal Genişlik (cm),
  • Petal Genişliği (cm)
  • Petal Uzunluk (cm).

özellik ve değerleri bulunmaktadır.

Dilerseniz hızlıca analizimizi gerçekleştirmek için adımlarımızı uygulamaya başlayalım.

1-Gerçekleştireceğimiz analizler için kullanacağımız kütüphaneleri sırası ile projemize dahil edelim; (Sklearn, Numpy, Seaborn, MatplotLib)

>>> import seaborn as sns
       iris = sns.load_dataset(“iris”)
       import pandas as pd
       import matplotlib.pyplot as pltis”)       

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science import packages

2-Çalışmamıza dahil ettiğimiz verilerimizin ön izlemesini gerçekleştirelim;

>>> iris.sample(7)

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science examples

3-Çalışmamıza dahil ettiğimiz verilerimizin değerlerinin ön izlemesini gerçekleştirelim;

>>> pd.value_counts(iris.species)

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science what is data

4-Çalışmamız üzerindeki veri setinden test ve eğitim veri setleri oluşturalım;

>>> train = iris.sample(frac=0.6, random_state=450)
       test = iris.drop(train.index)

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science what train and test data sets

5-Oluşturmuş olduğumuz eğitim ve test veri setleri ile hedef modelimizin kurgusunu gerçekleştirelim;

>>> X_train = train.drop(labels=’species’, axis=1)
       y_train = train.species
       X_test = test.drop(labels=’species’, axis=1)
       y_test = test.species
       print(X_train.head(),”\n”, y_train.head())

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science what train and test data sets bridge

6-Oluşturmuş olduğumuz eğitim ve test veri setleri arasındaki değer yoğunluğunu kontrol ettiğimizde;

>>> X_train.shape,X_test.shape
       y_train.shape,y_test.shape

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data

7-Çalışmamıza Sklearn kütüphanesi üzerinden optimizasyon ve ek analizler için paketimizi dahil edelim;

>>> from sklearn.neighbors import KNeighborsClassifier

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science import sklearn analyze

8-Analizimizi en yakın n=4 eleman üzerinden analiz gerçekleştirilecek şekilde kurgulayalım;

>>> knn = KNeighborsClassifier(n_neighbors=4)
       knn.fit(X_train,y_train)

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science import sklearn analyze n parameter

9-Mevcut yapımız üzerinde ortalama tahmin gerçekleştirelim;

>>> knn.score(X_test,y_test)

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science import sklearn analyze predicts

10-Test sonuçlarımızı kullanabilmek için bir parametre üzerine atayıp tahminleme gerçekleştirelim;

>>> results = knn.predict(X_test)

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science import sklearn analyze predicts test result

11-Test -y- verilerimizin ön izlemesini gerçekleştirip, listeleyelim;

>>> print(pd.crosstab(y_test, results, rownames=[‘Real’], colnames=[‘Predicted’], margins=True, margins_name=’total’))

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science import sklearn analyze y test

12-Doğruluk kontrolü adına Sklearn Metrics kütüphanesi çalışmamıza dahil edelim; 

>>> from sklearn import metrics

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science import sklearn analyze sklearn control

13-Doğruluk kontrolü işlemimizi gerçekleştirelim; 

>>> print(metrics.classification_report(y_test,results,target_names=iris.species.unique(), digits=3))

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science import sklearn analyze sklearn control start

Kontrol sonrası (9) ve (11) maddelerdeki değerlerin aynı çıktığı gözlemlenmektedir.

14-1-25 arasındaki elemanları listeleyelim; (Tercihe bağlı) 

>>> k_list = list(range(1,25))

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science parameter list

15-Tercihe bağlı olarak oluşturmuş olduğumuz listemizi görüntüleyelim; (Kontrol edelim)

>>> k_values = dict(n_neighbors=k_list)
       print(k_values.keys()),
       print(k_values.values())

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science parameter list show

16-Kapsamlı analiz için Grid Search kütüphanemizi çalışmamıza dahil edelim;

>>> from sklearn.model_selection import GridSearchCV

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science parameter list grid search

17-Grid Search nesnemizi analiz verilerimize yönelik eğitelim;

>>> grid = GridSearchCV(knn, k_values, cv=5, scoring=’accuracy’)
       grid.fit(iris.drop(‘species’, axis=1), iris.species)

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science parameter list grid search fit set

17-Eğitmiş olduğumuz Grid Search nesnemiz üzerindeki verilerimizi görüntüleyelim;

>>> grid.cv_results_
       grid_table = pd.DataFrame(grid.cv_results_)
       grid_table.head()

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science what train and test data sets train grid

18-Eğitmiş olduğumuz Grid Search nesnemiz üzerindeki ana parametrelerimizi görüntüleyelim;

>>> grid_table_rank =
       grid_table[[‘params’,’mean_test_score’,’std_test_score’,’rank_test_score’]].
             loc[grid_table[‘rank_test_score’]==1].sort_values(by=’std_test_score’, ascending=True)
       grid_table_rank

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science what train and test data sets train grid base parameters

19-Grid Search nesnemiz üzerinden doğruluk değeri ve k parametre değerlerini görüntüleyelim;

>>> print(“{} doğrulundaki en iyi k = {}”.format(grid.best_score_,grid.best_params_))

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science what train and test data sets best score

20-Grid Search nesnemiz üzerinden çapraz doğrulama, standart sapma, en iyi sıra ve k parametre değerlerini görüntüleyelim;

>>> print(“En iyi k değeri için sıra= {}, k = {}, en yüksek doğruluktaki çapraz doğrulama = {}
                ve en düşük standart sapma ={}”.
                   format(grid_table.at[grid.best_index_,’rank_test_score’],grid_table.at[grid.best_index_,’params’],
                           grid_table.at[grid.best_index_,’mean_test_score’],grid_table.at[grid.best_index_,’std_test_score’]))

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science examples validation

21-Analizimiz üzerindeki en iyi sınıflandırıcı parametre değeri ise;

>>> print(“En iyi sınıflandırıcı parametre değeri: {}”.format(grid.best_estimator_))

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science examples validation the best classifier

21-(15) adım üzerinde yer alan listemiz elemanlarımız (komşular) göz önüne alındığında doğruluk değerleri grafik üzerinde görselleştirilirse;

>>> graphic = grid.cv_results_[‘mean_test_score’]
       graphic
       plt.figure(figsize=(10,5))
       plt.plot(k_list,graphic,color=’navy’,linestyle=’dashed’,marker=’o’)
       plt.xlabel(‘K Komşu Numarası’, fontdict={‘fontsize’: 15})
       plt.ylabel(‘Doğruluk’, fontdict={‘fontsize’: 15})
       plt.title(‘K Değeri Komşu Bazlı Doğruluk Grafiği’, fontdict={‘fontsize’: 30})
       plt.xticks(range(0,31,3),)
       plt.show()

python knn k-nearest neighbours k-en yakin komsu microsoft power bi data science examples validation the best classifier graph

En Yakın Komşu algoritmasına yönelik basit veri seti üzerinden bir analiz gerçekleştirdik.
Mevcut algoritma kompleks ve bağlantısı yüksek olan veriler üzerinde çokça tercih edilmektedir.
Elbette ki avantaj ve dezavantajlar yer almaktadır.

Görselleştirme işlemleri için dilerseniz Python üzerinde ki çeşitli kütüphaneleri kullanarak dilerseniz de geçmiş dönemlerde uygulamış olduğumuz Power BI ile görselleştirme (12) çalışmalarından faydalanabilirsiniz. 

Günlük Hayatta Algoritma Uygulama Alanları

  • Bankacılık Sektörü

-Kredi ve Risk Analizleri
-İşletme İflas Tahminlemeleri
-Borsa Analizleri (Alım-Satım İşlemleri)

  • Spesifik Problemler

-Ekolojik Eylem Analizleri
-Biyolojik Analizler
-Kompleks Metin Madenciliği Analizleri
-Farklılaşmış Hastalık Analizleri (İleri Seviye Kanser/Tümör)
-Benzerliğe Dayalı Kayıp Veri Analizleri (Kompleks Seviye)

en çok tercih edilen alanlar veya problemler olarak dile getirilmektedir. 

 

Avantaj Dezavantaj

En Yakın Komşu algoritması avantajları olarak;

1-Eğitim işlemlerinin diğer algoritmalara nazaran daha kolay olması,
(kimi zaman olmaması, ki yok (algoritmada))

2-Süreçlerin ve analizlerin analitik/sayısal olarak takip edilebilir olması,

3-Kompleks ya da karmaşık (Gürültülü) eğitim verilerine karşı etkili olması,

4-Uyarlanabilirliğinin (uygulanabilirliği) kolay olması

dile getirilebilir.

En Yakın Komşu algoritması dezavantajları olarak;

1-İşlem hacmi ve işlem adımı fazla olduğundan dolayı yüksek donanıma ihtiyaç duymaktadır, (maliyet)

2-Yüksek hacimli verilere karşı dirençli olsa da adım ve işlem sayısı fazla olduğundan dolayı zaman almaktadır,

3-Performans adına uygun algoritmanın bulunması kimi zaman dilimlerinde uzun sürmektedir,
(Uzaklık denklemi, parametreler vb.)

dile getirilebilir.

Bu bölümde genel manada Sınıflandırma metoduna ait ve En Yakın Komşu (K-Nearest Neighbours – KNN) yöntemine (algoritmasına) değinmeye çalıştım.

Gelecek yazımda Çok Değişkenli Uyarlamalı Regresyon Analizi (Multivariate Adaptive Regression Splines)

ele almaya çalışacağım.

İyi günler, iyi çalışmalar…

, ,

İlgili Yazılar