邏輯迴歸的代價函數如下:
J(θ)=minθ1m[∑i=1my(i)(−log(hθ(x(i))))+(1−y(i))(−log(1−hθ(x(i))))]+λ2m∑j=1nθ2j
對於支持向量機來說:
將−log(hθ(x(i))) 替換爲cost1(θTx(i)) ,如下圖:
將−log(1−hθ(x(i))) 替換爲cost0(θTx(i)) ,如下圖:
去掉1m 常量以及正則項的λ 參數,轉而在第一項前加上C 係數,則得到支持向量機的代價函數:
J(θ)=minθC[∑i=1my(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+12∑j=1nθ2j
假設函數:
hθ(x)={1,0,if θTx⩾0otherwise
不同於邏輯迴歸輸出概率,支持向量機的假設函數直接預測
y 的取值。
根據cost1(θTx(i)) 及cost0(θTx(i)) 的座標圖,爲了最小化支持向量機(SVM)的代價函數,需滿足以下條件:
{if y=1,if y=0,then we want θTx⩾1then we want θTx⩽−1
支持向量機不僅正確地區分輸入的正負樣本,還加入了一個安全的間距因子,因此具有魯棒性,也稱其爲大間距分類器。
在支持向量機的代價函數中:
- C 值如果設置很大,支持向量機易受到異常點的影響;
- C 值如果設置很小,支持向量機會忽略異常點的影響。
設存在兩個二維向量:
u=[u1u2]v=[v1v2]
則向量的內積:u⋅v=uT∗v=p∗∥u∥=u1∗v1+u2∗v2
p 是向量v 投射到u 上的長度,∥u∥ 是向量u 的長度=u21+u22−−−−−−√
p 是帶符號的,若u 與v 在座標系內的夾角爲θ(0⩽θ⩽π) ,則u⋅v=∥u∥∗∥v∥∗cosθ
當支持向量機的代價函數中,C 取值較大時,爲了最小化代價函數,我們會找到令∑i=1my(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i)) 爲0 的最優解,則目標函數變爲
minθ12∑j=1nθ2j{θTx(i)⩾1θTx(i)⩽−1if y=1if y=0
進行如下簡化:特徵數n 設爲2,令θ0=0
目標函數可寫作:12(θ21+θ22)=12(θ21+θ22−−−−−−√)2=12∥θ∥2
θTx(i)=p(i)⋅∥θ∥=θ1x(i)1+θ2x(i)2
則條件變爲:
{p(i)⋅∥θ∥⩾1p(i)⋅∥θ∥⩽−1if y(i)=1if y(i)=0
p(i) 爲x(i) 投射到θ 的長度,θ 向量與分界線垂直。
由於目標函數是令12∥θ∥2 儘可能小,同時要滿足條件
{p(i)⋅∥θ∥⩾1p(i)⋅∥θ∥⩽−1if y(i)=1if y(i)=0
所以p(i) 應儘可能大。
這就是支持向量機(SVM)能有效產生大間距分類的原因。
Kernel (核函數):
如上圖所述,如果想擬合一條非線性的判別邊界來區分正負樣本,有兩種方法:
方法1:
構造多項式特徵變量,如果θ0+θ1x1+θ2x2+θ3x1x2+θ4x21+θ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(−∥x−l(1)∥22σ2)f2=similarity(x,l(2))=exp(−∥x−l(2)∥22σ2)f3=similarity(x,l(3))=exp(−∥x−l(3)∥22σ2)
similarity 函數即爲Kernel 函數,此處爲高斯核函數,可用k(x,l(i)) 表示。
以f1 爲例:
f1=similarity(x,l(1))=exp(−∥x−l(1)∥22σ2)=exp(−∑j=1n(xj−l(1)j)22σ2) ,忽略x0
如果x≈l(1) (即x 離l(1) 很近):f1≈exp(−022σ2)≈1
如果x 離l(1) 很遠:f1≈exp(−(large Number)22σ2)≈0
之前畫的每一個點對應一個新的特徵變量。
本例中,假設函數爲:當θ0+θ1f1+θ2f2+θ3f3⩾0 時,預測y=1
假設已得到θ0=−0.5,θ1=1,θ2=1,θ3=0 ,可以發現,樣本離l(1) 或l(2) 很近時,即f1=0 或f2=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=⎡⎣⎢⎢⎢f1f2⋯fm⎤⎦⎥⎥⎥ ,可添加f0=1
對於支持向量機:給定樣本集x ,計算特徵向量f∈Rm+1
如果θTf⩾0 ,預測y=1
如何得到θ ?
minθC[∑i=1my(i)cost1(θTf(i))+(1−y(i))cost0(θTf(i))]+12∑j=1nθ2j
此處n=m
∑j=1nθ2j 也可寫作θTθ (忽略θ0 ),爲了提升計算效率,改寫成θTmθ ,m 爲樣本數。
不建議自己寫最小化代價函數的代碼,應使用成熟軟件包。
高斯核函數中σ 參數的影響:
例:l(1)=[35] ,f1=exp(−∥x−l(1)∥22σ2)
當σ2=1 時:
x=[35] 時,爲最高點f1=1 ,x 取值離該點越遠,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
步驟二:選擇核函數:
- 選擇No kernel (也叫線性核函數)
如果θTx⩾0 ,預測y=1
當存在n 個特徵值,m 個樣本,n 很大,m 很小,此時,適合使用線性核函數。
- 高斯核函數,fi=exp(−∥x−l(i)∥22σ2),l(i)=x(i)
需選擇參數σ2
當存在n 個特徵值,m 個樣本,n 很小,m 很大時,適合用高斯核函數。
如果選擇高斯核函數,需要實現一個核函數:
functionf=kernel(x1,x2)
f=exp(−∥x1−x2∥22σ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 爲訓練樣本數
- 如果相對於m ,n 很大(如n=10000,m=10∼1000 )
使用邏輯迴歸,或SVM使用線性核函數;
- 如果n 很小,m 中等大小(如n=1∼1000,m=10∼10000 )
選擇SVM使用高斯核函數;
- 如果n 很小,m 很大(如n=1∼1000,m=50000+ )
增加更多特徵值,使用邏輯迴歸或SVM不帶核函數。
對於所有情況,一個設計的很好的神經網絡可能會非常有效,但訓練起來很慢。
SVM優化函數是凸函數,總能找到全局最小值,或接近它的值。