機器學習實戰 6 (非線性SVM)

2021-08-07 22:49:27 字數 3398 閱讀 2852

本部落格記錄《機器學習實戰》(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...