Makine Öğrenmesi - Sınıflandırma Algoritmaları

Destek Vektör Sınıflandırması (Support Vector Classification)

Yayın tarihi :16-Oca-22
Bölüm kodlarını ve/veya veri setlerini indir.

Destek Vektör Sınıflandırması (Support Vector Classification - SVC), Support Vector Machines (Destek Vektör Makineleri - SVMs)'nin sınıflandırma projelerinde kullanılmak üzere geliştirilmiş bir algoritmadır.

SVMs, eğitim verilerini uzayda geniş bir boşlukla kategorilere ayrılmış noktalar olarak temsil eden bir sınıflandırıcıdır. Daha sonra bu noktaların hangi kategoriye gireceğini ve hangi alana ait olacağını tahmin ederek uzaya yeni noktalar ekler. Karar işlevinde eğitim noktalarının bir alt kümesini kullanır, bu nedenle bellek açısından da verimlidir. Direkt olarak olasılık sağlamamaları dezavantajı olarak sayılabilir.

SVM'ler hem sınıflandırma projelerinde hemde regresyon modellerinde kullanılabilir. Sınıflandırma projelerinde daha başarılı çalışmaktadır.

 Sınıflandırma projelerinde kullanmak için "Support Vector Classification" kütüphanesinin içe aktarılması gerekmektedir.

from sklearn.svm import SVC

Söz dizimi: SVC(*, C=1.0, kernel='rbf', degree=3, gamma='scale', coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=- 1, decision_function_shape='ovr', break_ties=False, random_state=None)

  • kernel, algoritmada kullanılacak yöntem türünü temsil eder. ‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’ olmak üzere 5 değer alabilir. Default olarak da rbf bulunmaktadır.

Örnek-1: Titanic veri seti üzerinden, survived sütununa(hayatta kalıp/kalmadığı) "SVC" algoritmasını uygulayalım.

import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
%matplotlib inline
import warnings
warnings.filterwarnings("ignore")

from sklearn.model_selection import train_test_split

from sklearn.metrics import accuracy_score,precision_score,recall_score,f1_score
from sklearn.metrics import confusion_matrix,classification_report

from sklearn.svm import SVC

Keşifsel Veri Analizi EDA

#Veri seti okunur
df=sns.load_dataset("titanic")
df.head()

Çıktı:

# Veri seti hakkında bilgi 
df.info()

Çıktı:

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 891 entries, 0 to 890
Data columns (total 15 columns):
 #   Column       Non-Null Count  Dtype   
---  ------       --------------  -----   
 0   survived     891 non-null    int64   
 1   pclass       891 non-null    int64   
 2   sex          891 non-null    object  
 3   age          714 non-null    float64 
 4   sibsp        891 non-null    int64   
 5   parch        891 non-null    int64   
 6   fare         891 non-null    float64 
 7   embarked     889 non-null    object  
 8   class        891 non-null    category
 9   who          891 non-null    object  
 10  adult_male   891 non-null    bool    
 11  deck         203 non-null    category
 12  embark_town  889 non-null    object  
 13  alive        891 non-null    object  
 14  alone        891 non-null    bool    
dtypes: bool(2), category(2), float64(2), int64(4), object(5)
memory usage: 80.7+ KB
#Veri setinde boş elemanların toplamı
df.isnull().sum()

Çıktı:

survived         0
pclass           0
sex              0
age            177
sibsp            0
parch            0
fare             0
embarked         2
class            0
who              0
adult_male       0
deck           688
embark_town      2
alive            0
alone            0
dtype: int64

Boş değişkenler olduğundan dolayı veri seti üzerinde temizleme işlemi yapılır.

# Veri seti temizleme

#age sütununda 177 tane boş alan olduğundan, ortalama değer ile boş alanları dolduralım.
df.age.fillna(df.groupby("sex")["age"].transform("mean"),inplace=True)

#embarked gemiye binilen yerin kısaltması 2 tane eksik alan olduğundan onlar en çok olan değerle doldurulabilir.
df.embarked.fillna(df.embarked.mode()[0],inplace=True)

#class ve pclass değerleri birbirleri ile aynı olduğundan class sütununu silelim
del df["class"]

#deck(güverte) alanında da 688 boş alan var,203 alan doludur. 
#Önem derecesine bağlı olarak silinebilir veya en çok değerle doldurulabilir. 
#Değerinin fazla olmadığını düşünerek ilgili sütunu silelim.
del df["deck"]

#alive değerleri surivived tahmin sütununun tekrarı olduğundan silinebilir.
del df["alive"]

#alone değerleri 0 ve 1 olarak değiştirilebilir.
df.alone=df.alone.map(lambda x:1 if x==True else 0)

#embarked sütunu ile embark_town sütun değerlerinin kısaltması olduğundan embark_town kaldırılabilir
del df["embark_town"]

#son durumda veri setinden rastgele değerlere baklım
df.sample(5)

Çıktı:

#survived sütunu eleman sayıları
df.survived.value_counts()

Çıktı:

0    549
1    342
Name: survived, dtype: int64
#Veri seti açıklamaları
df.describe()

Çıktı:


#Sütunların birbirleri ile korelasyonu
df.corr()

Çıktı:

#Korelasyon görüntülenmesi
sns.heatmap(df.corr(),annot=True)

Çıktı:


Model Oluşturma İşlemleri

#x(bağımsız değişkenler) ve y(hedef/tahmin değişkeni) ataması yapılır.
x,y=df.drop("survived",axis=1),df[["survived"]]

#object değerler olduğu için get_dummies işlemi yapılır
x=pd.get_dummies(x,drop_first=True)

#train ve test verileri ayrılır
x_train,x_test,y_train,y_test=train_test_split(x,y,test_size=0.2,random_state=13)
x_train.shape,x_test.shape,y_train.shape,y_test.shape

Çıktı:

((712, 12), (179, 12), (712, 1), (179, 1))
#SVC ataması yapılır
svc=SVC()

#Model eğitme işlemi
svc.fit(x_train,y_train)

#x_test verilerini tahminleme işlemi
predict_svc=svc.predict(x_test)
confusion_matrix(y_test,predict_svc)

Çıktı:

array([[105,   5],
       [ 48,  21]], dtype=int64)
#confusion_matrix değerlerinin grafikselleştirmesi
sns.heatmap(confusion_matrix(y_test,predict_svc),annot=True,linewidths=2)

Çıktı:

 
#Sınıflandırma raporu
print(classification_report(y_test,predict_svc))

Çıktı:

              precision    recall  f1-score   support

           0       0.69      0.95      0.80       110
           1       0.81      0.30      0.44        69

    accuracy                           0.70       179
   macro avg       0.75      0.63      0.62       179
weighted avg       0.73      0.70      0.66       179

Sınıflandırma raporunda da görüldüğü gibi SVC algoritması ile girilen değerlere göre survived sütununda bulunan hayatta kalıp kalmama durumunu doğru tahmin etme yüzdesi: accuracy değeri göz önüne alınırsa %70 olarak bulundu.

Paylaş:

Yorum Yap (*Yorumunuza kod eklemek isterseniz Kod Parçacığı Ekle butonuna tıklayarak ekleyebilirsiniz.)

Yorumlar

Henüz hiç yorum yapılmamış, ilk yorum yapan sen ol.