logo

Destek Vektör Makinesi Algoritması

Destek Vektör Makinesi veya SVM, Sınıflandırma ve Regresyon problemlerinde kullanılan en popüler Denetimli Öğrenme algoritmalarından biridir. Ancak öncelikle Makine Öğrenimindeki Sınıflandırma problemlerinde kullanılır.

DVM algoritmasının amacı, gelecekte yeni veri noktasını kolayca doğru kategoriye koyabilmemiz için n boyutlu uzayı sınıflara ayırabilen en iyi çizgiyi veya karar sınırını oluşturmaktır. Bu en iyi karar sınırına hiperdüzlem adı verilir.

SVM, hiperdüzlemin oluşturulmasına yardımcı olan uç noktaları/vektörleri seçer. Bu uç durumlara destek vektörleri adı verilir ve dolayısıyla algoritmaya Destek Vektör Makinesi adı verilir. Bir karar sınırı veya hiperdüzlem kullanılarak sınıflandırılan iki farklı kategorinin bulunduğu aşağıdaki diyagramı düşünün:

Destek Vektör Makinesi Algoritması

Örnek: DVM, KNN sınıflandırıcısında kullandığımız örnekle anlaşılabilir. Diyelim ki köpeklerin bazı özelliklerine de sahip olan garip bir kedi görüyoruz, dolayısıyla onun kedi mi yoksa köpek mi olduğunu doğru bir şekilde tanımlayabilecek bir model istiyorsak, SVM algoritması kullanılarak böyle bir model oluşturulabilir. Modelimizi öncelikle kedi ve köpeklerin farklı özelliklerini öğrenebilmesi için bol miktarda kedi ve köpek görseli ile eğitecek, ardından bu garip yaratıkla test edeceğiz. Yani destek vektörü bu iki veri (kedi ve köpek) arasında bir karar sınırı oluşturduğundan ve ekstrem durumları (destek vektörleri) seçtiğinden, kedi ve köpeğin ekstrem durumunu görecektir. Destek vektörlerine dayanarak onu bir kedi olarak sınıflandıracaktır. Aşağıdaki diyagramı göz önünde bulundurun:

Destek Vektör Makinesi Algoritması

SVM algoritması şu amaçlarla kullanılabilir: Yüz algılama, görüntü sınıflandırma, metin kategorizasyonu, vesaire.

j e s t

SVM Türleri

SVM iki tipte olabilir:

    Doğrusal SVM:Doğrusal SVM, doğrusal olarak ayrılabilir veriler için kullanılır, yani bir veri kümesi tek bir düz çizgi kullanılarak iki sınıfa sınıflandırılabiliyorsa, bu tür veriler doğrusal olarak ayrılabilir veriler olarak adlandırılır ve sınıflandırıcı, Doğrusal SVM sınıflandırıcı olarak adlandırılır.Doğrusal olmayan SVM:Doğrusal Olmayan SVM, doğrusal olmayan şekilde ayrılmamış veriler için kullanılır; yani bir veri kümesi düz bir çizgi kullanılarak sınıflandırılamıyorsa, bu tür veriler doğrusal olmayan veriler olarak adlandırılır ve kullanılan sınıflandırıcıya Doğrusal Olmayan SVM sınıflandırıcı denir.

SVM algoritmasında Hiperdüzlem ve Destek Vektörleri:

Hiperdüzlem: N boyutlu uzayda sınıfları ayırmak için birden fazla çizgi/karar sınırı olabilir, ancak veri noktalarını sınıflandırmaya yardımcı olacak en iyi karar sınırını bulmamız gerekir. Bu en iyi sınır SVM'nin hiperdüzlemi olarak bilinir.

Hiperdüzlemin boyutları veri kümesinde mevcut olan özelliklere bağlıdır; bu, eğer 2 özellik varsa (resimde gösterildiği gibi), o zaman hiperdüzlemin düz bir çizgi olacağı anlamına gelir. Ve eğer 3 özellik varsa, o zaman hiperdüzlem 2 boyutlu bir düzlem olacaktır.

Her zaman maksimum kenar boşluğuna sahip bir hiperdüzlem oluştururuz, bu da veri noktaları arasındaki maksimum mesafe anlamına gelir.

Destek Vektörleri:

Hiperdüzleme en yakın olan ve hiperdüzlemin konumunu etkileyen veri noktaları veya vektörler Destek Vektörü olarak adlandırılır. Bu vektörler hiperdüzlemi desteklediğinden dolayı Destek vektörü olarak adlandırılır.

SVM nasıl çalışır?

Doğrusal SVM:

DVM algoritmasının çalışması bir örnekle anlaşılabilir. İki etikete (yeşil ve mavi) sahip bir veri kümemiz olduğunu ve veri kümesinin x1 ve x2 olmak üzere iki özelliğe sahip olduğunu varsayalım. Koordinat çiftini (x1, x2) yeşil veya mavi olarak sınıflandırabilen bir sınıflandırıcı istiyoruz. Aşağıdaki görüntüyü göz önünde bulundurun:

Destek Vektör Makinesi Algoritması

Yani 2 boyutlu uzay olduğundan, sadece düz bir çizgi kullanarak bu iki sınıfı kolaylıkla ayırabiliriz. Ancak bu sınıfları ayırabilecek birden fazla satır olabilir. Aşağıdaki görüntüyü göz önünde bulundurun:

Destek Vektör Makinesi Algoritması

Dolayısıyla DVM algoritması en iyi çizgiyi veya karar sınırını bulmaya yardımcı olur; bu en iyi sınır veya bölgeye denir hiperdüzlem . DVM algoritması her iki sınıftan gelen doğruların en yakın noktasını bulur. Bu noktalara destek vektörleri denir. Vektörler ile hiperdüzlem arasındaki mesafeye ne ad verilir? marj . Ve SVM'nin amacı bu marjı maksimuma çıkarmaktır. hiperdüzlem maksimum marja sahip olana denir optimal hiperdüzlem .

Destek Vektör Makinesi Algoritması

Doğrusal Olmayan SVM:

Veriler doğrusal olarak düzenlenmişse onu düz bir çizgi kullanarak ayırabiliriz ancak doğrusal olmayan veriler için tek bir düz çizgi çizemeyiz. Aşağıdaki görüntüyü göz önünde bulundurun:

Destek Vektör Makinesi Algoritması

Dolayısıyla bu veri noktalarını ayırmak için bir boyut daha eklememiz gerekiyor. Doğrusal veriler için x ve y olmak üzere iki boyut kullandık, dolayısıyla doğrusal olmayan veriler için üçüncü boyut z'yi ekleyeceğiz. Şu şekilde hesaplanabilir:

 z=x<sup>2</sup> +y<sup>2</sup> 

Üçüncü boyutun eklenmesiyle örnek uzay aşağıdaki resimdeki gibi olacaktır:

Destek Vektör Makinesi Algoritması

Şimdi SVM veri kümelerini aşağıdaki şekilde sınıflara ayıracak. Aşağıdaki görüntüyü göz önünde bulundurun:

Destek Vektör Makinesi Algoritması

3 boyutlu Uzayda olduğumuz için x eksenine paralel bir düzlem gibi görünüyor. Bunu 2 boyutlu uzayda z=1 ile dönüştürürsek şu şekilde olur:

Destek Vektör Makinesi Algoritması

Dolayısıyla doğrusal olmayan veriler durumunda yarıçap 1'in çevresini elde ederiz.

robot bileşenleri

Destek Vektör Makinesinin Python Uygulaması

Şimdi Python kullanarak SVM algoritmasını uygulayacağız. Burada aynı veri kümesini kullanacağız Kullanıcı bilgisi Lojistik regresyonda ve KNN sınıflandırmasında kullandığımız.

    Veri Ön İşleme adımı

Veri ön işleme adımına kadar kod aynı kalacaktır. Kod aşağıdadır:

 #Data Pre-processing Step # importing libraries import numpy as nm import matplotlib.pyplot as mtp import pandas as pd #importing datasets data_set= pd.read_csv(&apos;user_data.csv&apos;) #Extracting Independent and dependent Variable x= data_set.iloc[:, [2,3]].values y= data_set.iloc[:, 4].values # Splitting the dataset into training and test set. from sklearn.model_selection import train_test_split x_train, x_test, y_train, y_test= train_test_split(x, y, test_size= 0.25, random_state=0) #feature Scaling from sklearn.preprocessing import StandardScaler st_x= StandardScaler() x_train= st_x.fit_transform(x_train) x_test= st_x.transform(x_test) 

Yukarıdaki kodu çalıştırdıktan sonra verileri ön işleme tabi tutacağız. Kod veri kümesini şu şekilde verecektir:

Destek Vektör Makinesi Algoritması

Test setinin ölçeklendirilmiş çıktısı şöyle olacaktır:

Destek Vektör Makinesi Algoritması

DVM sınıflandırıcısını eğitim setine yerleştirme:

Artık eğitim seti SVM sınıflandırıcısına takılacaktır. SVM sınıflandırıcısını oluşturmak için içe aktaracağız SVC gelen sınıf Sklearn.svm kütüphane. Aşağıda bunun kodu verilmiştir:

 from sklearn.svm import SVC # &apos;Support vector classifier&apos; classifier = SVC(kernel=&apos;linear&apos;, random_state=0) classifier.fit(x_train, y_train) 

Yukarıdaki kodda kullanmış olduğumuz çekirdek = 'doğrusal' Burada doğrusal olarak ayrılabilir veriler için SVM oluşturuyoruz. Ancak doğrusal olmayan veriler için bunu değiştirebiliriz. Daha sonra sınıflandırıcıyı eğitim veri setine (x_train, y_train) yerleştirdik.

Çıktı:

 Out[8]: SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0, decision_function_shape=&apos;ovr&apos;, degree=3, gamma=&apos;auto_deprecated&apos;, kernel=&apos;linear&apos;, max_iter=-1, probability=False, random_state=0, shrinking=True, tol=0.001, verbose=False) 

Model performansı değeri değiştirilerek değiştirilebilir. C(Düzenlileştirme faktörü), gama ve çekirdek .

    Test seti sonucunun tahmin edilmesi:
    Şimdi test setinin çıktısını tahmin edeceğiz. Bunun için yeni bir y_pred vektörü oluşturacağız. Aşağıda bunun kodu verilmiştir:
 #Predicting the test set result y_pred= classifier.predict(x_test) 

Y_pred vektörünü aldıktan sonra sonucunu karşılaştırabiliriz. y_pred Ve y_test Gerçek değer ile tahmin edilen değer arasındaki farkı kontrol etmek için.

Çıktı: Aşağıda test setinin tahmininin çıktısı verilmiştir:

Destek Vektör Makinesi Algoritması
    Karışıklık matrisinin oluşturulması:
    Şimdi SVM sınıflandırıcısının performansını, Lojistik regresyon sınıflandırıcısına kıyasla ne kadar yanlış tahmin olduğunu göreceğiz. Karışıklık matrisini oluşturmak için şunları içe aktarmamız gerekir: kafa karışıklığı_matrix sklearn kütüphanesinin işlevi. Fonksiyonu içe aktardıktan sonra onu yeni bir değişken kullanarak çağıracağız. santimetre . Fonksiyon esas olarak iki parametre alır y_true (gerçek değerler) ve y_pred (sınıflandırıcı tarafından hedeflenen değer döndürülür). Aşağıda bunun kodu verilmiştir:
 #Creating the Confusion matrix from sklearn.metrics import confusion_matrix cm= confusion_matrix(y_test, y_pred) 

Çıktı:

Destek Vektör Makinesi Algoritması

Yukarıdaki çıktı görselinde de görebileceğiniz gibi 66+24= 90 doğru tahmin, 8+2= 10 doğru tahmin bulunmaktadır. Dolayısıyla SVM modelimizin Lojistik regresyon modeline göre geliştiğini söyleyebiliriz.

java'da obj nedir
    Eğitim seti sonucunun görselleştirilmesi:
    Şimdi eğitim seti sonucunu görselleştireceğiz, bunun kodu aşağıdadır:
 from matplotlib.colors import ListedColormap x_set, y_set = x_train, y_train x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap((&apos;red&apos;, &apos;green&apos;))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap((&apos;red&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;SVM classifier (Training set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

Çıktı:

Yukarıdaki kodu çalıştırdığımızda çıktıyı şu şekilde elde edeceğiz:

Destek Vektör Makinesi Algoritması

Görüldüğü gibi yukarıdaki çıktı Lojistik regresyon çıktısına benzer görünmektedir. Çıktıda hiperdüzlem olarak düz bir çizgi elde ettik çünkü elimizde sınıflandırıcıda doğrusal bir çekirdek kullandı . Ayrıca yukarıda 2 boyutlu uzay için SVM'deki hiperdüzlemin düz bir çizgi olduğunu da tartışmıştık.

    Test seti sonucunun görselleştirilmesi:
 #Visulaizing the test set result from matplotlib.colors import ListedColormap x_set, y_set = x_test, y_test x1, x2 = nm.meshgrid(nm.arange(start = x_set[:, 0].min() - 1, stop = x_set[:, 0].max() + 1, step =0.01), nm.arange(start = x_set[:, 1].min() - 1, stop = x_set[:, 1].max() + 1, step = 0.01)) mtp.contourf(x1, x2, classifier.predict(nm.array([x1.ravel(), x2.ravel()]).T).reshape(x1.shape), alpha = 0.75, cmap = ListedColormap((&apos;red&apos;,&apos;green&apos; ))) mtp.xlim(x1.min(), x1.max()) mtp.ylim(x2.min(), x2.max()) for i, j in enumerate(nm.unique(y_set)): mtp.scatter(x_set[y_set == j, 0], x_set[y_set == j, 1], c = ListedColormap((&apos;red&apos;, &apos;green&apos;))(i), label = j) mtp.title(&apos;SVM classifier (Test set)&apos;) mtp.xlabel(&apos;Age&apos;) mtp.ylabel(&apos;Estimated Salary&apos;) mtp.legend() mtp.show() 

Çıktı:

Yukarıdaki kodu çalıştırdığımızda çıktıyı şu şekilde elde edeceğiz:

Destek Vektör Makinesi Algoritması

Yukarıdaki çıktı görüntüsünde de görebileceğimiz gibi SVM sınıflandırıcısı kullanıcıları iki bölgeye (Satın Alınan veya Satın Alınmayan) ayırmıştır. SUV'u satın alan kullanıcılar kırmızı dağılım noktalarının bulunduğu kırmızı bölgede yer alıyor. SUV'u satın almayan kullanıcılar ise yeşil dağılım noktalarının bulunduğu yeşil bölgede bulunuyor. Hiperdüzlem, iki sınıfı Satın Alınan ve Satın Alınmayan değişkenlere ayırmıştır.