Coursea-吳恩達-machine learning學習筆記(十二)【week 7之Support Vector Machines】

邏輯迴歸的代價函數如下:
J(θ)=minθ1m[i=1my(i)(log(hθ(x(i))))+(1y(i))(log(1hθ(x(i))))]+λ2mj=1nθj2

對於支持向量機來說:
log(hθ(x(i))) 替換爲cost1(θTx(i)) ,如下圖:
這裏寫圖片描述
log(1hθ(x(i))) 替換爲cost0(θTx(i)) ,如下圖:
這裏寫圖片描述
去掉1m 常量以及正則項的λ 參數,轉而在第一項前加上C 係數,則得到支持向量機的代價函數:
J(θ)=minθC[i=1my(i)cost1(θTx(i))+(1y(i))cost0(θTx(i))]+12j=1nθj2

假設函數:

hθ(x)={1,if θTx00,otherwise

不同於邏輯迴歸輸出概率,支持向量機的假設函數直接預測y 的取值。

根據cost1(θTx(i))cost0(θTx(i)) 的座標圖,爲了最小化支持向量機(SVM)的代價函數,需滿足以下條件:

{if y=1,then we want θTx1if y=0,then we want θTx1

支持向量機不僅正確地區分輸入的正負樣本,還加入了一個安全的間距因子,因此具有魯棒性,也稱其爲大間距分類器。

在支持向量機的代價函數中:

  • C 值如果設置很大,支持向量機易受到異常點的影響;
  • C 值如果設置很小,支持向量機會忽略異常點的影響。

設存在兩個二維向量:

u=[u1u2]v=[v1v2]

則向量的內積:uv=uTv=pu=u1v1+u2v2
p 是向量v 投射到u 上的長度,u 是向量u 的長度=u12+u22
p 是帶符號的,若uv 在座標系內的夾角爲θ(0θπ) ,則uv=uvcosθ

當支持向量機的代價函數中,C 取值較大時,爲了最小化代價函數,我們會找到令i=1my(i)cost1(θTx(i))+(1y(i))cost0(θTx(i))0 的最優解,則目標函數變爲

minθ12j=1nθj2{θTx(i)1if y=1θTx(i)1if y=0

進行如下簡化:特徵數n 設爲2,令θ0=0
目標函數可寫作:12(θ12+θ22)=12(θ12+θ22)2=12θ2
θTx(i)=p(i)θ=θ1x1(i)+θ2x2(i)
則條件變爲:

{p(i)θ1if y(i)=1p(i)θ1if y(i)=0

p(i)x(i) 投射到θ 的長度,θ 向量與分界線垂直。
由於目標函數是令12θ2 儘可能小,同時要滿足條件

{p(i)θ1if y(i)=1p(i)θ1if y(i)=0

所以p(i) 應儘可能大。
這就是支持向量機(SVM)能有效產生大間距分類的原因。

Kernel (核函數)
這裏寫圖片描述
如上圖所述,如果想擬合一條非線性的判別邊界來區分正負樣本,有兩種方法:

方法1
構造多項式特徵變量,如果θ0+θ1x1+θ2x2+θ3x1x2+θ4x12+θ5x22+>0 ,則預測y=1

方法2
只定義三個特徵變量x0,x1,x2 ,其中x0=1 ,可忽略,如下圖所示,用x1,x2 作爲座標軸,手動選取三個點作爲l(1),l(2),l(3)
這裏寫圖片描述
給出樣本x ,新的特徵變量定義如下:

f1=similarity(x,l(1))=exp(xl(1)22σ2)f2=similarity(x,l(2))=exp(xl(2)22σ2)f3=similarity(x,l(3))=exp(xl(3)22σ2)

similarity 函數即爲Kernel 函數,此處爲高斯核函數,可用k(x,l(i)) 表示。
f1 爲例:
f1=similarity(x,l(1))=exp(xl(1)22σ2)=exp(j=1n(xjlj(1))22σ2) ,忽略x0
如果xl(1) (即xl(1) 很近):f1exp(022σ2)1
如果xl(1) 很遠:f1exp((large Number)22σ2)0
之前畫的每一個點對應一個新的特徵變量

本例中,假設函數爲:當θ0+θ1f1+θ2f2+θ3f30 時,預測y=1
假設已得到θ0=0.5,θ1=1,θ2=1,θ3=0 ,可以發現,樣本離l(1)l(2) 很近時,即f1=0f2=0 時,y=1

如何選擇l(1),l(2),l(3)
設給定m 個訓練樣本(x(1),y(1)),(x(2),y(2)),,(x(m),y(m))
選擇l(1)=x(1),l(2)=x(2),,l(m)=x(m)
f1=similarity(x,l(1))f2=similarity(x,l(2))
則特徵向量f=[f1f2fm] ,可添加f0=1
對於支持向量機:給定樣本集x ,計算特徵向量fRm+1
如果θTf0 ,預測y=1

如何得到θ
minθC[i=1my(i)cost1(θTf(i))+(1y(i))cost0(θTf(i))]+12j=1nθj2
此處n=m
j=1nθj2 也可寫作θTθ (忽略θ0 ),爲了提升計算效率,改寫成θTmθm 爲樣本數。
不建議自己寫最小化代價函數的代碼,應使用成熟軟件包

高斯核函數中σ 參數的影響:
例:l(1)=[35]f1=exp(xl(1)22σ2)
σ2=1 時:
這裏寫圖片描述
x=[35] 時,爲最高點f1=1x 取值離該點越遠,f1 越趨近於0

σ2=0.5 時:
這裏寫圖片描述
隨着x 取值遠離l(1)f1 取值的下降趨勢加快。

σ2=3 時:
這裏寫圖片描述
隨着x 取值遠離l(1)f1 取值的下降趨勢減緩。

使用支持向量機時,參數C 的影響:

  • C 取值較大,低偏差,高方差。(對應λ 取值小)
  • C 取值較小,高偏差,低方差。(對應λ 取值大)

使用支持向量機時,參數σ2 的影響:

  • σ2 取值較大,特徵向量fi 越平滑,高偏差,低方差
  • σ2 取值較小,特徵向量fi 越陡峭,低偏差,高方差

使用SVM軟件包求解參數θ (如:liblinear,libsvm ):
步驟一:選擇參數C
步驟二:選擇核函數:

  1. 選擇No kernel (也叫線性核函數)
    如果θTx0 ,預測y=1
    當存在n 個特徵值,m 個樣本,n 很大,m 很小,此時,適合使用線性核函數。
  2. 高斯核函數,fi=exp(xl(i)22σ2),l(i)=x(i)
    需選擇參數σ2
    當存在n 個特徵值,m 個樣本,n 很小,m 很大時,適合用高斯核函數。
    如果選擇高斯核函數,需要實現一個核函數:
    functionf=kernel(x1,x2)
    f=exp(x1x222σ2)
    return
    其中,f 代表f(i)x1 代表x(i)x2 代表l(j)=x(j)
    在使用高斯函數前,需要做特徵歸一化,避免單一特徵值對f 的影響過大。
    注意:不是所有的相似度函數similarity(x,l) 都是有效的核函數,需要滿足默塞爾定理,確保軟件包可以使用大量優化方法並快速得到參數θ
    可能會遇到的其他核函數:
    1)多項式核函數:k(x,l)=(xTl+constant)degree ,當x,l 都是嚴格非負數時使用;
    2)字符串核函數:當輸入爲文本或其他類型字符串時使用;
    3)卡方核函數;
    4)直方圖交叉核函數。

如果有k 個類別的話,一般使用內置函數,否則,訓練k 個SVM,每個SVM將1 類與其他類區分開。

邏輯迴歸與SVM對比
n 爲特徵值數量,m 爲訓練樣本數

  • 如果相對於mn 很大(如n=10000,m=101000 )
    使用邏輯迴歸,或SVM使用線性核函數;
  • 如果n 很小,m 中等大小(如n=11000,m=1010000 )
    選擇SVM使用高斯核函數;
  • 如果n 很小,m 很大(如n=11000,m=50000+ )
    增加更多特徵值,使用邏輯迴歸或SVM不帶核函數。

對於所有情況,一個設計的很好的神經網絡可能會非常有效,但訓練起來很慢。

SVM優化函數是凸函數,總能找到全局最小值,或接近它的值。

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