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

Mirac Öztürk
10 min readJul 24, 2021

--

python classification analyze knn k nearest neighbours  en yakın komsu algorithm

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.

KNN (K-Nearest Neighbours, K-En Yakın Komşu) Algoritması Nedir ?

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ı

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ı;

python classification analyze knn k nearest neighbours euclidean distance formula

şeklinde gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

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

python classification analyze knn k nearest neighbours euclidean distance formula

şeklindedir.

Manhattan Uzaklık Hesaplaması

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ı;

python classification analyze knn k nearest neighbours manhattan distance formula

şeklinde gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

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

python classification analyze knn k nearest neighbours manhattan distance formula

şeklindedir.

Chebyshev Uzaklık Hesaplaması

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ı;

python classification analyze knn k nearest neighbours chebyshev distance formula

şeklinde gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

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

python classification analyze knn k nearest neighbours chebyshev distance formula

şeklindedir.

Hamming Uzaklık Hesaplaması

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)

python classification analyze knn k nearest neighbours hamming distance formula

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

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

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

python classification analyze knn k nearest neighbours hamming distance formula

şeklindedir.

Minkowski Uzaklık Hesaplaması

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ı;

python classification analyze knn k nearest neighbours minkowski distance 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;
python classification analyze knn k nearest neighbours minkowski distance formula

şeklinde çözümlenir ve;

python classification analyze knn k nearest neighbours minkowski distance formula

ş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)

python classification analyze knn k nearest neighbours minkowski distance formula

şeklindedir.

Mahalanobis Uzaklık Hesaplaması

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ı;

python classification analyze knn k nearest neighbours mahalanobis distance formula

şeklinde çözümlenir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

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

python classification analyze knn k nearest neighbours mahalanobis distance formula

şeklindedir.

Haversiene Uzaklık Hesaplaması

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ı;

python classification analyze knn k nearest neighbours haversiene distance formula

şeklinde çözümlenir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

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

python classification analyze knn k nearest neighbours haversiene distance formula

şeklindedir.

Levenshtein Uzaklık Hesaplaması

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)

python classification analyze knn k nearest neighbours levenshtein distance formula

şeklinde gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

Sørensen-Dice Katsayısı Uzaklık Hesaplaması

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ı;

python classification analyze knn k nearest neighbours sørensen dice distance 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)

python classification analyze knn k nearest neighbours sørensen dice distance formula

şeklindedir.

Jacckard İndeksi Uzaklık Hesaplaması

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ı;

python classification analyze knn k nearest neighbours jacckard index distance formula

şeklinde gerçekleştirilir.

Ek detaylar için link üzerinden bilgiler edinebilirsiniz.

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

python classification analyze knn k nearest neighbours jacckard index 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.

python classification analyze knn k nearest neighbours iris data set example

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 classification analyze knn k nearest neighbours iris data set import library pandas seaborn matplotlib scikit learn

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

>>> iris.sample(7)

python classification analyze knn k nearest neighbours iris data set preview

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

>>> pd.value_counts(iris.species)

python classification analyze knn k nearest neighbours iris data set predict

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 classification analyze knn k nearest neighbours iris data set train

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 classification analyze knn k nearest neighbours iris data set train

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 classification analyze knn k nearest neighbours iris data set train and test

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

>>> from sklearn.neighbors import KNeighborsClassifier

python classification analyze knn k nearest neighbours iris data set classifier

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 classification analyze knn k nearest neighbours iris data set classifier fitting

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

>>> knn.score(X_test,y_test)

python classification analyze knn k nearest neighbours iris data set classifier fitting score

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

>>> results = knn.predict(X_test)

python classification analyze knn k nearest neighbours iris data set classifier fitting score new parameter

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 classification analyze knn k nearest neighbours iris data set classifier fitting after new preview

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

>>> from sklearn import metrics

python classification analyze knn k nearest neighbours iris data set classifier fitting import scikit learn

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

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

python classification analyze knn k nearest neighbours iris data set classification

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 classification analyze knn k nearest neighbours iris data set classification

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 classification analyze knn k nearest neighbours iris data set classification

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

>>> from sklearn.model_selection import GridSearchCV

python classification analyze knn k nearest neighbours iris data set classification scikit learn analyze

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 classification analyze knn k nearest neighbours iris data set classification fitting

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 classification analyze knn k nearest neighbours iris data set preview neighbours

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 classification analyze knn k nearest neighbours iris data set classification last table preview

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 classification analyze knn k nearest neighbours iris data set classification last table grid format

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 classification analyze knn k nearest neighbours iris data set classification last accurcy score

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 classification analyze knn k nearest neighbours iris data set class

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 classification analyze knn k nearest neighbours iris data set classification visual

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…

--

--

Mirac Öztürk
Mirac Öztürk

Written by Mirac Öztürk

Data Scientist + Mathematician / Coder — Gamer miracozturk.com

No responses yet