Makine Öğrenme Algoritmalarının Karşılaştırılması...
Tags: python, knn, svm, decisiontree
Published: 2024-03-10 14:01:18

##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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/q9f1s2adck80dinz9hjm.png)

## 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fe7bee9yk6qg42xf12ol.png)

## 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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/t9zlusn7z0l4xjqpzgi0.png)

## 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:

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ı](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/lu7aiz3tkshm0q99x0rz.PNG)

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:

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ı](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/e0zkp0ksed6mkrgdnjmt.PNG)

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

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/a81v5sv1zmorgoizuyxy.png)

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

---

-Accuracy



![Acc Comp Graph](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/uzbv0569maulfu8j1060.PNG)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/k3thmfhwo2g2j62uuwz2.PNG)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ksokbz1hr5b4ocjrgjf1.PNG)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/ekw9mvv5j65p9stcfx95.png)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/htd5mdku2uph7v8z1wch.PNG)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kayyqguycsv2sg0phsc3.PNG)

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](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fdtxr96qmzidc58rf1qg.png)

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...