1 構建支持向量機
擁有了這些定義之後,現在我們就開始構建支持向量機。
1.1 替換邏輯迴歸函數
這就是我們在邏輯迴歸中使用的代價函數J(θ):
J(θ)=−1m∑i=1m[y(i) log(hθ(x(i)))+(1−y(i)) log(1−hθ(x(i)))]+λ2m∑j=1nθ2j
對於支持向量機而言,實際上,我們要將
上面式子中的這一項:
(−loghθ(x(i)))
替換爲:
cost1(z)
,即:
cost1(θTx(i))
同樣,這一項:
((−log(1−hθ(x(i)))))
替換爲:
cost0(z),即:cost0(θTx(i))
其中cost分別爲下面的紅線:
我們命名爲
cost1(z)
。
![圖片描述](http://static.javashuo.com/static/loading.gif)
我們命名爲
cost2(z)
。
這裏替換之後的
cost1(z)
和
cost0(z)
就是上面提到的那兩條靠近邏輯迴歸函數的折線。
所以對於支持向量機的最小化代價函數問題,代價函數的形式如下:
minθ1m[∑mi=1y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+λ2m∑nj=1θ2j
1.2 去除多餘的常數項
1m
現在按照支持向量機的慣例,我們去除
1m
這一項,因爲這一項是個常數項,即使去掉我們也可以得出相同的
θ
最優值:
minθ∑i=1m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+λ2∑j=1nθ2j
1.3 正則化項係數的處理
在邏輯迴歸的目標函數中,我們有兩項表達式:
來自於訓練樣本的代價函數:
1m[∑i=1my(i)(−loghθ(x(i)))+(1−y(i))((−log(1−hθ(x(i)))))]
正則化項:
λ2∑j=1nθ2j
我們不得不使用正則化項來平衡我們的代價函數。這就相當於:
A+λB
其中A相當於上面的第一項,B相當於第二項。
我們通過修改不同的正則化參數
λ
來達到優化目的,這樣我們就能夠使得訓練樣本擬合的更好。
但對於支持向量機,按照慣例我們將使用一個不同的參數來替換這裏使用的
λ
來實現權衡這兩項的目的。這個參數我們稱爲C。同時將優化目標改爲:
CA+B
因此,在邏輯迴歸中,如果給
λ
一個很大的值,那麼就意味着給與B了一個很大的權重,而在支持向量機中,就相當於對C設定了一個非常小的值,這樣一來就相當於對B給了比A更大的權重。
因此,這只是一種來控制這種權衡關係的不同的方式。當然你也可以把這裏的C當做
farc1λ
來使用。
因此,這樣就得到了在支持向量機中的我們的整個優化目標函數:
minθC∑i=1m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+12∑j=1nθ2j
最後有別於邏輯迴歸的一點,對於支持向量機假設函數的形式如下:
hθ(x)=1 if θTx≥0
hθ(x)=0 if θTx<0
而不是邏輯迴歸中的S型曲線:
hθ(x)=11+e−x
2 由邏輯迴歸到svm
安全距離因子
事實上,在邏輯迴歸中:
如果你有一個正樣本,即y=1的情況下,我們僅僅需要\theta^{T}x\ge0;
如果你有一個負樣本,即y=0的情況下,我們僅僅需要\theta^{T}x\lt0;
就能將該樣本恰當的分類了。
但是支持向量機的要求更高,不僅僅要求
θTx≥0
或
θTx<0
,而且要求
θTx
比0大很多,或小很多。比如這裏要求
θTx≥1
以及
θTx≤−1
。
這就相當於在支持向量機中嵌入了一個額外的安全因子(或者說是安全距離因子)。接下來讓我們來看看這個因子會導致什麼結果:
具體而言,我接下來會將代價函數中的常數項C設置成一個非常大的值,比如100000或者其他非常大的數,然後再來觀察支持向量機會給出什麼結果。
當代價函數中
minθC∑i=1m[y(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]+12∑j=1nθ2j
C的值非常大時,則最小化代價函數的時候,我們會很希望找到一個使第一項:
∑i=1m[y(i)cost1(
i
)
)
+
(
1
−
y
(
i
)
)
c
o
s
t
0
(
θ
T
x
(
i
)
)
]
+
1
2
∑
j
=
1
n
θ
j
2
C的值非常大時,則最小化代價函數的時候,我們會很希望找到一個使第一項:
∑i=1m[y(i)cost1(θTx(i)cost1(θTx(i))+(1−y(i))cost0(θTx(i))]
(i)
)
+