1. 程式人生 > 其它 >機器學習筆記10

機器學習筆記10

支援向量機

1.1 優化目標 Optimization objective

與邏輯迴歸和神經網路相比,還有一種更加強大的演算法是支援向量機(Support Vector Machine) ,它在學習複雜的非線性方程時提供了一種更為清晰,更加強大的方式並且廣泛應用於工業界和學術界

我們通過回顧邏輯迴歸慢慢的引入支援向量機

對於代價函式中的一部分來說需要做一些修改,假設只有一個數據樣本,把 hθ(x)=1/(1+e-θTx) 帶入公式,把 θTx看成是z,用灰色曲線作出影象

If y = 1, we want hθ(x) ≈ 1, z>>0;
If y = 0, we want hθ(x) ≈ 0, z<<0;

現在我們用玫瑰色曲線函式來代替灰色曲線函式。左邊的玫瑰色曲線函式稱為cost1(z),右邊的玫瑰色曲線函式稱為 cost0(z)

回到邏輯迴歸的代價函式中,對其進行修改轉變為支援向量機的代價函式,把cost1(z)cost0(z)替換掉原來的函式,同時對常數項也進行處理(處理常數項對求最優引數沒有影響),先去掉 1 / m,再去掉 λ ,把代價函式整體看成 A + λB的形式,轉變之後就變成 CA +B 的形式(其中 C = 1 / λ )

最後整理一下就可以得到支援向量機的代價函式,同時邏輯迴歸中假設的輸出是一個概率值。 而 SVM 直接預測 y = 1,還是 y = 0

1.2 最大間隔的理解 Large Margin Intuition

如果C的數值比較大的話,想要最小化代價函式,那就需要最小化cost1(z)和cost0(z),從影象看出可以代價於當y=1時,z≥1,當y=0時,z≤-1

只有當C 特別大的時候, SVM 才是一個最大間隔分類器,那麼當 C 特別大時,在優化過程中,第一項會接近於0,目標變為最小化第二項

支援向量機的最大間隔就是在兩類之間有許多的決策邊界,需要找到一條邊界使得margin最大,如下圖

對於有異常值的支援向量機來說,如果想將樣本用最大間距分開,即將 C 設定的很大。那麼僅因為一個異常點,決策邊界會從黑線變成那條粉線,這實在是不明智的,如果 C 設定的小一點,最終得到這條黑線。它可以忽略一些異常點的影響,而且當資料線性不可分的時候,也可以將它們恰當分開,得到更好地決策邊界

值得注意的是,因為 C = 1 / λ,因此C 較小時,相當於 λ 較大。可能會導致欠擬合,相當於高偏差 ,C 較大時,相當於 λ 較小。可能會導致過擬合,相當於高方差

1.3 大間距分類背後的數學 The mathematics behind large margin classification

1.3.1 向量內積

向量內積: 兩個向量 u 和 v ,uTv 就叫做向量 u 和 v 之間的內積,∥u∥ 表示 u 的範數norm,也就是向量 u 的歐幾里得長度( √(u12+u22) ),屬於一個實數

在這裡,內積可以用兩種方式表示:

第一種是通過投影的方式計算,uTv = ||u|| · ||v|| · cosθ = ||u|| · p (p也是屬於一個實數,如果p是向量反向上的投影則p<0)

第二種是通過矩陣乘法的方式計算,uTv = u1 × v1 + u2 × v2 = vTu

1.3.2 SVM 代價函式的另一種理解方式

有了內積的知識,對支援向量機的代價函式我們就有了另一種理解方式,在之前說到的代價函式中如果將C設的很大,代價函式只剩下後面的那項,假設θ0=0,引數個數n=2,可以代價函式進行轉變成J(θ) = 1/2 × ||θ||^2,θT和x(i)看成之前講的向量uT和v, 這樣就可以得到 θTx = p · ||θ|| (p 是 x 在 θ 上的投影)

1.3.3 選擇更優的決策邊界

如果我選擇綠色直線作為決策邊界,那麼藍色直線就是引數向量了(根據線性方程中法向量的知識),那麼可以看每個資料在引數向量上的投影都非常的短

對於正樣本 x(1) 而言,想要p(1) ⋅ ∥θ∥ >= 1,現在 p(1) 長度非常短,就意味著 ||θ|| 需要非常大

對於負樣本 x(2) 而言,想要p(1) ⋅∥θ∥ <= −1,現在p(2) 長度非常短,就意味著 ||θ|| 需要非常大

但我們的目標函式是希望最小化引數 θ 的範數,因此我們希望: 投影長度 p(i) 儘可能大

如果我們換一個決策邊界,那麼就可以看到每一個數據在引數向量上的投影都非常的長,這正是我們在目標函式中希望最小化引數 θ 的範數

以上都是討論在θ0 = 0的情況下,θ0 = 0的意思是我們讓決策界通過原點。如果θ0≠ 0,決策邊界不過原點 ,結論同樣成立

1.4 核函式 Kernels

1.4.1 Kernels I

對於這種非線性分類問題,可以採用高階數的多項式模型來解決,在該模型中我們會把特徵 x 用新特徵 f 來替代,比如: f1 = x1 , f2 = x2 , f3 = x1 x2 , f4 = x12 ...

在構建新特徵 f1 , f2 , f3 的時候還有沒有更好的方法呢?其實是有的,我們可以通過核函式來構建新特徵

來看一下下圖中的例子,假設給定一個訓練例項 x ,我們通過 x 與預先選定的 landmarks l(1) , l(2) , l(3) 的近似程度來計算新的特徵

計算方式:fi = similarity(x, l (i) ) = exp( -( ||x − l (i) || )2 / 2σ2 ),這其實就是用了高斯函式,其中i為landmarks 的索引,||x − l (i) || 為例項 x 中所有特徵與 landmark l(i) 距離的和,與之前說的|| w ||相似

如果一個訓練例項 x 與 l 很近,則 f e−0 ≈ 1;與 l 很遠,則 f e−( 較大的數 ) 0。 具體的計算如下:

通過一個例子,以水平面的座標為 x1, x 2 ,垂直座標軸為 f 構建3D影象和等高線圖來觀察一下對於不同的 σ 對 f 的影響

假設θ0 = -0.5,θ1 = 1θ2 = 1,θ3 = 0,那粉色點離 l (1) 更近,所以 f1 接近 1,而 f2 ,f3 接近 0。因此h θ(x)≥ 0,因此預測y = 1;同理,綠色點離 l(2) 較近的,也預測y = 1;但藍綠色點離三個 landmark 都較遠,預測y = 0

那圖中紅色封閉曲線就可以組成決策邊界了,在整個預測過程中,我們採用的特徵不是訓練例項本身的特徵,而是通過核函式計算出的新特徵f1 , f2 , f3

1.4.1 Kernels II

之前在選擇landmark的時候我們是隨便選擇三個點的,那在實際應用中我們是如何獲得landmark的呢?

我們是把訓練集中的資料點直接作為landmark,這樣 l(i) 就會對應訓練集中 x(i),相當於把 l(i) 初始化為 x(i)

對於將 l(i) 初始化為 x(i) ,這麼做的好處是得到的新特徵是建立在 原有特徵 與 訓練集中其他原有特徵之間距離 的基礎之上的

新特徵 f 向量與原特徵向量的形式保持一致,在初始化時,新增 f0 = 1

將核函式引入支援向量機的代價函式中,用新特徵 f 替換掉原特徵 x,預測一個例項 x 對應結果的方法是:給定x,計算新特徵 f,當 θTf >= 0 時預測 y = 1; 否則反之

同時在計算上,為了簡化計算, 在計算正則項 θTθ 時,用 θTMθ 代替 θTθ ,其中 M 是一個矩陣,核函式不同則M不同

整理一下在使用核函式的支援向量機時遇到的兩個引數(C和σ)對新特徵 f 的影響:

當 C 較大,相當於 λ 小,可能會導致過擬合,高方差
當 C 較小,相當於 λ 大,可能會導致欠擬合,高偏差


當 σ 較大時,影象緩和,可能會導致低方差,高偏差
當 σ 較小時,影象陡峭,可能會導致低偏差,高方差

1.5 使用支援向量機 Using an SVM

在使用支援向量機來求解引數θ的時候,我們通常會通過調包的方式去完成,除此之外,我們還需要選擇一個合適的引數C和是否選擇使用核函式,如果選擇使用核函式,那就還需要注意一點別的東西(比如使用高斯函式作為核函式的時候,我們就需要選擇一個合適的引數σ)

如果是使用高斯函式,那麼還需要注意的是特徵的放縮,就比如在房屋價格預測的例子中,房屋尺寸大小和房屋數量顯然就不是一個數量級的,如果不進行特徵放縮的話,那房屋數量這個特徵的影響力可能就很小了

當然除了高斯函式以外也有別的函式,比如多項式核函式(Polynomial Kernel), 字串核函式(String kernel), 卡方核函式( chi-square kernel) ,直方圖交集核函式(histogram intersection kernel) 等。它們的目標也都是根據訓練集和地標之間的距離來構建新特徵,只是高斯函式是屬於比較常用的函式

在多分類問題上,可以訓練K個支援向量機來解決問題,不過大多數的支援向量機包已經構建好了多分類功能了

對於模型的選擇上還需要根據實際的情況來選擇,假設有n個特徵,m個訓練樣本

如果 n » m,即訓練集資料量不夠支援我們訓練一個複雜的非線性模型,選用邏輯迴歸模型或者不帶核函式的 SVM。
如果 n較小,m中等,例如n在 1-1000 之間,而m在 10-10000 之間,使用高斯核函式的 SVM。(如果訓練集非常大,高斯核函式的SVM 會非常慢)
如果 n較小,m較大,例如n在 1-1000 之間,而m大於 50000,則使用 SVM 會非常慢。解決方案是創造、增加更多的特徵,然後使用邏輯迴歸或不帶核函式的 SVM

其實邏輯迴歸和不帶核函式的SVM 非常相似,不過具體還得根據實際情況來選擇

如果是使用神經網路的話,神經網路的效果可能會比支援向量機更好,但是神經網路的缺點就是訓練太慢了