第七周筆記:支持向量機SVM

以邏輯回歸為例:theta^T*x_i

我們要找到(不斷縮小)的代價函數(的導數)。代價函數長這樣:

J(theta_j)=1/2m*(sum_{1}^{m}(-y*log(h(x))+(y-1)log(1-h(x)))+lambda sum_{j=1}^{n}{theta_j^2} )

他的導數就長這樣:1/2*(sum_{i=1}^{m}(-y_i*log(h(x_i))+(y_i-1)log(1-h(x_i)))+lambda/2m* sum_{j=1}^{n}{theta_j} )

把函數換一種寫法:

1/2*(sum_{i=1}^{m}-y_i*cost(theta^T*x_i)+(y_i-1)cost(theta^T*x))+lambda/2m* sum_{j=1}^{n}{theta_j} )

我們知道,我們預測有兩個結果,h(x)也就是樣本的結果y為1或者為0所以很明顯,分類時就是:y=1時theta^T*x_igeq  1,y=0時就是theta^T*x_i leq -1

這樣很開心,因為我們的決策邊界從一條線,變成了一個區域。所以這玩意又稱為大間距分類器。

大間距分類器有個好處,可以自動忽視異常值(區域內值)。

核函數:

好多人搞不明白為毛要用核函數。其實很好理解。我舉個例子你就理解了。

假設現在我在地板上畫了一條線,然後扔了兩張紙在地上,讓你判斷紙在線的左邊呢,還是在右邊。

由於紙張壓線了,或者兩張紙舉例不一樣,你估計會一臉蒙蔽。於是要找個方法對吧,那就把紙張摺疊一些,用我優雅的摺紙技術把這張紙折成了一個球。再扔到線上。

這次由於紙折成了球,你相對於紙張整個壓在線上,就更容易判斷現在紙在左邊還是右邊了。核函數,就是類似於這個例子里摺紙,當然,紙就是你的特徵量咯……

實際操作中和這個例子還是有很大區別的,比如幾張紙之類的……(手動滑稽)。

回到正題。

現在我們定義一個新的特徵量l。l和x都是特徵量,為了讓他們共同預測結果,我們要對其建立一個新的函數關係式以形成cost函數。

當然……你(的摺紙方法)寫成 x-l 或者 x / l 也沒人攔得住你,不過一般情況下,我們選擇高斯核函數:

f_j=similarity(x,l^{(j)})=exp(frac{-(x-l^{(j)})^2}{2sigma ^2} )

這裡,當x與l越接近,f越接近1.x與l差距越大,f越接近0.

嗯,猜對了,實際處理SVM問題,核函數的意義就在於替換那個x為f。

實際問題中,是否選擇SVM可以如下考慮:

n多,甚至大於m時,用邏輯回歸或者無核SVM。

n小時,用高斯核函數處理特徵量後的SVM。

n非常小,而m非常大時,也許需要增加更多的特徵量(n是特徵量數,m是數據數量),而由於數據很多,出於計算速度考慮的話,可以用邏輯回歸或者無核SVM。

如果電腦夠好,不需要考慮計算速度,在此之上可以使用神經網路。(神經網路很早以前就有了,近幾年火主要是因為計算機計算能力提升)


推薦閱讀:

人工神經元和Delta規則
知識圖譜目前亟待的問題有哪些?
SVM樣本如何進行預處理和篩選?

TAG:SVM | 机器学习 | kernel核函数 |