Coursera ML筆記 -----week7 Support Vector Machine

歡迎點擊作者原文地址

本部分主要解釋這麼幾個問題:
1. 從logistic regression到SVM
2. SVM和Large Margin Classfier
3. SVM的hypothetsis (θTf0 )
4. SVM的cost function(θTf1&θTf1 )
5. kernel function

1.從logistic regression到SVM

我們在處理分類問題的時候,用到的最基本的代價函數是:

cost=ylog h(x)(1y)log log(1h(x))

其中h(x) 是sigmoid函數。對於sigmoid函數,我們默認的threshold是0.5(即g(0)=0.5 )。於是我們就有:
如果 y=1 ,我們希望hθ(x)1 ,那麼θTx0
如果 y=0 ,我們希望hθ(x)0 ,那麼θTx0

在上面的cost function中,log h(x),log (1h(x)) 都是曲線,我們不妨將之替換成折線,也就是
cost1(θTx) 替換log hθ(x) ,用cost0(θTx) 替換log (1hθ(x))
其中,cost1(θTx),cost0(θTx) 如下所示

那麼這個時候我們就得到了SVM的cost function:

1mi=1m[y(i)cost1(θTx(i))+(1y(i))cost0(θTx(i))]+λ2mj=1nθ2j

更一般地,經過reparameterize我們可以有優化目標函數:

Ci=1m[y(i)cost1(θTx(i))+(1y(i))cost0(θTx(i))]+12j=1nθ2j

其中 C可近似地理解爲1λ
(不妨揣測一下,把λ轉化成C的目的是爲了保持和d在bias variance上的一致性 同小 bias 同大 variance)

於是我們就得到了
1. SVM的原始hypothetsis:

h(x)={10θTx0

注意:邏輯迴歸裏面的h(x)y=1 的概率,但是SVM就是直接預測屬於哪個分類
2. 其cost function的一般形式
Ci=1m[y(i)cost1(θTx(i))+(1y(i))cost0(θTx(i))]+12j=1nθ2j

既然我們已經有了SVM的代價函數以後,我們接下來要做自然就是求這個函數的最小值了。

很顯然,由兩個cost(θTx) 的圖像中我們可以看到
如果 y=1 ,我們希望θTx1
如果 y=0 ,我們希望θTx1
這樣子的話,我們的目標函數就直接變成了

cost=12j=1nθ2j

我們的問題也就轉化成了一個有約束的線性規劃問題的求解:

min 12j=1nθ2js.t.{θTx(i)1θTx(i)1,y(i)=1,y(i)=0

2.SVM和Large Margin Classfier

在求解上面的這個優化問題時,我們可以得到一個很有意思的決策邊界。之所以說它有意思,是因爲對於訓練集中的兩類點來說,它到兩類點的margin都是比較大的。也就是說,兩類點到這個邊界的距離相對來講都是比較大的。
如果用兩類點到邊界的距離來構建一個二維座標平面的話,那麼兩類點到SVM決策邊界的距離就是最高的那個點。

於是,在C特別大的時候,我們可以把SVM 理解成一個 Large Margin Classfier
但這樣子的理解僅限於C特別大的情況,此時SVM是對噪聲非常敏感的,一個outlier 就可以引起SVM決策邊界的變化。

當C比較小的時候,SVM可以消除兩類問題的影響。一類是有噪聲的情況,還有一類是不同類別的點混雜在一起 not linearly seprateable的情況。


爲什麼SVM在C特別大的時候,可以理解成一個Large Margin Classfier?

要解釋清楚這個問題,我們先要解釋一下形如uTv 向量內積的概念.
向量的內積,代表的是一個向量在另一個向量上的投影距離與另外那個向量的長度的乘積。
uTv=pu ,其中p 是指vu 上面的投影距離,根據夾角有正有負,u 是向量u 的範數,也就是這個向量的距離。

清楚了向量內積的意義以後,我們可以知道:
nj=1θ2j=θTθ=θ2,set  θ0=0
θTx(i)=p(i)θ ,其中p(i) 是指x(i)θ 上面的投影距離

於是,我們將前面的線性規劃問題改寫成向量的形式,有:

min 12θ2s.t.{p(i)θ1p(i)θ1,y(i)=1,y(i)=0

顯然,我們的目標其實可以轉化成爲求min θ
不妨這樣子來考慮,在θ 極小的情況下,要使得p(i)θ1 ,那麼我們的p(i) 最好是能夠取得它能取的最大值。如果p(i) 取得比較小,那麼我們的θ 勢必就要增大,顯然這不是我們希望看到的。於是原來的求最小值問題就轉化成爲了求p(i) 最大值的問題(在y^{(i)}=1的情況下)。或者說求投影距離最遠的情況,在不考慮方向(正負)的情況下。

又因爲向量θ 和SVM的決策邊界垂直的,顯然只有當我們的決策邊界離兩類點的margin比較遠時,就能夠同時在兩邊都取到p(i) 的極遠值,使得我們的目標函數最小。

到此爲止,我們就解釋清楚了,爲什麼在C比較大的情況下,SVM可以看成是Larger Margin Classfier

此時,我們就解決了兩個問題:
1. 什麼是SVM(hypothesis & optimization ovjective)
2. SVM和Large Margin Classfier


3.kernel function

我們在做訓練器的分類的時候,我們其實是希望能夠找到一個比較合適的決策邊界來區分數據的類別。顯然,在Sigmoid function的情況下,我們的決策邊界就是θTf(or0) (因爲我們有g(θTf0)=0.5 )。這樣子,我們就把原來判斷g(θTf)>0.5 的問題,轉化成了判斷θTf0 的問題

在SVM裏面我們怎麼找到這個決策邊界,我們引入了kernel,利用kernel來幫我們找到決策邊界,也就是幫助我們進行分類。

接下來我們就說一說kernel function的問題

  1. 什麼是kernel
  2. 爲什麼kernel提取新特徵能取得比較好的效果
  3. 怎麼使用kernel,它是如何幫我們找到決策邊界

%%1.什麼是kernel?
前面我們在解決複雜的非線性問題時,如果直接使用polynomial feature的形式問題的求解會變得很複雜,計算成本也會變得非常大,所以我們考慮通過在神經網絡裏面提取新的特徵的方式來求解。
而在這裏,我們換一種提取新特徵的方式,也就是使用kernel function來作爲新的特徵,也就是考慮我們的數據點和landmark l 之間的相似度(i.e.距離)來作爲新的特徵f=k(x,landmark) .

kernel  function=similarity(x,landmark)
  1. Gaussian kernel function 構建向量,用向量的長度作爲特徵來進行衡量,形如高斯分佈

    f=similarity(x,l)=exp(xl22σ2)

    其中,我們有f=(f1,f2,f3,...),l=(l(1),l(2),l(3),...) ,所以具體到每一個特徵分量fi ,我們有:
    fi=similarity(x,l(i))=exp(xl(i)22σ2)=exp(ni=1(xjl(i)j)2σ2)
  2. No kernel(linear kernel)
    其實就是我們以前使用過的(線性)邏輯迴歸

    h(x)={1,0,θTx0otherwise

%%2.爲什麼會有比較好的效果?

把點在座標面上的位置映射成距離一些kernel的遠近程度,將特徵x 映射成特徵f (此處有彩蛋,作者可見)

%%3.怎麼樣使用kernel
計算好θ 的情況下,直接把f 代入即可

我們在使用kernel的時候有三個地方是需要注意的:
* 怎麼選擇landmarks
* 怎麼選擇similarity函數
* 怎麼計算θ

%% 怎麼選擇landmarks
將訓練集裏面的點作爲landmarks l(i)=x(i)
e.g.
有m個樣本(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m)) 那麼l=(l(1),l(2),...,l(m))T=(x(1),x(2),...,x(m))T
對於一個新的數據 x :

f1=similarity(x,l(1))=sim(x,x(1))f2=similarity(x,l(2))=sim(x,x(2))fm=similarity(x,l(m))=sim(x,x(m))

所以f=(f0,f1,f2,...,fm)TRm+1 ,其中f0=1

4.SVM的hypothetsis 和 cost function

那麼我們就可以得到SVM在引入kernel以後的和hypothesise和training

Hypothesis: 給出xRn ,計算fRm+1

h(x)={1,0,θTf0otherwise

注意,f 的特徵維度一定是m+1,而不是n+1。θRm+1

Training:

min Ci=1m[y(i)cost1(θTf(i))+(1y(i))cost0(θTf(i))]+12j=1mθ2j

注意,懲罰項mj=1θ2j 的上界不是n,而是m。因爲我們的θ 的維度應該和f 保持一致,並且這裏的θ 和我們在前面x 特徵下的θ 是不一樣的,因爲維數不同!
因爲 l 和訓練集數目相關聯,就會帶來另外一個問題:如果我的訓練集太大,那麼 l 的維度也會變得特別大,那麼這個問題如何解決。Ng也在課程裏面給出瞭解決的辦法:
將最後的懲罰項θTθ 改寫成θTMθ ,就可以提高SVM在大訓練集情況下的計算效率,其中M是對應不同的kernel function的一個矩陣
至此,我們就解決了如何選擇landmark的問題

%%接下來考慮怎麼選擇similarity函數
前面已經提到過no kernel函數和Gaussin kernel。
no kernel的函數適用於特徵值多訓練樣本少的情況nm
Guassian kernel適用於特徵值少訓練樣本多的情況nm ,數據使用以前要進行歸一化處理

polynomial kernel: k(x,l)=(xTl+constant)degree
也還有string kernel/chi-squre kernel,histogram intersection kernel等等 ,但是這種一般都用的特別少

kernel函數的選擇有一個原則:並不是所有的similarity(x,l) 都可以用,它們必須滿足“Mercer’s Theorem”來確保包裏面的優化算法能夠正確運行

%%怎麼計算θ
我也很無奈啊,Ng的課程裏面也沒有說,我也很要查一查


SUMMARY
考慮一下我們前面已經提到過的分類器問題的hypothesis,我們可以提出一個比較一般的phypothesis形式:

hθ(f)=g(θTf)

在上面的公式中,

g代表的是一個處理函數,我們到目前位置學習到的是sigmoid function。

θTf 是決策邊界。其中,f 代表的是每一個observation的特徵向量,θ 代表的是特徵向量的權重(特徵向量中每一個特徵分量的重要性)。對於不同的特徵選取,我們就有不同的假設,對應了不同的算法:

  • f 的分量是單個特徵f=(x1,x2,...,xn) ,也就是θTf=θ0+θ1x1+...+θnxn ,這就是我們的logistic regression
  • f 的分量是高次特徵f=(x1,x2,x1x2,x21,x22,...) ,也就是θTf=θ0+θ1x1+θ2x2+θ3x1x2+θ4x21+θ5x22+...
  • f 的分量是多重的線性特徵f=g(\Theta^Tx)=(g(\Theta_1x),g(\Theta_2x),g(\Theta_3x),...)f=g(ΘTx)=(g(Θ1x),g(Θ2x),g(Θ3x),...) ,這就是Neural Network
  • f 的分量是kernel functionf=(f1,f2,f3,...)=(similarity(x,l(1)),similarity(x,l(2)),similarity(x,l(3)),...) ,這就是我們的SVM

小吐個槽:ml的這個課程裏面監督學習主要精力都是在講分類啊


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