林軒田機器學習技法(Machine Learning Techniques)筆記(四)

我突然發現是不是記得有點詳細了?感覺進度變慢了。
林軒田機器學習技法(Machine Learning Techniques)筆記(一)
林軒田機器學習技法(Machine Learning Techniques)筆記(二)
林軒田機器學習技法(Machine Learning Techniques)筆記(三)

P14 4.1
怎麼減少Gaussian SVM的overfitting

  1. 有點φ(轉換)太powerful
  2. 可能會注意到了,一直堅持要把資料完美分開,這樣不見得是最好的分類方法,會被不可避免的noise影響

回想以前怎麼避免noise:
pocket:找一條錯誤最小的線就可以了
因此,我們可以像pocket一樣容忍一些錯誤,可以把它倆合體,用C來權衡錯誤和正確:
在這裏插入圖片描述
因此得到:soft-margin SVM
[yn̸=sign(wTzn+b)]=0[y_n \not= sign(w^Tz_n+b)]=0的時候說明分類正確,此時要求yn(wTzn+b)>=1y_n(w^Tz_n+b)>=1[yn̸=sign(wTzn+b)]=1[y_n \not= sign(w^Tz_n+b)]=1的時候,此時出現錯誤,然後會記錄下錯誤,C表示錯誤在整體所佔的權重,然後此時要求yn(wTzn+b)>=y_n(w^Tz_n+b)>=-\infty
但這樣,藍色的地方不是線性的,然後dual、kernel啥的也不成立。而且記錄錯誤個數的話,小的錯誤和大的錯誤視爲一樣,效果就會不好。因此需要確定一個線性常數 ζnζ_n ,變成記錄的是犯了多大的錯,而不是犯錯的個數,這樣又是個QP問題了。
在這裏插入圖片描述
ζnζ_n表示每個點的犯錯程度,就是紅框裏,那個violation距離。大的C表示容忍程度低,小的相反。然後因爲加了個ζnζ_n,變量個數則爲d~+1+N,因爲加上ζn>=0ζ_n>=0的規定,所以有2N個約束(constraint):
在這裏插入圖片描述


P15 4.2
接下來推導dual問題,然後用kernel來解決。
同樣,設出α和β:
在這裏插入圖片描述
取L對ζ的梯度爲0,可用α來表示β,代入之後得到新的式子:
在這裏插入圖片描述
得到的新的式子其實就跟之前的hard-margin一樣,只不過條件有點變化,這裏是 0 <= α <= C :
在這裏插入圖片描述
在這裏插入圖片描述
這個QP問題,是N個變量因爲有αnα_n,有2N+1個約束:因爲每個αnα_n有一個下限0和一個上限C,所以有2N個,加上1個\sum,就有2N+1個約束:
在這裏插入圖片描述


P16 4.3
現在我們可以利用QP算出α了,但是b的值不知道,因爲之前是利用KKT的第四個條件算的,但現在因爲是soft而不是hard,所以就沒有這個條件了:
在這裏插入圖片描述
對比於hard,要想解出,就得解出ζ,想解出ζ,就得知道b,有點像“打不過boss要解鎖技能,但解鎖技能要打boss”:
在這裏插入圖片描述
因此定義free support vector(αs0&lt;as&lt;C點α_s範圍爲0&lt;a_s&lt;C),根據第二個式子,就是讓 ζs=0ζ_s=0,這樣就有一個b了,當然這個b不固定,只要滿足條件就可以了。而且一般情況下,會至少存在一組SV使 αs&lt;Cα_s &lt;C紅色石頭)。
在這裏插入圖片描述
雖然現在有了soft的保護,但是C的取值還是不能亂取,否則可能會overfit:
在這裏插入圖片描述
現在,圖上點可以劃分成三種類型:
αnα_n的取值是0~C
①:非SV的(an=0a_n=0) :這裏根據第二個式子,ζ = 0,說明該點沒有犯錯,但是an=0a_n = 0表示這些點不是SV,所以這些點大部分在胖胖的邊界的外頭(極少數在邊界上)
②:free SV的(0&lt;αn&lt;C0&lt;α_n&lt;C):這裏根據第二個式子,ζ = 0,說明該點沒有犯錯,但是這些點是SV,所以就剛好是在邊界上。因爲ζ = 0,所以根據第一個式子,可以算出b。
③:bounded SV(an=Ca_n=C):這些點在邊界內(極少數邊界上),這裏 ζ 表示這些點違反的程度,即到邊界的距離。
在這裏插入圖片描述


P17 4.4
可以用交叉驗證(CV)來驗證選的參數好不好,選出cv最小的那一組參數:
在這裏插入圖片描述
在SVM的leave one out Cross Validation中(不記得是啥的點這裏,大致就是取數據集爲N-1,測試集爲k=1),然後這裏有證明了Eloocv <= SV(的數量)/N :因爲non-SV的err=0,即邊界外的點對SVM的err不做貢獻,而 eSV <= 1,所以Eloocv <= SV(的數量)/N
在這裏插入圖片描述
然後可以用 SV / N 來簡單篩選掉比值高的,因爲SV太多可能意味着模型不是太好。簡單排除之後可以在別的模型上進一步做CV。
在這裏插入圖片描述
總結:
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章