Python, Veri Bilimi / 21 Temmuz 2021 / Miraç ÖZTÜRK
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.
Makalede Neler Var ?
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 (Regresyon – Regression) 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ı);
- Euclidean (Öklidyen) Uzaklık hesaplaması,
- Manhattan Uzaklık Hesaplaması,
- Chebyshev Uzaklık Hesaplaması,
- Hamming Uzaklık Hesaplaması,
- Minkowski Uzaklık Hesaplaması,
- Mahalanobis Uzaklık Hesaplaması,
- Haversiene Uzaklık Hesaplaması,
- Levenshtein Uzaklık Hesaplaması,
- Sørensen-Dice Uzaklık Hesaplaması,
- Jacckard Uzaklık Hesaplaması.
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ı;
şeklinde gerçekleştirilir.
Ek detaylar için link üzerinden bilgiler edinebilirsiniz.
Euclidean Uzaklık Hesaplaması temsili görünümü; (Noktasal)
ş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ı;
şeklinde gerçekleştirilir.
Ek detaylar için link üzerinden bilgiler edinebilirsiniz.
Manhattan Uzaklık Hesaplaması temsili görünümü; (Noktasal)
ş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ı;
şeklinde gerçekleştirilir.
Ek detaylar için link üzerinden bilgiler edinebilirsiniz.
Chebyshev Uzaklık Hesaplaması temsili görünümü; (Noktasal)
ş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)
şeklinde (çözüm) gerçekleştirilir.
Ek detaylar için link üzerinden bilgiler edinebilirsiniz.
Hamming Uzaklık hesaplaması temsili görünümü;
ş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ı;
ş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;
şeklinde çözümlenir ve;
ş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)
ş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ı;
şeklinde çözümlenir.
Ek detaylar için link üzerinden bilgiler edinebilirsiniz.
Mahalanobis Uzaklık Hesaplaması temsili görünümü; (Noktasal)
ş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ı;
şeklinde çözümlenir.
Ek detaylar için link üzerinden bilgiler edinebilirsiniz.
Haversine Uzaklık Hesaplaması temsili görünümü; (Noktasal)
ş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)
ş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ı;
şeklinde gerçekleştirilir.
Ek detaylar için link üzerinden bilgiler edinebilirsiniz.
Sørensen-Dice Uzaklık Hesaplaması temsili görünümü; (Algoritmik)
ş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ı;
şeklinde gerçekleştirilir.
Ek detaylar için link üzerinden bilgiler edinebilirsiniz.
Jacckard Uzaklık Hesaplaması temsili görünümü; (Algoritmik)
ş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.
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”)
2-Çalışmamıza dahil ettiğimiz verilerimizin ön izlemesini gerçekleştirelim;
>>> iris.sample(7)
3-Çalışmamıza dahil ettiğimiz verilerimizin değerlerinin ön izlemesini gerçekleştirelim;
>>> pd.value_counts(iris.species)
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)
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())
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
7-Çalışmamıza Sklearn kütüphanesi üzerinden optimizasyon ve ek analizler için paketimizi dahil edelim;
>>> from sklearn.neighbors import KNeighborsClassifier
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)
9-Mevcut yapımız üzerinde ortalama tahmin gerçekleştirelim;
>>> knn.score(X_test,y_test)
10-Test sonuçlarımızı kullanabilmek için bir parametre üzerine atayıp tahminleme gerçekleştirelim;
>>> results = knn.predict(X_test)
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’))
12-Doğruluk kontrolü adına Sklearn Metrics kütüphanesi çalışmamıza dahil edelim;
>>> from sklearn import metrics
13-Doğruluk kontrolü işlemimizi gerçekleştirelim;
>>> print(metrics.classification_report(y_test,results,target_names=iris.species.unique(), digits=3))
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))
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())
16-Kapsamlı analiz için Grid Search kütüphanemizi çalışmamıza dahil edelim;
>>> from sklearn.model_selection import GridSearchCV
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)
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()
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
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_))
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’]))
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_))
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()
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 (1–2) ç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 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…