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):
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):
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):
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)
Buradaki kodu sırası ile açıklamak gerekirse:
- Pandas kütüphanesini import ediyoruz.
- Pandas kütüphanesi ile CSV dosyasını okuyoruz.
- En son ise CSV dosyasına bir genel bakış atmak için "head" komudunu yazıyoruz.
Bu kodun çı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)
Buradaki kodu sırası ile açıklamak gerekirse:
- Pandas kütüphanesini import ediyoruz.
- Pandas kütüphanesi ile CSV dosyasını okuyoruz.
- En son ise CSV dosyasına bir genel bakış atmak için "columns" komudunu yazıyoruz.
Bu kodun çı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:
- Sklearn
- Pandas
- 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)
Buradaki kodu sırası ile açıklamak gerekirse:
- CSV dosyamızı ',' işareti ile ayırarak okuyoruz. (Bu işlem için PANDAS kütüphanesini kullanıyoruz)
- '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.
- '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)
Buradaki kodu sırası ile açıklamak gerekirse:
- Sklear.neighbors içinden _KNeighborsClassifier _ modülünü çağırıyoruz.
- 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.)
- .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)
Buradaki kodu sırası ile açıklamak gerekirse:
- sklearn içinden svm modülünü çağırıyoruz.
- 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.
- .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)
Buradaki kodu sırası ile açıklamak gerekirse:
- sklearn.tree içinden DecisionTreeClassifier modülünü çağırıyoruz.
- DecisionTree entegre edilir. random_state hiparametresi ile birlikte ise algoritmanın stabilliği arttırılır.
- .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:
- 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)
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):
Şimdi karşılaştırmaya geçelim:
-Accuracy
- Decision_Tree >> 0.6976744186046512
- KNN >> 0.6511627906976745
- SVM >> 0.6511627906976745
Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.
-Macro avg precision Score
- Decision_Tree >> 0.7226495726495727
- SVM >> 0.611111111111111
- KNN >> 0.5030501089324618
Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.
-Macro avg Recall Score
- Decision_Tree >> 0.6472222222222223
- SVM >> 0.5863095238095238
- KNN >> 0.4795454545454545
Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.
-Macro avg F1 Score
- Decision_Tree >> 0.6738576238576238
- SVM >> 0.5548611111111111
- KNN >> 0.45506715506715506
Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.
-Weighted avg precision Score
- Decision_Tree >> 0.7241502683363149
- SVM >> 0.6627906976744186
- KNN >> 0.6219182246542027
Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.
-Weighted avg Recall Score
- Decision_Tree >> 0.6976744186046512
- SVM >> 0.6511627906976745
- KNN >> 0.6511627906976745
Burada En yüksek tahmin olanı olan algoritma Decision Tree oldu.
-Weighted avg F1 Score
- Decision_Tree >> 0.7030168797610657
- SVM >> 0.6397286821705426
- 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)