Support Vector Machine (SVM) Pendahuluan – Pembelajaran Mesin | oleh Menuju Tim AI | Apr, 2021

Dalam contoh khusus yang telah kami pertimbangkan ini, kami mengharapkan keluaran dari persamaan pengklasifikasi menjadi bilangan positif yang menunjukkan titik data milik kelas positif atau bilangan negatif yang menunjukkan titik data milik kelas negatif. Jika ada titik yang tepat pada batas keputusan, maka keluaran dari pengklasifikasi akan menjadi nol, dan karenanya, persamaan batas keputusan adalah:

Gambar 6: Persamaan batas keputusan.

Demikian pula, persamaan pengklasifikasi untuk hyperplanes marjinal:

Gambar 7: Persamaan untuk hyperplanes marginal.

Jangan percaya begitu saja. Kami akan melanjutkan dan mendapatkan mengapa output dari persamaan tersebut positif atau negatif.

Gambar 8: Penurunan representasi persamaan.

Pertimbangkan masalah di atas di mana batas keputusan melewati titik asal dan karenanya intersep adalah nol dan kemiringannya +1. Satu titik data di setiap sisi bidang-hiper mewakili kelas positif dan negatif. Mengganti nilai-nilai dalam persamaan bidang-hiper:

Gambar 9: Substitusi nilai dalam persamaan bidang-hiper.

Titik mana pun di bawah bidang-hiper akan selalu positif, dan di atas bidang-hiper akan bernilai negatif.

Selanjutnya, margin harus dimaksimalkan untuk menemukan batasan keputusan yang optimal. Pertimbangkan vektor dukungan negatif sebagai titik x1 dan vektor dukungan positif sebagai titik x2. Margin hanyalah perbedaan antara x1 dan x2. Mari kita sampai pada persamaan ini dengan bantuan menyelesaikan persamaan linier. Secara matematis, kita memiliki dua persamaan dengan dua variabel yang tidak diketahui (x1 dan x2). Untuk menemukan yang tidak diketahui, kurangi satu persamaan dari persamaan lainnya.

Gambar 10: Menemukan yang tidak diketahui.

Untuk mencari x1-x2, w harus dikirim ke sisi kiri persamaan, yang menghasilkan 2 dari w. Telah diketahui bahwa w adalah vektor, dan vektor tidak dapat dibagi secara langsung seperti nilai skalar. Persamaannya adalah membagi kedua sisi dengan panjang w, yaitu besarnya norma w.

Gambar 11: Besarnya norma w.

Ketika w dibagi dengan bentuk normalnya, ia masih menunjuk ke arah yang sama, tetapi besarnya akan menjadi 1 unit yang setara dengan skalar 1. Oleh karena itu,

Gambar 12: Besaran 1 setara dengan skalar 1.

Sekarang kita telah sampai pada persamaan untuk margin, itu dianggap sebagai fungsi pengoptimalan yang perlu dimaksimalkan menggunakan algoritma pengoptimalan seperti penurunan gradien. Algoritma optimasi bekerja paling baik ketika menemukan minimum lokal, oleh karena itu untuk meringankan masalah, meminimalkan kebalikan dari x1-x2 dapat digunakan sebagai fungsi optimasi, yang merupakan norma w di atas 2.

Mungkin juga model SVM dapat memiliki beberapa persentase kesalahan, artinya, kesalahan klasifikasi data baru, dan itu harus diintegrasikan ke dalam fungsi pengoptimalan kami, di mana Ci menunjukkan jumlah titik kesalahan, dengan kata lain, jumlah kesalahan klasifikasi titik data dan penjumlahan jarak antara bidang hiper marjinal dan titik data yang salah diklasifikasikan.

Peringatan Terminologi

1. Hard Margin: Margin yang tidak toleran terhadap kesalahan apa pun dikenal sebagai margin keras. Ini sensitif terhadap pencilan, dan pencilan tunggal dapat memengaruhi batas keputusan.

2. Margin Lembut: Margin yang dapat mempertimbangkan beberapa persentase kesalahan dikenal sebagai margin lunak. Tidak sensitif terhadap pencilan.

Gambar 13: Hard margin dan soft margin Gambar 14: Fungsi akhir.

Ringkasan:

Tidak wajib untuk memahami matematika sepenuhnya. Tidak apa-apa jika Anda tidak bisa mengikuti derivasi. Pada dasarnya, penting untuk diketahui bahwa SVM membuat hyperplane yang bertindak sebagai batas keputusan untuk mengklasifikasikan titik data, dan untuk menemukan batas yang tepat, dipertimbangkan dua hyperplanes di mana jarak antara keduanya harus maksimum.

Kernel SVM

SVM mudah dilakukan saat membuat bidang-hiper untuk titik data yang dapat dipisahkan secara linier. Namun, ini jauh lebih menantang ketika data dapat dipisahkan secara non-linier. Seperti yang telah dibahas, kernel SVM membantu dalam mengubah titik data non-linear yang dapat dipisahkan berdimensi rendah menjadi titik data yang dapat dipisahkan secara linier berdimensi tinggi. Ada tiga kernel SVM yang terkenal:

Fungsi Dasar Radial Polinomial (RBF) Sigmoid

Mari kita bangun berdasarkan intuisi tentang cara kerja kernel dengan mengonversi data 1-d yang tidak dapat dipisahkan secara linier menjadi data yang dapat dipisahkan secara linier 2-d.

Gambar 15: Konversi kernel.

Perhatikan poin data di atas, dan ini adalah contoh klasifikasi biner (1 dan 0). Tidak mungkin menggambar garis linier yang dapat memisahkan kedua kelas. Menerapkan transformasi pada setiap titik akan mengubah titik data 1-hari menjadi 2-hari, membantu membangun batasan keputusan. Di sini, fungsi transformasi menjadi:

Gambar 16: Fungsi transportasi.

Artinya, kuadratkan setiap titik data dan plot hasilnya sebagai dimensi kedua (sumbu y).

Gambar 17: Plot hasil dimensi kedua (sumbu y).

Titik data asli diplot pada sumbu x, dan titik data yang ditransformasikan (persegi x) diplot pada sumbu y. Sekarang, titik data dapat dengan mudah dipisahkan dengan menggambar bidang hiper linier. Memvisualisasikan titik data dimensi yang lebih tinggi akan menjadi tantangan. Namun, kernel SVM bekerja dengan cara yang sama dengan titik data dimensi yang lebih tinggi, juga, mengubah data berdimensi rendah menjadi data berdimensi tinggi sehingga mereka berubah menjadi titik data yang dapat dipisahkan secara linier.

Penerapan

Implementasi di python cukup mudah. Python sebagai open source memberi kami paket siap pakai untuk mengimplementasikan beberapa algoritme pembelajaran mesin, dan SVM tidak terkecuali. Menggunakan paket SVC dari sklearn memberikan beberapa keuntungan dan fleksibilitas. SVC adalah singkatan dari Support Vector Classification, dan implementasinya didasarkan pada libsvm dan pembungkus di sekitar SVM. Mari impor paket yang diperlukan.

import panda sebagai pd
impor numpy sebagai np
impor matplotlib.pyplot sebagai plt
impor seaborn sebagai sns # kumpulan data klasik dari sklearn library
dari sklearn impor set data dari sklearn.model_selection import train_test_split # Mendukung Klasifikasi Vektor-wrapper di sekitar SVM
dari sklearn.svm impor SVC # matriks yang berbeda untuk menilai kinerja model
dari metrik impor sklearn
dari sklearn.metrics impor klasifikasi_report, confusion_matrix

Untuk tujuan implementasi, kami akan menggunakan kumpulan data anggur. Ini adalah dataset multiclass dengan 3 kelas, 178 total sampel, dan 13 fitur. Data ini dihasilkan dari analisis kimiawi anggur yang ditanam di wilayah yang sama di Italia tetapi berasal dari tiga kultivar berbeda. Analisis menentukan jumlah 13 unsur yang ditemukan di masing-masing dari tiga jenis anggur [4].

Mari memuat data wine dari perpustakaan sklearn. Karena data sedang dimuat dari sklearn, akan lebih mudah untuk bekerja dengannya jika kita menyimpannya ke dalam DataFrame.

# memuat kumpulan data WINE
kanker_data = dataset.load_wine () # menyimpan ke DataFrame
df = pd.DataFrame (cancer_data.data, kolom = kanker_data.feature_names)
df[‘target’] = kanker_data.target
df.head ()

Melakukan analisis dengan memplot grafik akan membantu dalam memahami kumpulan data dengan lebih baik. Selalu disarankan untuk memeriksa apakah datanya seimbang, yaitu jika semua kelas target memiliki jumlah record yang sama.

#analysing variabel target
sns.countplot (df.target)
plt.show () Gambar 18: Plot grafik dari kelas-kelas sasaran.

Selain menjadi masalah klasifikasi multikelas, ini juga merupakan masalah klasifikasi yang tidak seimbang. Selanjutnya, mari kita periksa apakah data kita dapat dipisahkan secara linier atau tidak. Ini akan memberikan inferensi awal untuk memutuskan jenis kernel apa yang paling baik untuk mengklasifikasikan data. Untuk mempermudah, mari kita plot setiap fitur terhadap alkohol dan mewarnai poin data terkait kelasnya.

#visualizing datapoints separability
ara, sumbu = plt.subplots (6, 2, figsize = (22,14))
sumbu = [ax for axes_rows in axes for ax in axes_rows]
kolom = daftar (df.columns)
kolom. hapus (‘target’)
columns.remove (‘alcohol’) # perulangan melalui setiap kolom data
#dan berkomplot melawan alkohol
untuk i, kolom dalam enumerate (kolom):
sns.scatterplot (data = df, x = ‘alcohol’, y = col, hue = ‘target’, palette = “deep”, ax = axes[i])