Mesin Vektor Dukungan (SVM)

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

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.

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.
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.
Sekarang kita memiliki fungsi kerugian, kita dapat menemukan gradien dengan mengambil turunan parsial sehubungan dengan bobot. Kita dapat memodifikasi bobot kita menggunakan 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.
Untuk melakukan pembaruan gradien saat ada kesalahan klasifikasi, atau saat model kami salah memprediksi kelas titik data, kami menyertakan kerugian bersama dengan parameter regularisasi.
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 VektorTugas Rumah untuk Inferensi Statistik (SI) oleh mahasiswa Kecerdasan Buatan dan Ilmu Data (AI&DS), Institut Teknologi Vishwakarma, Pune.
Disiapkan oleh:-
- Ajinkya Mahajan
- Aditya Bodhankar
- Riya Dhakalkar
- Diksa Prasad
- Sivani Mahajan