Mesin Vektor Dukungan (SVM)

Nov 25 2022
Pendahuluan Support Vector Machine adalah salah satu algoritma pembelajaran mesin yang paling populer. Ini tidak hanya digunakan untuk klasifikasi, tetapi juga untuk masalah regresi.
SVM (Ref. geospasialis.com)

pengantar

Support Vector Machine adalah salah satu algoritma pembelajaran mesin yang paling populer. Ini tidak hanya digunakan untuk klasifikasi, tetapi juga untuk masalah regresi. Namun sebagian besar, penggunaannya telah diamati dalam masalah Klasifikasi di bidang pembelajaran mesin. Banyak orang menyukai mesin support vector karena mesin ini menawarkan akurasi yang luar biasa sekaligus menggunakan daya pemrosesan yang lebih sedikit. Support Vector Machine memisahkan data melalui hyperplane dan titik data baru dimasukkan ke dalam kategori yang paling sesuai. Ini adalah tujuan dasar dari Support Vector Machine. Hyperplane ini juga disebut sebagai batas keputusan dari Support Vector Machine. Ada berbagai hyperplane berbeda yang dapat digunakan untuk membagi dua kelas titik data. Menemukan pesawat dengan margin terbesar — ​​yaitu,

Contoh

Jika kita menginginkan model yang dapat membedakan kucing dan anjing dengan benar, misalkan kita mengamati kucing yang tidak biasa yang juga menyerupai anjing. Kami dapat membangun model seperti itu dengan memanfaatkan algoritma SVM. Sebelum mengujinya dengan hewan aneh ini, kami akan melatih model kami terlebih dahulu dengan beberapa foto kucing dan anjing agar dapat mengenal berbagai atribut kucing dan anjing. Hasilnya, kasus kucing dan anjing yang ekstrim akan terlihat oleh vektor pendukung karena menarik batas penilaian antara dua set data ini (kucing dan anjing). Vektor pendukung akan digunakan untuk mengkategorikannya sebagai kucing.

Gambar Contoh SVM (ref: www.javatpoint.com )

Jenis SVM

L inear SVM : Istilah "data yang dapat dipisahkan secara linier" mengacu pada data yang dapat dibagi menjadi dua kelompok hanya dengan menggunakan satu garis lurus. SVM Linear digunakan untuk mengklasifikasikan data tersebut, dan pengklasifikasi yang digunakan dikenal sebagai pengklasifikasi SVM Linear.

Gambar. Linear SVM (Ref. www.javatpoint.com)

N on-linear SVM : Non-Linear SVM digunakan untuk data yang dipisahkan secara non-linear, artinya jika suatu dataset tidak dapat diklasifikasikan dengan menggunakan garis lurus, maka data tersebut disebut sebagai data non-linear dan classifier yang digunakan disebut sebagai Non-Linear SVM. -pengklasifikasi SVM linier.

Gambar. SVM non linier (Ref. www.javatpoint.com)

Bekerja

SVM mengkategorikan titik data bahkan ketika mereka tidak dapat dipisahkan secara linear dengan memetakan data ke ruang fitur dimensi tinggi. Setelah pemisah antara kategori diidentifikasi, data dikonversi untuk mengaktifkan representasi hyperplane dari pemisah. Grup tempat record baru harus dimiliki kemudian dapat diprediksi menggunakan karakteristik data baru.

Fungsi Biaya dan Pembaruan Gradien

Tujuan dari metode SVM adalah untuk meningkatkan jarak antara titik data dan hyperplane. Kerugian berengsel adalah fungsi kerugian yang membantu memaksimalkan margin.

Fig. Fungsi kerugian engsel (fungsi di kiri dapat direpresentasikan sebagai fungsi di kanan)

Jika nilai yang diproyeksikan dan nilai sebenarnya memiliki tanda yang sama, tidak ada biaya. Jika tidak, selanjutnya kita tentukan nilai kerugiannya. Fungsi biaya juga menerima parameter regularisasi dari kami. Tujuan parameter regularisasi adalah untuk mencapai keseimbangan antara maksimalisasi margin dan kerugian. Fungsi biaya muncul sebagai berikut setelah parameter regularisasi ditambahkan.

Ara. Fungsi kerugian untuk SVM

Sekarang kita memiliki fungsi kerugian, kita dapat menemukan gradien dengan mengambil turunan parsial sehubungan dengan bobot. Kita dapat memodifikasi bobot kita menggunakan gradien.

Gambar. Gradien

Kita hanya perlu memperbarui gradien dari parameter regularisasi jika tidak ada kesalahan klasifikasi, yaitu saat model kita memprediksi kelas titik data kita dengan benar.

Gbr. Pembaruan Gradien — Tidak ada kesalahan klasifikasi

Untuk melakukan pembaruan gradien saat ada kesalahan klasifikasi, atau saat model kami salah memprediksi kelas titik data, kami menyertakan kerugian bersama dengan parameter regularisasi.

Gambar. Pembaruan Gradien — Kesalahan klasifikasi

Contoh Cuplikan Program

Mengimpor Perpustakaan

import numpy as np
import matplotlib.pyplot as plt
from sklearn import datasets
from sklearn.model_selection import train_test_split

class SVM:
    def __init__(self, learning_rate=0.0001, lambda_param=0.001, n_iters=10000):
        self.weights = None
        self.bias =  None
        self.lr = learning_rate
        self.lambda_param = lambda_param
        self.n_iters = n_iters
    def fit(self,X,y):
        n_samples, n_features = X.shape
        
        y1 = np.where(y <= 0, -1, 1)
        
        self.weights = np.zeros(n_features)
        self.bias = 0
        for i in range(self.n_iters):
            for idx, x_i in enumerate(X):
                condition = y1[idx] * (np.dot(x_i, self.weights) - self.bias) >= 1
                if condition:
                    self.weights -= self.lr * (2 * self.lambda_param * self.weights)
                else:
                    self.weights -= self.lr * (2 * self.lambda_param * self.weights - np.dot(x_i, y1[idx]))
                    self.bias -= self.lr * y1[idx]
        
    def predict(self, X):
        approx = np.dot(X, self.weights) - self.bias
        return np.sign(approx)

def accuracy(y_true,y_pred):
    acc = np.sum(y_true == y_pred)/len(y_true)
    return acc
X, y =  datasets.make_blobs(n_samples=10, n_features=2, centers=2, cluster_std=1.05, random_state=40)
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,random_state=42)
y = np.where(y == 0, -1, 1)
clf = SVM()
clf.fit(X_train,y_train)
predict = clf.predict(X_test)
svm_acc = accuracy(y_test,predict)
print('Accuracy:',svm_acc)
print(f'''
     Final Weight:{clf.weights}
     Final Bias:{clf.bias}
     ''')

Bobot Akhir:[0,34494241 0,1443094 ]
Bias Akhir:-0,012899999999999977

Visualisasi

def visualize_svm():
    def get_hyperplane_value(x, w, b, offset):
        return (-w[0] * x + b + offset) / w[1]
    fig = plt.figure()
    ax = fig.add_subplot(1,1,1)
    plt.scatter(X[:,0], X[:,1], marker='x',c=y)

    x0_1 = np.amin(X[:,0])
    x0_2 = np.amax(X[:,0])

    x1_1 = get_hyperplane_value(x0_1, clf.weights, clf.bias, 0)
    x1_2 = get_hyperplane_value(x0_2, clf.weights, clf.bias, 0)

    x1_1_m = get_hyperplane_value(x0_1, clf.weights, clf.bias, -1)
    x1_2_m = get_hyperplane_value(x0_2, clf.weights, clf.bias, -1)

    x1_1_p = get_hyperplane_value(x0_1, clf.weights, clf.bias, 1)
    x1_2_p = get_hyperplane_value(x0_2, clf.weights, clf.bias, 1)

    ax.plot([x0_1, x0_2],[x1_1, x1_2], 'b--')
    ax.plot([x0_1, x0_2],[x1_1_m, x1_2_m], 'k')
    ax.plot([x0_1, x0_2],[x1_1_p, x1_2_p], 'k')

    x1_min = np.amin(X[:,1])
    x1_max = np.amax(X[:,1])
    ax.set_ylim([x1_min-3,x1_max+3])

    plt.show()

visualize_svm()

      
                
Fig. Output of SVM

Deteksi wajah — SVMc mengklasifikasikan bagian gambar sebagai wajah dan non-wajah dan membuat batas persegi di sekeliling wajah.

Kategorisasi teks dan hiperteks — SVM mendukung model induktif dan transduktif untuk klasifikasi teks dan hiperteks. Untuk mengklasifikasikan artikel ke dalam kelompok yang berbeda, mereka memerlukan data pelatihan. Ini mengklasifikasikan berdasarkan skor yang diperoleh dan kemudian membandingkan dengan nilai ambang batas.
Klasifikasi gambar — SVM meningkatkan akurasi pencarian untuk klasifikasi gambar. Dibandingkan dengan strategi pencarian berbasis kueri konvensional, strategi ini menawarkan akurasi yang lebih tinggi.
Klasifikasi protein dan klasifikasi kanker adalah dua contoh bioinformatika. SVM digunakan untuk mengklasifikasikan gen, pasien menurut gen mereka, dan masalah biologis lainnya.
Terapkan algoritme SVM untuk deteksi homologi jarak jauh protein dan deteksi lipatan protein.

Kesimpulan

Support Vector Machine adalah algoritme yang kuat untuk klasifikasi dalam Machine learning. Meskipun dapat digunakan untuk masalah regresi juga, kami menyarankan untuk menggunakannya terutama untuk tujuan klasifikasi. Ini dapat digunakan untuk data linier atau non-linier dan berfungsi dengan baik. Namun, ini adalah algoritma pembelajaran yang diawasi sehingga membutuhkan data berlabel. Ini bekerja paling baik pada kumpulan data yang lebih kecil daripada yang kompleks.

Referensi

Mendukung Mesin Vektor

Tugas Rumah untuk Inferensi Statistik (SI) oleh mahasiswa Kecerdasan Buatan dan Ilmu Data (AI&DS), Institut Teknologi Vishwakarma, Pune.

Disiapkan oleh:-

  1. Ajinkya Mahajan
  2. Aditya Bodhankar
  3. Riya Dhakalkar
  4. Diksa Prasad
  5. Sivani Mahajan