注意:整篇文章極度數學高能!!
沒有把前一篇文章看完的朋友別擔心,我們會在開頭先回顧一下。在一番數學技巧的替換過後,我們的 maximum-margin classifier 會被化成一個最佳化問題。這個最佳化問題可以用二次規劃(quadratic programming, QP)來解。
當模型被轉化成一個最佳化問題之後,你還有什麼不滿的? 問題都解決了嗎?
當然還沒有阿!雖然說我們解決了前面的第二個缺點,但是第一個缺點還是在啊!
那如果資料不是線性可分的話,是不是支援非線性的分類問題就可以了?
那問題簡單!既然這個分類器只能處理線性問題,那就把所有非線性問題透過一個轉換變成線性問題不就可以了?
當然用講的比較簡單...
我們就先假設有個非線性轉換,可以把原本的非線性資料 轉成線性資料 :
然後再把線性資料塞進模型裡不就得了?
嗯......可是瑞凡,你知道要放到 QP 裏面算之前,要先計算出 。
計算這所有的組合可是非常花時間()的好嗎!!尤其你的資料點很多的時候,大數據都算不下去了。
我們先來看一下比較簡單的非線性轉換好了,假設是二次多項式的轉換。
我們想像中的二次多項式應該是 ,這邊有三項,可是廣義的二次多項式會有:
有一個常數項、d 個一次項跟 個二次項,如果這個向量內積的話,乘法的時間複雜度就有 了。
然後再讓 跟 兩兩內積,利用內積的交換性扣掉一些不用算的,好歹也需要算 次內積,是 。
總共應該會有 。
註:d 為資料維度,N 為資料筆數
有沒有什麼方法可以降低這個時間呢?
我們把內積的部份拿出來看看。
咦!是不是可以進一步整理成這樣。
這樣的話需要多少時間複雜度呢?掐指一算, 需要 $O(d)$, 總共需要 !
大大降低了!!
所以我們就把這樣的方法稱為 kernel method,並且定義 。
不過大家常用的是比較廣義的版本:
然後使用者通常會想要細緻控制 kernel 的強度,所以會引入一個參數:
我們來看一下用起來的效果如何?
picture from coursera, 《機器學習技法》 - 林軒田
既然可以有二次的那是不是到 M 次都可以?那有沒有無限次的呢?
有!
他長成這樣:
嗯?你不要騙我!你以為擺到次方項就可以變成無限維度?
那就來證明一下啦-~~
透過泰勒展開式展開之後我們就看到無限維度的影子了,再進一步簡化。
)
)
)
我們的無限維度非線性轉換就完成啦!
所以這種 kernel 叫作 Gaussian kernel,使用上也是有個參數可以調整強度。
在現在的支持向量機(Support vector machine, SVM)預設是會使用 Gaussian kernel 的,這就是這個模型強大的祕密!