哲哲的ML筆記(二十六:SVM之核函數)

什麼是核函數

分類問題中,可以使用高級數的多項式模型來解決無法用直線進行分隔的分類問題


假設上圖的假設函數是
h_\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_1x_2+\theta_4x^2_1+\theta_5x^2_2+…

除了對原有的特徵進行組合以外,有沒有更好的方法來構造?我們可以利用核函數來計算出新的特徵
可以用一系列的新的特徵f來替換模型中的每一項:f_1=x_1,f_2=x_2,f_3=x_1x_2……

給定一個訓練樣本x,我們利用的各個特徵與我們預先選定的地標l^1,l^2,l^3(landmarks)的近似程度來選取新的特徵f_1, f_2,f_3


近似度的定義爲
f_1=similarity(x,l^1)=e^{-\frac{\|x-l^1\|^2}{2\sigma^2}}
所有特徵與地標l^1之間的距離的和定義如下:
\|x-l^1\|^2=\sum^{n}_{j=1}(x_j-l^1_j)^2
其中,核函數爲similarity(x,l^1),具體而言,這裏是一個高斯核函數(Gaussian Kernel)。 (注:這個函數與正態分佈沒什麼實際上的關係,只是看上去像而已。

如果一個訓練樣本x與地標l之間的距離近似於0,則新特徵f近似於1,如果訓練樣本與地標之間距離較遠,則近似於0

假設我們的訓練樣本含有兩個特徵[x_1,x_2],給定地標與不同的\sigma值,見下圖


當樣本值與地標值重合時,核函數才具有最大值1

如下圖,假設了一組\theta值,假設一個樣本是圖中的粉色點,距離l^1很近,f_1趨近於1,f_2f_3趨近於0,那麼假設函數的值爲1,預測爲1
假設一個樣本數是圖中藍色的點,f_1f_2f_3都趨近於0,假設函數爲0,預測爲0


這樣,圖中紅色的封閉曲線所表示的範圍,便是我們依據一個單一的訓練樣本和我們選取的地標所得出的判定邊界,在預測時,我們採用的特徵不是訓練樣本本身的特徵,而是通過核函數計算出的新特徵

核函數如何選取

通常是根據訓練集的數量選擇地標的數量,即如果訓練集中有m個樣本,則我們選取m個地標,並且令:l^1=x_1, l^2=x_2……。這樣做的好處在於:現在我們得到的新特徵是建立在原有特徵與訓練集中所有其他特徵之間距離的基礎之上的,即

對於一個樣本x,根據核函數計算出f\in R^{m+1},當\theta^Tf\geq0,預測y=1
怎麼得到\theta?通過代價函數,注意\sum^{m}_{j=1}\theta^2_j是加到m,不是n
minC\sum^{m}_{i=1}y^icost_1(\theta^Tf^i)+(1-y^i)cost_0(\theta^Tf^i)+\frac{1}{2}\sum^{m}_{j=1}\theta^2_j

下面是支持向量機的兩個參數C\sigma的影響:

  1. C過大,相當於\lambda過小,過擬合
  2. sigma過大,f_i變化的非常平滑(見上一部分第3個圖),欠擬合

使用SVM注意事項

儘管你不去寫你自己的SVM的優化軟件,但是你也需要做幾件事:
1、參數C的選擇,上一部分討論過誤差/方差在這方面的性質。
2、你選擇不需要任何內核參數,沒有內核參數的理念,也叫線性核函數。因此,如果有人說他使用了線性核的SVM(支持向量機),這就意味這他使用了不帶有核函數的SVM(支持向量機)。

下面是一些普遍使用的準則:n爲特徵數,m爲訓練樣本數。

  1. 如果相較於m而言,n要大許多,即訓練集數據量不夠支持我們訓練一個複雜的非線性模型,我們選用邏輯迴歸模型或者不帶核函數的支持向量機。
  2. 如果n較小,而且m大小中等,例如在 1-1000 之間,而在10-10000之間,使用高斯核函數的支持向量機。
  3. 如果n較小,而m較大,例如n在1-1000之間,而m大於50000,則使用支持向量機會非常慢,解決方案是創造、增加更多的特徵,然後使用邏輯迴歸或不帶核函數的支持向量機。

值得一提的是,神經網絡在以上三種情況下都可能會有較好的表現,但是訓練神經網絡可能非常慢,選擇支持向量機的原因主要在於它的代價函數是凸函數,不存在局部最小值

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