本部落格記錄《機器學習實戰》(machinelearninginaction)的學習過程,包括演算法介紹和python實現。解決第乙個問題,即減小雜訊點的影響,可以通過鬆弛變數來完成。簡單地說就是用乙個變數對約束條件進行調整,從而容忍個別資料點被分錯。原本的問題是:
min12|
|w||
2,s.
t.,y
i(wx
i+b)
≥1對每個資料點引入乙個鬆弛變數ξi
≥0放寬約束條件,變成: yi
(wxi
+b)≥
1−ξi
但此時的問題也要修改,因為我們要對鬆弛變數加以限制,否則無限大的鬆弛變數會使約束失效。此時問題變成:
min12|
|w||
2+c∑
i=1n
ξis.
t.,y
i(wx
i+b)
≥1−ξ
i 此時我們要最小化的變數多了乙個鬆弛變數的總和,其中的常量c用於控制兩者的權重。
使用同樣的方法把這個問題轉化為對偶問題,最後化簡為:
maxα∑i
=1nα
i−12
∑i,j
=1nα
iαjy
iyjx
tixj
s.t.
,0≤α
i≤c,
i=1,
...,
n∑i=
1nai
yi=0
這個結果出乎意料地簡單,相比原來只多了乙個
α 上限的約束。
這樣,對於少數偏離較遠的資料點,其
ξ 就會比較大,從而使這個點可以落到平面之間,也就不會作為支援向量而影響平面引數。
解決了雜訊點的問題,現在考慮將如何用svm解決非線性資料的分類。解決這個問題的方法是把低維資料對映到高維進行計算,因為在低維度中線性不可分的資料,到了高維度就會變成線性可分的,舉個例子來簡單說明:
假設二維中的線性不可分的資料可以用曲線: a1
x2+a
2x+a
3y2+
a4y+
a5xy
+b=0
來分隔。這時另 ⎧⎩
⎨⎪⎪⎪
⎪⎪⎪⎪
⎪⎪⎪x
2=x1
x=x2
y2=x
3y=x
4xy=
x5這樣在5維空間中,原本的分隔曲線就變成了線性的分隔超平面: ∑i
=1na
ixi+
b=0
此時在5維空間中,這組資料就變成了線性可分的。
下面這個圖直觀展示了2維線性不可分資料轉化到3維空間變為線性可分的情況:
現在看如何將其應用到svm上,首先要解決的乙個問題就是如何對映,就是說對於n維線性不可分的資料,要將其對映到幾維,以及對映成哪些維度。對映過後,在高緯度上解決問題:
maxα∑i
=1nα
i−12
∑i,j
=1nα
iαjy
iyjx
tixj
s.t.
,0≤α
i≤c,
i=1,
...,
n∑i=
1nai
yi=0
這個問題在高維和低維上,唯一的區別就是xt
ixj ,即xi
和xj 的內積,以後寫作⟨x
i,xj
⟩ 。也就是說在高維度中需要做的只有計算內積。這時候,相比考慮如何對映資料到高維,然後進行內積計算,如果能夠直接在低維度中計算高緯度的內積,我們就省去了對映到高維的過程,同時也減少了很多的計算量,因為對映後的維度可能會很大甚至無窮無盡。幸運的是,有這樣一種方法可以在低維中計算高維的內積,這種方法就是核函式。
考慮具有2維特徵的向量a(
x1,x
2)和b
(y1,
y2) ,容易算出: (⟨
a,b⟩
+1)2
=2x1
y1+x
21y2
1+2x
2y2+
x22y
22+x
1x2y
1y2+
1 看到這麼整齊的格式,可以聯想到這個結果其實可以看成某個維度下兩個向量的內積。設由低維到高維的對映
ϕ 為(x
,y)−
>(2
√x,x
2,2√
y,y2
,xy,
1),那麼對於上面的a和b就有: ϕ(
a)=(
2√x1
,x21
,2√x
2,x2
2,x1
x2,1
) ϕ(
b)=(
2√y1
,y21
,2√y
2,y2
2,y1
y2,1
)
兩者求內積得到: ⟨ϕ
(a),
ϕ(b)
⟩=(⟨
a,b⟩
+1)2
這個結果將低維的計算結果與高維聯絡了起來,也就是說在低維度中進行內積計算之後,只要將結果再簡單地處理(在這個例子中就是加1求平方)就能夠得到某個高維度下的內積結果,數學是真的神奇。
這個在低維度下求兩個向量在高緯度內積的函式就叫做核函式,在這個例子中: k(
a,b)
=(⟨a
,b⟩+
1)2
引入了核函式之後,svm的問題就變成了:
maxα∑i
=1nα
i−12
∑i,j
=1nα
iαjy
iyjk
(xi,
xj)s
.t.,
0≤αi
≤c,i
=1,.
..,n
∑i=1
naiy
i=0
這個問題看上去和原來之差了乙個核函式,但解的空間卻從低維變到了高維,這使svm可以解決線性不可分的問題,於此同時因為計算還是在低維度中進行,所以計算量也幾乎沒有增加多少。
在具體問題中核函式的選擇會對分類結果產生影響,列舉幾個常用的核函式: 線性
核:k(
a,b)
=⟨a,
b⟩ 多
項式核:
k(a,
b)=(
⟨a,b
⟩+r)
d 高斯
核:k(
a,b)
=exp(−
||a−
b||2
2σ2)
SVM 支援向量機學習(6) 非線性SVM和核函式
對於線性可分問題和線性問題,都已經有很好的解決方案為了。對於非線性問題,產生了非線性svm,關鍵在於核技巧 kernel trick 的引用。如圖,對於正負樣本無法用直線分開。採用橢圓這樣的非線性模型才可正確分開。對於t,若可用r中的乙個超曲面正確分開,則稱該問題為非線性的可分問題。如圖的橢圓方程為...
非線性SVM與核函式
用線性分類的方法求解非線性分類問題分為兩步 首先使用乙個變換將原空間的資料對映到新空間 然後在新空間裡利用線性分類學習方法從訓練資料中學習分類模型。核技巧就是這種方法。核技巧應用到svm,基本想法是通過乙個非線性變換將輸入空間對應於乙個特徵空間,使得在輸入空間中的超曲面模型對應於特徵空間中的超平面模...
機器學習之線性分類SVM
coding utf 8 created on fri nov 30 21 05 40 2018 author muli import matplotlib.pyplot as plt import numpy as np from sklearn import datasets,cross val...