iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 5
0

從前面的 kernel SVM 當中我們已經獲得了很強大的模型,可是他還是會有不足之處,像是當資料有雜訊的時候就容易將每個資料點都個別分開。

有時候我們反而希望模型在面對雜訊上不要那麼敏感,或是不要把每個資料點都分對,這時候怎麼辦呢?

Hard-margin SVM

從這張圖來看,我們或許可以接受這樣的線其實還不錯,只是資料多了一點雜訊。如果讓模型硬要把所有資料點都分對的話,邊界就會非常複雜,就會變成 overfitting。

我們是不是有什麼辦法去修正這個模型呢?

我們原本的模型是:

https://chart.googleapis.com/chart?cht=tx&chl=%5Cbegin%7Balign%7D%20%5Carg%5Cmin%20_%7B%5Cmathbf%7Bw%7D%2C%20b%7D%20%26%5C%20%5C%20%5C%20%5C%20%20%20%20%20%20%5Cfrac%7B1%7D%7B2%7D%20%5Cmathbf%7Bw%7D%5ET%5Cmathbf%7Bw%7D%20%5C%5C%5C%5C%20%5Ctext%7Bsubject%20to%7D%20%26%5C%20%5C%20%5C%20%5C%20%20%20%20%20%20%5Cforall%20i%2C%20y_i%20(%5Cmathbf%7Bw%7D%5ET%5Cmathbf%7Bx_i%7D%20%2B%20b)%20%5Cge%201%20%5Cend%7Balign%7D

我們可以藉由在最佳化目標上加上一些 regularization https://chart.googleapis.com/chart?cht=tx&chl=%5Csum%20_%7Bn%3D1%7D%5EN%20%5By_n%20%5Cne%20sign(%5Cmathbf%7Bw%7D%5ET%5Cmathbf%7Bz_n%7D%20%2B%20b)%20%5D

https://chart.googleapis.com/chart?cht=tx&chl=%5Cbegin%7Balign%7D%20%5Carg%5Cmin_%7B%5Cmathbf%7Bw%7D%2C%20b%7D%20%26%5C%20%5C%20%5C%20%5C%20%20%20%20%20%20%5Cfrac%7B1%7D%7B2%7D%20%5Cmathbf%7Bw%7D%5ET%5Cmathbf%7Bw%7D%20%2B%20C%20%5Csum%20_%7Bn%3D1%7D%5EN%20%5By_n%20%5Cne%20sign(%5Cmathbf%7Bw%7D%5ET%5Cmathbf%7Bz_n%7D%20%2B%20b)%20%5D%20%5C%5C%5C%5C%20%5Cend%7Balign%7D
https://chart.googleapis.com/chart?cht=tx&chl=%5Cbegin%7Balign%7D%20%5Ctext%7Bsubject%20to%7D%20%26%5C%20%5C%20%5C%20%5C%20%20%20%20%20%20...%20%5Cend%7Balign%7D

這樣的 regularization 項我們可以仿照之前的方法,把他改成 https://chart.googleapis.com/chart?cht=tx&chl=%5Csum%20_%7Bn%3D1%7D%5EN%20y_n%20(%5Cmathbf%7Bw%7D%5ET%5Cmathbf%7Bz_n%7D%20%2B%20b)

如果考慮 https://chart.googleapis.com/chart?cht=tx&chl=y_n%20(%5Cmathbf%7Bw%7D%5ET%5Cmathbf%7Bz_n%7D%20%2B%20b),如果答對的話,他會是大於等於 1 的值,相反,如果答錯的話...........,我們只能確定他是負值,沒辦法確定他的範圍。

這樣的話,我們 直接引入一個值 https://chart.googleapis.com/chart?cht=tx&chl=%5Cxi 來代表 https://chart.googleapis.com/chart?cht=tx&chl=y_n%20(%5Cmathbf%7Bw%7D%5ET%5Cmathbf%7Bz_n%7D%20%2B%20b) 到底有多大程度答錯了。

https://chart.googleapis.com/chart?cht=tx&chl=%5Cbegin%7Balign%7D%20%5Carg%5Cmin_%7B%5Cmathbf%7Bw%7D%2C%20b%2C%20%5Cmathbf%7B%5Cxi%7D%7D%20%26%5C%20%5C%20%5C%20%5C%20%20%20%20%20%20%5Cfrac%7B1%7D%7B2%7D%20%5Cmathbf%7Bw%7D%5ET%5Cmathbf%7Bw%7D%20%2B%20C%20%5Csum%20_%7Bn%3D1%7D%5EN%20%5Cxi_n%20%5C%5C%5C%5C%20%5Cend%7Balign%7D
https://chart.googleapis.com/chart?cht=tx&chl=%5Cbegin%7Balign%7D%20%5Ctext%7Bsubject%20to%7D%20%26%5C%20%5C%20%5C%20%5C%20%20%20%20%20%20%5Cforall%20i%2C%20y_i%20(%5Cmathbf%7Bw%7D%5ET%5Cmathbf%7Bx_i%7D%20%2B%20b)%20%5Cge%201%20-%20%5Cxi_n%20%5C%5C%5C%5C%20%5Cend%7Balign%7D
https://chart.googleapis.com/chart?cht=tx&chl=%5Cbegin%7Balign%7D%20%5Ctext%7B%20%7D%20%26%5C%20%5C%20%5C%20%5C%20%20%20%20%20%20%5Cforall%20n%2C%20%5Cxi_n%20%5Cge%200%20%5Cend%7Balign%7D

所以在最佳化目標上有 regularization,然後放寬一下限制,讓 https://chart.googleapis.com/chart?cht=tx&chl=y_i%20(%5Cmathbf%7Bw%7D%5ET%5Cmathbf%7Bx_i%7D%20%2B%20b) 的值可以有個容忍度 https://chart.googleapis.com/chart?cht=tx&chl=1%20-%20%5Cxi_n

也就是,我們可以在 margin 儘量大的情形下,去限制讓模型不能做錯太多,這個程度可以藉由 C 做調整。


上一篇
05 從 maximum-margin classifier 到 kernel SVM
下一篇
07 標準 SVM
系列文
機器學習模型圖書館:從傳統模型到深度學習31

尚未有邦友留言

立即登入留言