Setidaknya ada dua cara untuk memotivasi SVM, tetapi saya akan mengambil rute yang lebih sederhana di sini.
Sekarang, lupakan semua yang Anda ketahui tentang SVM untuk saat ini dan hanya fokus pada masalah yang ada. Anda diberi satu set poin bersama dengan beberapa label ( ) yang berasal dari . Sekarang, kami berusaha menemukan garis dalam 2D sehingga semua titik dengan label jatuh di satu sisi garis dan semua titik dengan label jatuh di sisi lain.y i { 1 , - 1 } 1 - 1D ={( xsaya1, xsaya2, ysaya) }ysaya{ 1 , - 1 }1- 1
Pertama-tama, sadari bahwa adalah garis dalam 2D dan mewakili "satu sisi" dari garis dan mewakili "sisi lain" dari baris.w 0 + w 1 x 1 + w 2 x 2 > 0 w 0 + w 1 x 1 + w 2 x 2 < 0w0+ w1x1+ w2x2= 0w0+ w1x1+ w2x2> 0w0+ w1x1+ w2x2< 0
Dari di atas kita dapat menyimpulkan bahwa kita menginginkan beberapa vektor sedemikian rupa sehingga,
untuk semua titik dengan dan untuk semua poin dengan [1].w 0 + w 1 x i 1 + w 2 x i 2 ≥ 0 x i y i = 1 w 0 + w 1 x i 1 + w 2 x i 2 < 0 x i y i = - 1[ w0, w1, w2]w0+ w1xsaya1+ w2xsaya2≥ 0xsayaysaya= 1w0+ w1xsaya1+ w2xsaya2< 0xsayaysaya= - 1
Mari kita asumsikan bahwa garis seperti itu benar-benar ada maka saya dapat mendefinisikan classifier dengan cara berikut,
min | w0| + | w1| + | w2|tunduk pada : w0+ w1xsaya1+ w2xsaya2≥ 0 , ∀ xsaya dengan ysaya= 1w0+ w1xsaya1+ w2xsaya2< 0 , ∀ xsaya dengan ysaya= - 1
Saya telah menggunakan fungsi tujuan yang sewenang-wenang di atas, kami tidak benar-benar peduli pada saat ini fungsi tujuan mana yang digunakan. Kami hanya menginginkan yang memenuhi kendala kami. Karena kami berasumsi bahwa ada garis sehingga kami dapat memisahkan dua kelas dengan garis itu, kami akan menemukan solusi untuk masalah optimasi di atas.w
Di atas bukan SVM tetapi akan memberi Anda classifier :-). Namun klasifikasi ini mungkin tidak terlalu baik. Tetapi bagaimana Anda mendefinisikan classifier yang baik? Pengklasifikasi yang baik biasanya merupakan pengelompokan yang baik pada set tes. Idealnya, Anda akan pergi ke semua mungkin 's yang memisahkan data training dan melihat mana dari mereka tidak baik pada data uji. Namun, ada tak terbatas , jadi ini sangat tidak ada harapan. Sebagai gantinya, kami akan mempertimbangkan beberapa heuristik untuk mendefinisikan classifier yang baik. Satu heuristik adalah bahwa garis yang memisahkan data akan cukup jauh dari semua titik (yaitu selalu ada kesenjangan atau margin antara titik dan garis). Klasifikasi terbaik di antara ini adalah satu dengan margin maksimum. Inilah yang digunakan dalam SVM.www
Alih-alih bersikeras bahwa untuk semua poin dengan dan untuk semua poin dengan , jika kita bersikeras bahwa untuk semua poin dengan dan untuk semua poin dengan , maka kita sebenarnya bersikeras bahwa poin berada jauh dari garis. Margin geometris yang sesuai dengan persyaratan ini adalah .x i y i = 1 w 0 + w 1 x i 1 + w 2 x i 2 < 0 x i y i = - 1 w 0 + w 1 x i 1 + w 2 x i 2 ≥ 1w0+ w1xsaya1+ w2xsaya2≥ 0xsayaysaya= 1w0+w1xsaya1+w2xsaya2< 0xsayaysaya= - 1w0+w1xsaya1+w2xsaya2≥ 1y i = 1 w 0 + w 1 x i 1 + w 2 x i 2 ≤ - 1 x i y i = - 1 1xsayaysaya= 1w0+w1xsaya1+w2xsaya2≤ - 1xsayaysaya= - 11∥ b ∥2
Jadi, kami mendapatkan masalah pengoptimalan berikut,
Bentuk penulisan yang agak ringkas ini adalah,
Ini pada dasarnya adalah formulasi dasar SVM. Saya telah melewatkan cukup banyak diskusi untuk singkatnya. Mudah-mudahan, saya masih mendapatkan sebagian besar ide.
maks1∥ b ∥2tunduk pada : w0+w1xsaya1+w2xsaya2≥ 1 , ∀ xsaya dengan ysaya= 1w0+w1xsaya1+w2xsaya2≤ - 1 , ∀ xsaya dengan ysaya= - 1
min ∥ w ∥2tunduk pada : ysaya( b0+ w1xsaya1+ w2xsaya2) ≥ 1 , ∀ i
Script CVX untuk memecahkan contoh masalah:
A = [1 2 1; 3 2 1; 2 3 1; 3 3 1; 1 1 1; 2 0 1; 2 1 1; 3 1 1];
b = ones(8, 1);
y = [-1; -1; -1; -1; 1; 1; 1; 1];
Y = repmat(y, 1, 3);
cvx_begin
variable w(3)
minimize norm(w)
subject to
(Y.*A)*w >= b
cvx_end
Addendum - Margin Geometris
Di atas kami telah meminta kami mencari sedemikian rupa sehingga atau umumnya . LHS di sini yang Anda lihat disebut margin fungsional, jadi apa yang kami minta di sini adalah margin fungsional menjadi . Sekarang, kami akan mencoba untuk menghitung margin geometris mengingat persyaratan margin fungsional ini.wysaya( b0+ w1x1+ w2x2) ≥ 1ysaya( b0+ wTx ) ≥ 1≥ 1
Apa itu margin geometris? Margin geometris adalah jarak terpendek antara titik dalam contoh positif dan titik dalam contoh negatif. Sekarang, titik yang memiliki jarak terpendek seperti yang dipersyaratkan di atas dapat memiliki margin fungsional lebih besar dari sama dengan 1. Namun, mari kita perhatikan kasus ekstrim, ketika mereka paling dekat dengan hyperplane yaitu, margin fungsional untuk titik terpendek persis sama ke 1. Biarkan menjadi titik pada contoh positif menjadi titik sehingga dan menjadi titik pada contoh negatif menjadi titik sedemikian rupa sehingga . Sekarang, jarak antara dan akan menjadi yang terpendek ketikax+wTx++ w0= 1x-wTx-+ w0= - 1x+x-x+- x- tegak lurus terhadap hyperplane.
Sekarang, dengan semua informasi di atas kami akan mencoba menemukan yang merupakan margin geometrik.
∥ x+- x-∥2
wTx++ w0= 1
wTx-+ w0= - 1
wT( x+- x-) = 2
| wT( x+- x-) | = 2
‖ x + - x - ‖ 2 = 2∥ w ∥2∥ x+- x-∥2= 2
∥ x+- x-∥2= 2∥ w ∥2
[1] Tidak masalah sisi mana yang Anda pilih untuk dan . Anda hanya harus tetap konsisten dengan apa pun yang Anda pilih.- 11- 1