DEV Community

Cover image for Makine Öğrenme Algoritmalarının Karşılaştırılması...
Ertugrul
Ertugrul

Posted on

Makine Öğrenme Algoritmalarının Karşılaştırılması...

IMPORTANT click here for the article in English

English: https://dev.to/ertugrulmutlu/comparison-of-machine-learning-algorithms-2ag4

Bu yazıda SVM - DecisionTree - KNN algoritmalarını karşılaştıracağız.

Karşılaştıracağımız değerler:

  • Accuracy: Toplam doğru tahminlerin toplam veriye oranıdır. Yani, doğru tahminlerin toplam tahmin sayısına oranıdır.

  • Macro avg precision Score: Her sınıf için hassasiyetin ortalamasıdır. Hassasiyet, doğru pozitif tahminlerin toplam pozitif tahminlere oranıdır. Bu, bir sınıfın ne kadar doğru tanımlandığını gösterir.

  • Macro avg Recall Score: Her sınıf için duyarlılığın ortalamasıdır. Duyarlılık, gerçek pozitif tahminlerin toplam gerçek pozitiflerin sayısına oranıdır. Bu, bir sınıfın ne kadar başarılı bir şekilde tespit edildiğini gösterir.

  • Macro avg F1 Score: Her sınıf için F1 skorunun ortalamasıdır. F1 skoru, hassasiyet ve duyarlılığın harmonik ortalamasıdır. Bu, modelin sınıflandırma yeteneğini tek bir metrikte birleştirir.

  • Weighted avg precision Score: Her sınıfın örnekleme oranına göre ağırlıklı hassasiyetin ortalamasıdır. Bu, her sınıfın önemine göre ağırlıklandırılmış bir hassasiyet ölçüsü sağlar.

  • Weighted avg Recall Score: Her sınıfın örnekleme oranına göre ağırlıklı duyarlılığın ortalamasıdır. Bu, her sınıfın önemine göre ağırlıklandırılmış bir duyarlılık ölçüsü sağlar.

  • Weighted avg F1 Score: Her sınıfın örnekleme oranına göre ağırlıklı F1 skorunun ortalamasıdır. Bu, her sınıfın önemine göre ağırlıklandırılmış bir F1 skoru ölçüsü sağlar.

Öncelikle algoritmaların tanımları.

Tanım yapmak yerine size bunları daha düzgün anlatan kaynak vermeyi daha uygun buldum.


  • KNN (K-Nearest-Neighborn):

KNN Photo

Kaynak:


Video: https://www.youtube.com/watch?v=jlQCcIPQKlA
Makale: https://medium.com/@iamemreyildiz/makine-öğrenimi-için-k-en-yakın-komşu-knn-algoritması-be057dc9ada


  • DT(Decision tree):

Decision Tree Photo

Kaynak:


Video: https://www.youtube.com/watch?v=z_PCJeDOFOk
Makale: https://medium.com/@k.ulgen90/makine-öğrenimi-bölüm-5-karar-ağaçları-c90bd7593010


  • SVM(Support Vector Machine):

SVM Photo

Kaynak:


Video: https://www.youtube.com/watch?v=z_PCJeDOFOk
Makale: https://medium.com/@k.ulgen90/makine-öğrenimi-bölüm-5-karar-ağaçları-c90bd7593010

Şimdi başlayabiliriz..

Öncelikle Kullanacağım Database'e göz atalım

Database özellikleri:


Burada Pandas kütüphanesini kullanarak CSV'imizi inceleyeceğiz.

import pandas as pd
csv = pd.read_csv("glass.csv")
print(csv.head)
Enter fullscreen mode Exit fullscreen mode

Buradaki kodu sırası ile açıklamak gerekirse:

  1. Pandas kütüphanesini import ediyoruz.
  2. Pandas kütüphanesi ile CSV dosyasını okuyoruz.
  3. En son ise CSV dosyasına bir genel bakış atmak için "head" komudunu yazıyoruz.

Bu kodun çıktısı:

Head komutunun çıktısı

Görüldüğü üzere CSV dosyasının içeriği hakkında bize genel bir bilgi sundu. Ayrıca Row ve Column sayısı hakkında da bilgi verdi.

Bu CSV dosyasında:

-214 Row
-10 Column
bulunuyor.


Şimdi hadi Column'ların İsimlerini alalım:

import pandas as pd
csv = pd.read_csv("glass.csv")
print(csv.columns)
Enter fullscreen mode Exit fullscreen mode

Buradaki kodu sırası ile açıklamak gerekirse:

  1. Pandas kütüphanesini import ediyoruz.
  2. Pandas kütüphanesi ile CSV dosyasını okuyoruz.
  3. En son ise CSV dosyasına bir genel bakış atmak için "columns" komudunu yazıyoruz.

Bu kodun çıktısı:

Column kodunun çıktısı

Görüldüğü üzere CSV dosyasının COlumn'larının isimlerini aldık ve en sonra bu verilerin Type'ını öğrendik.

Bu CSV dosyasında:

-RI (Kırılma indisi)
-Na (Sodyum)
-Mg (Magnezyum)
-Al (Alüminyum)
-Si (Silikon)
-K (Potasyum)
-Ca (Kalsiyum)
-Ba (Baryum)
-Fe (Demir)
-Type (Cam tipi)
bulunuyor.

Bu veriler ışığında, camın kırılma indisine ve içerdiği kimyasal maddelere dayanarak farklı cam tiplerinin tanımlanması yapılmıştır.

Note: Daha fazla detayli bilgi için Kaynak siteyi ziyaret edebilirsiniz.

Kaynak

CSV dosyasının indirdiğim site:
https://www.kaggle.com/datasets/uciml/glass


Şimdi Planımıza Geçelim:

Şunları Biliyoruz:

  • CSV dosyalarındaki verilerin Algoritmalarda kullanılması için şekillendirilmesi gerekiyor

-Algortimaların Kütüphane kullanarak yazılması gerekiyor.

-Sonuçlarının grafiksel olarak çıkartılması gerekiyor

Haydi o zaman verileri hazırlama kısmını yapalım.

Verilerin Hazırlanması

Öncelikle Kullanacağım Kütüphaneleri sayalım:

  1. Sklearn
  2. Pandas
  3. Numpy
data = pd.read_csv(self.url, sep=",")
X = np.array(data.drop([columns[len(columns)-1]], axis=1))
y = np.array(data[columns[len(columns)-1]]) 
x_train, x_test, y_train, y_test = sklearn.model_selection.train_test_split(X,y, test_size= 0.2) 
Enter fullscreen mode Exit fullscreen mode

Buradaki kodu sırası ile açıklamak gerekirse:

  1. CSV dosyamızı ',' işareti ile ayırarak okuyoruz. (Bu işlem için PANDAS kütüphanesini kullanıyoruz)
  2. 'X' verisi bizim tahmin etmek istediğimiz (Type oluyor) verinin özelliklerini içeriyor. Bu kod ile 'Type' Column'unu veriler arasında çıkartıyoruz ve Bütün verileri 'Numpy' kütüphanesi kullanarak array yapıyoruz.
  3. 'y' verisi bizim tahmin etmek istediğimiz veri (Yani 'Type'). Bunu aynı 'X' verisi gibi 'Numpy' kütüphanesi kullanarak array yapıyoruz. 4.Son olarak bu verileri test ve train olarak ikiye ayırıyoruz. Bunun sebebi en basit anlatımıyla Train verileri ile algoritmaları eğitmek. Test verileri ile algortimanın doğruluk oranını belirlemek ve aksiyon almak. (Bu oranı test_size komudu ile %20 şeklinde belirledik ama siz dilerseniz değiştirebilirsiniz.)

Note: Daha büyük database'lerde yada daha kompleks Algoritmalarda validation datasınada ihtiyaç duyabilirsiniz ama burada küçük ve bvasit bir uygulama yaptığımız için ihtiyacımız yok.

Evet datalarımız hazır...

Algoritmaların Entegre Edilmesi:

Burada Sklearn kütüphanesi ile algoritmalaramızı entegre edeceğiz.

-KNN

from sklearn.neighbors import KNeighborsClassifier 
KNN = KNeighborsClassifier(n_neighbors=9)
KNN.fit(x_train,y_train) 
Enter fullscreen mode Exit fullscreen mode

Buradaki kodu sırası ile açıklamak gerekirse:

  1. Sklear.neighbors içinden _KNeighborsClassifier _ modülünü çağırıyoruz.
  2. KNN entegre edilir. _n_neighbors _ parametresi ile en yakın kaç komşuya bakılacağı karar verilir. (Bu değer proje ve database'e göre değişebilir.)
  3. .fit komudu ile model x_train ve _y_train _verileri ile eğitilir.

-SVM

from sklearn import svm 
Svm = svm.SVC(kernel=linear)
Svm.fit(x_train,y_train)
Enter fullscreen mode Exit fullscreen mode

Buradaki kodu sırası ile açıklamak gerekirse:

  1. sklearn içinden svm modülünü çağırıyoruz.
  2. Svm içinde Support Vector Classification fonksiyonunu çağırıyoruz.(Kısaca bu fonksiyon Svm altyapısı kullanrak classification yapmanızı sağlıyor.). Hiperparametre olarak (Kernel :'linear', 'poly', 'rbf', 'sigmoid') kullanılabilir.
  3. .fit komudu ile model x_train ve _y_train_verileri ile eğitilir.

-Decision Tree

from sklearn.tree import DecisionTreeClassifier
Dt = DecisionTreeClassifier(random_state=9)
Dt.fit(x_train,y_train)
Enter fullscreen mode Exit fullscreen mode

Buradaki kodu sırası ile açıklamak gerekirse:

  1. sklearn.tree içinden DecisionTreeClassifier modülünü çağırıyoruz.
  2. DecisionTree entegre edilir. random_state hiparametresi ile birlikte ise algoritmanın stabilliği arttırılır.
  3. .fit komudu ile model x_train ve _y_train_verileri ile eğitilir.

Algoritmalarımız entegre ettiğimize göre Görselleştirme ve karşılaştırmaya geçebiliriz.

Görselleştirme ve Karşılaştırma:

Öncelikle Kullanacağım Kütüphaneleri sayalım:

  1. matplotlib Kısaca Matplotlib bir görselleştirme kütüphanesi. Kullanımı basit ve temiz kod yazımına uygun.

Karşılaştırma yapmak için bütün algoritmalarının eğitilmiş olması gerekiyor. Eğitim sonrası kullanacağımız kod:

dt_report =dt.predict_report(3, dt_x_train, dt_x_test, dt_y_train, dt_y_test)
svm_report =Svc.predict_report(3, svc_x_train, svc_x_test, svc_y_train, svc_y_test)
knn_report =Knear.predict_report(3, knn_x_train, knn_x_test, knn_y_train, knn_y_test)
Enter fullscreen mode Exit fullscreen mode

Kısaca yaptığımız şey çok basit predict_report komudu ile istediğmiz değerleri ekrana yazdırabiliyoruz.

Örnek çıktı (İnternetten alınmıştır):

Predict_score Photo

Şimdi karşılaştırmaya geçelim:


-Accuracy

Acc Comp Graph

  1. Decision_Tree >> 0.6976744186046512
  2. KNN >> 0.6511627906976745
  3. SVM >> 0.6511627906976745

Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.

-Macro avg precision Score

Macavg prec Comp Graph

  1. Decision_Tree >> 0.7226495726495727
  2. SVM >> 0.611111111111111
  3. KNN >> 0.5030501089324618

Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.

-Macro avg Recall Score

Macavg recall Comp Graph

  1. Decision_Tree >> 0.6472222222222223
  2. SVM >> 0.5863095238095238
  3. KNN >> 0.4795454545454545

Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.

-Macro avg F1 Score

Macavg F1 Comp Graph

  1. Decision_Tree >> 0.6738576238576238
  2. SVM >> 0.5548611111111111
  3. KNN >> 0.45506715506715506

Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.

-Weighted avg precision Score

Weiavg Prec Comp Graph

  1. Decision_Tree >> 0.7241502683363149
  2. SVM >> 0.6627906976744186
  3. KNN >> 0.6219182246542027

Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.

-Weighted avg Recall Score

Weiavg Recall Comp Graph

  1. Decision_Tree >> 0.6976744186046512
  2. SVM >> 0.6511627906976745
  3. KNN >> 0.6511627906976745

Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.

-Weighted avg F1 Score

Weiavg F1 Comp Graph

  1. Decision_Tree >> 0.7030168797610657
  2. SVM >> 0.6397286821705426
  3. KNN >> 0.6020444671607461

Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.

SONUÇ

Sonuç olarak bu yazımda 3 Makine Öğrenmesi Algoritmasını karşılaştırdık ve elimizdeki Database için en iyisinin Decision Tree olduğuna karar verdik.

Kodlara buradan ulaşabilir ve dilediğiniz gibi değiştirip geliştirebilirsiniz.

-KOD : https://github.com/Ertugrulmutlu/Machine_Learning_Alg_Comp

Eğer ki bir "Öneri-İstek-Soru"'nuz var ise lütfen yorum bırakın yada mail üzerinden bana ulaşın...

Top comments (0)