二、SVM
- 1、什么是SVM
- 2、線性可分SVM
- 1、決策面
- 2、函數間隔和幾何間隔
- 2.1 函數間隔
- 2.2 幾何間隔
- 2.3 最優間隔分類器
- 2.4 利用拉格朗日求解有約束的優化問題
- 2.5 利用拉格朗日求解最有間隔分類器
- 2.6 SMO算法(序列最小最優化算法)
- 3、核技法
- 3.1 核函數
- 3.2 核技巧的應用:
- 4、軟間隔分類器
- 5、SVM的性質
- 6、合頁損失函數
- 7、多分類問題
- 7.1 一對多
- 7.2 一對一
1、什么是SVM
SVM是一種監督式的二分類模型,它通過尋找最大間隔分類平面wx+b=0wx+b=0將正負類樣本進行區分,對于線性不可分情況,通過核技法將低維空間映射到高維空間,使其線性可分。
2、線性可分SVM
1、決策面
對于線性可分數據集,下圖實點表示+1類(正類),空點表示-1類(負類),xixi表示第i個特征向量,所以(x(i),y(i))(x(i),y(i))稱為樣本點。
學習的目標:在特征空間中找到一個分離超平面,可以將不同類別的實例進行分類
分離超平面:wTx(i)+b=0wTx(i)+b=0,由法向量w和截距b決定,法向量指向的一側為正類。
正樣本:wTx(i)+b>0wTx(i)+b>0
負樣本:wTx(i)+b<0wTx(i)+b<0
分離超平面的唯一性:當訓練數據集線性可分時,存在無數個分離超平面,在保證決策面方向不變且不會出現錯分的情況下移動決策面,會在兩側找到兩個極限位置,越過兩個極限位置會出現錯分現象,兩個極限位置的垂直距離就是分類間隔,我們的目標是找到具有最大間隔的決策面。
分類決策函數:f(x)=sign(wTx(i)+b)f(x)=sign(wTx(i)+b)
支持向量:最優分類平面對應的兩個極限位置所穿過的樣本點。
2、函數間隔和幾何間隔
2.1 函數間隔
如果一個超平面wTx(i)+b=0wTx(i)+b=0可以將數據集正確分類,那么對于每個樣本點來說,其函數間隔都大于0,即:
y(i)(wTx(i)+b)>0y(i)(wTx(i)+b)>0因為對于正樣本y(i)=+1y(i)=+1,(wTx(i)+b)>0(wTx(i)+b)>0,對于負樣本y(i)=?1y(i)=?1,(wTx(i)+b)<0(wTx(i)+b)<0
故如果一個樣本被正確分類了,則:
所以函數間隔:
γ(i)=y(i)(wTx(i)+b)γ(i)=y(i)(wTx(i)+b)最大化函數間隔:最大化距離超平面最近的樣本的函數間隔,也就是最大化函數間隔最小的點到超平面的函數間隔。
利用函數間隔存在的問題:只要成倍增加w和b,就能無限增大函數間隔。
2.2 幾何間隔
點到平面的距離:
|wTx(i)+b|||w|||wTx(i)+b|||w||所以幾何間隔為:
γ||w||=y(i)(wTx(i)+b)||w||γ||w||=y(i)(wTx(i)+b)||w||幾何間隔的意義:所有樣本點到分類平面的幾何間隔的最小值
最好的分類平面就是最小幾何間隔最大的平面
2.3 最優間隔分類器
1、目標函數和約束條件
2、令γ=1γ=1,目標函數變為平方
為什么是12||w||212||w||2?
① 1/2 可以在求導中消除平方
② ||w||2||w||2的函數特性更好
3、最終要求的問題
2.4 利用拉格朗日求解有約束的優化問題
有約束的最小化問題可以利用拉格朗日函數轉化為無約束的問題,為了求解線性可分支持向量機的最優化問題,將它作為原始最優化問題,應用拉格朗日對偶性,通過求解對偶問題得到原始問題的最優解,這就是線性可分支持向量機的對偶算法。
我們可以構造一個函數,使其在可行域能與原來的目標函數完全一致,在可行域以外的數值非常大,甚至無窮大,則該無約束的新目標函數就和原來的有約束的問題一致了。獲得拉格朗日函數之后,使用求導方法依然求解困難,進而需要將極小極大問題通過對偶轉化為極大極小問題。
復習拉格朗日函數:
θp(w)θp(w)是對三項和和求極大,也就是調整α,βα,β使得等式達到極大值,其中αi>0αi>0。之后調整w求θp(w)θp(w)的極小值。
當所有約束都滿足,即hi(w)=0,gi(w)≤0hi(w)=0,gi(w)≤0,無論如何調整α,βα,β,后面兩個∑+∑∑+∑的最大值都是0,所以θp(w)=f(w)θp(w)=f(w)。
當所有約束都不滿足的時候,如果hi(w)≠0hi(w)≠0,則可以調整ββ使得θp(w)θp(w)無窮大;如果gi(w)≥0gi(w)≥0,又αi>0αi>0,故可以令αiαi無窮大,θp(w)=∞θp(w)=∞,沒有極小值。
利用對偶方法來對問題進行簡化,也就是將極小極大問題,轉化為極大極小問題。
2.5 利用拉格朗日求解最有間隔分類器
將約束條件寫成拉格朗日不等式約束的形式,獲得拉格朗日方程,也就是最終要求的方程。
L(w,b,α)=12||w||2?∑i=1mαi[y(i)(wTx(i)+b)?1]L(w,b,α)=12||w||2?∑i=1mαi[y(i)(wTx(i)+b)?1]
如何求解目標方程:利用對偶方法,先調整w極小化目標方程,再調整αiαi求極大值
求解極大極小問題:
帶入LL
說明拉格朗日函數只取決于訓練集樣本點的兩兩內積,和w無關,所以可以將maxαminwL()maxαminwL()變為maxαL()maxαL(),注意約束條件。
α>0α>0:是邊界線上的向量,也就是支持向量
α=0α=0:是非邊界上的向量,非支持向量
也就是對于分類模型f(x)=wTx+b=∑αiy(i)x(i)x+bf(x)=wTx+b=∑αiy(i)x(i)x+b,每個新來的數據點要和所有i個已有的數據點做內積,但是非支持向量點的α=0α=0,所以不起作用。
新來的數據點要和所有支持向量做內積
2.6 SMO算法(序列最小最優化算法)
坐標上升法:對于要優化的參數,先固定其他參數,優化一個參數α1α1,優化到最好,再優化其他參數。
SMO算法:
支持向量機問題可以轉化為求解凸二次規劃問題,這樣的問題具有全局最優解,并且有許多算法可以用于這個問題的求解,但是當訓練樣本容量很大時,這些算法往往變得非常低效,以至于無法使用。
SMO算法是將大優化問題分解為多個小優化問題來求解的。這些小優化問題往往很容易求解,并且對它們進行順序求解的結果與將它們作為整體來求解的結果完全一致的。在結果完全相同的同時,SMO算法的求解時間短很多。
因為有約束條件,所以需要選兩個變量進行優化,因為如果改變一個αα的值,肯定需要調整另一個αα的值使得約束條件仍然滿足。
舉例:假設α1,α2α1,α2為兩個變量,α3,α4,...,αNα3,α4,...,αN固定,α1y(1)+α2y(2)+∑mi=3αiy(i)=0α1y(1)+α2y(2)+∑i=3mαiy(i)=0
即:α2=y(2)(?∑mi=3αiy(i)?α1y(1))α2=y(2)(?∑i=3mαiy(i)?α1y(1))
也就是α2α2確定,α1α1也隨之確定。
SMO算法的目標是求出一系列alpha和b,一旦求出了這些alpha,就很容易計算出權重向量w并得到分隔超平面。
SMO算法的工作原理是:每次循環中選擇兩個alpha進行優化處理。一旦找到了一對合適的alpha,那么就增大其中一個同時減小另一個。這里所謂的”合適”就是指兩個alpha必須符合以下兩個條件,條件之一就是兩個alpha必須要在間隔邊界之外,而且第二個條件則是這兩個alpha還沒有進行過區間化處理或者不在邊界上。
3、核技法
對在低維空間線性不可分的數據集,通過映射到高維空間,從而線性可分
本來做空間變換需要對空間中的所有點都做變換,但是這種計算太復雜,于是我們不顯示處理數據,而是從模型上直接體現。
用線性分類方法求解非線性問題分為兩步:
1)使用一個變換將原空間的數據映射到新空間
2)在新空間用線性分類學習方法從訓練數據中學習分類模型
3.1 核函數
設χχ為輸入空間,又設HH為特征空間(希爾伯特空間),如果存在一個從χχ到HH的映射:?(x)=χ→H?(x)=χ→H
使得所有的x,z∈χx,z∈χ,函數K(x,z)K(x,z)滿足條件:K(x,z)=?(x)??(z)K(x,z)=?(x)??(z)
則K(x,z)K(x,z)稱為核函數,?(x)?(x)稱為映射函數。
3.2 核技巧的應用:
SVM核函數的選擇對于其性能的表現有至關重要的作用,尤其是針對那些線性不可分的數據,因此核函數的選擇在SVM算法中就顯得至關重要。對于核技巧我們知道,其目的是希望通過將輸入空間內線性不可分的數據映射到一個高緯的特征空間內使得數據在特征空間內是可分的,我們定義這種映射為?(x)?(x),那么我們就可以把求解約束最優化問題變為
但是由于從輸入空間到特征空間的這種映射會使得維度發生爆炸式的增長,因此上述約束問題中內積?i??j?i??j
的運算會非常的大以至于無法承受,因此通常我們會構造一個核函數
從而避免了在特征空間內的運算,只需要在輸入空間內就可以進行特征空間的內積運算。通過上面的描述我們知道要想構造核函數κ ,我們首先要確定輸入空間到特征空間的映射,但是如果想要知道輸入空間到映射空間的映射,我們需要明確輸入空間內數據的分布情況,但大多數情況下,我們并不知道自己所處理的數據的具體分布,故一般很難構造出完全符合輸入空間的核函數,因此我們常用如下幾種常用的核函數來代替自己構造核函數:
線性核函數
k(x,xi)=x?xik(x,xi)=x?xi
線性核,主要用于線性可分的情況,我們可以看到特征空間到輸入空間的維度是一樣的,其參數少速度快,對于線性可分數據,其分類效果很理想,因此我們通常首先嘗試用線性核函數來做分類,看看效果如何,如果不行再換別的多項式核函數
k(x,xi)=((x?xi)+1)dk(x,xi)=((x?xi)+1)d
多項式核函數可以實現將低維的輸入空間映射到高緯的特征空間,但是多項式核函數的參數多,當多項式的階數比較高的時候,核矩陣的元素值將趨于無窮大或者無窮小,計算復雜度會大到無法計算。
- 高斯(RBF)核函數
k(x,xi)=exp(?||x?xi||22δ2)k(x,xi)=exp(?||x?xi||22δ2)
高斯徑向基函數是一種局部性強的核函數,其可以將一個樣本映射到一個更高維的空間內,該核函數是應用最廣的一個,無論大樣本還是小樣本都有比較好的性能,而且其相對于多項式核函數參數要少,因此大多數情況下在不知道用什么核函數的時候,優先使用高斯核函數。
- sigmoid核函數
k(x,xi)=tanh(η<x,xi>+θ)k(x,xi)=tanh(η<x,xi>+θ)
采用sigmoid核函數,支持向量機實現的就是一種多層神經網絡。
因此,在選用核函數的時候,如果我們對我們的數據有一定的先驗知識,就利用先驗來選擇符合數據分布的核函數;如果不知道的話,通常使用交叉驗證的方法,來試用不同的核函數,誤差最下的即為效果最好的核函數,或者也可以將多個核函數結合起來,形成混合核函數。在吳恩達的課上,也曾經給出過一系列的選擇核函數的方法:
如果特征的數量大,樣本數量較少,則選用LR或者線性核的SVM;
樣本少,但是特征數目大,表示特征空間維度很高,一般認為是線性可分的
如果特征的數量小,樣本的數量正常,則選用SVM+高斯核函數;
特征少則疼我特征空間維度較低,可以用高斯核將其映射到高維空間
如果特征的數量小,而樣本的數量很大,則需要手工添加一些特征從而變成第一種情況。
交叉驗證:先拿出來小的數據集應用不同的核來驗證哪個核比較好,然后再應用在大數據集上去。
4、軟間隔分類器
針對高維空間仍然線性不可分的數據,提出了軟間隔分類器,就是給目標函數加懲罰項,允許某些數據點用于小于1的幾何間隔,但是這些點要受到懲罰。
ξiξi表示小于1的程度
C表示加載懲罰項的系數:
① C值越大,對誤差的懲罰越大,也就是越不能容忍誤差,容易出現過擬合。
② C越小,對誤差的懲罰越小,不再關注分類是否正確,只要求間隔越大越好,容易欠擬合。
RBF和的σσ和參數gamma的關系:
k(x,xi)=exp(?||x?xi||22δ2)=exp(?gamma?||x?xi||2)k(x,xi)=exp(?||x?xi||22δ2)=exp(?gamma?||x?xi||2)
?gamma=12σ2?gamma=12σ2
RBF的幅寬為σσ,它會影響每個支持向量對應的高斯的作用范圍,從而影響泛化性能:
① σσ越大,gammagamma越小,作用范圍越大,高斯分布覆蓋范圍越大,對未知樣本有較好的泛化能力,但如果σσ過大,平滑效果太大,訓練集和測試集都沒法得到好的結果。
② σσ越小,gammagamma越大,作用范圍越小,高斯分布是高高瘦瘦的,只會作用于支持向量樣本附近,對未知樣本分類效果較差,容易過擬合。
軟間隔分類器和硬間隔分類器的區別,αα的限制條件變多了,0≤αi≤C0≤αi≤C。
5、SVM的性質
6、合頁損失函數
對于線性支持向量機來說,其模型的分離超平面為wTx+b=0wTx+b=0,決策函數f(x)=sign(wTx+b)f(x)=sign(wTx+b),其學習策略為軟間隔最大化,學習算法為凸二次規劃。
線性支持向量機還有另一種解釋,就是最小化以下目標函數:
∑i=1N[1?y(i)(wTx(i)+b)+]+λ||w||2∑i=1N[1?y(i)(wTx(i)+b)+]+λ||w||2
第一項為經驗損失或經驗風險,第二項是系數為λλ的w的范數,是正則化項。
函數
稱為合頁損失函數,下標+表示取正值的函數:
也就是說,當樣本點被正確分類且函數間隔大于1時,損失為0,否則損失為1?y(wTx+b)1?y(wTx+b)。
合頁損失函數圖示:橫軸是函數間隔,縱軸是損失
黑色實線為Hinge Loss:
① 當函數間隔小于1的時候,離1越遠,損失越大
② 當函數間隔大于1的時候,損失為0
圖中還畫出0-1損失函數,可以認為它是二類分類問題的真正的損失函數,而合頁損失函數是0-1損失函數的上界。由于0-1損失函數不是連續可導的,直接優化由其構成的目標函數比較困難,可以認為線性支持向童機是優化由0-1損失函數的上界(合頁損失函數)構成的目標函數。這時的上界損失函數又稱為代理損失函數(surrogate loss function)。
圖中虛線顯示的是感知機的損失函數支持向量機185.png。這時,當樣本點支持向量機122.png被正確分類時,損失是0,否則損失是支持向量機123.png。相比之下,合頁損失函數不僅要分類正確,而且確信度足夠高時損失才是0。也就是說,合頁損失函數對學習有更高的要求。
7、多分類問題
7.1 一對多
one-versus-rest
N類就需要N個分類器
訓練時依次把某個類別的樣本歸為一類,其他剩余的樣本歸為另一類,這樣k個類別的樣本就構造出了k個SVM。分類時將未知樣本分類為具有最大分類函數值的那類。
假如我有四類要劃分(也就是4個Label),他們是A、B、C、D。
于是我在抽取訓練集的時候,分別抽取
(1)A所對應的向量作為正集,B,C,D所對應的向量作為負集;
(2)B所對應的向量作為正集,A,C,D所對應的向量作為負集;
(3)C所對應的向量作為正集,A,B,D所對應的向量作為負集;
(4)D所對應的向量作為正集,A,B,C所對應的向量作為負集;
使用這四個訓練集分別進行訓練,然后的得到四個訓練結果文件。
在測試的時候,把對應的測試向量分別利用這四個訓練結果文件進行測試。
最后每個測試都有一個結果f1(x),f2(x),f3(x),f4(x)。
于是最終的結果便是這四個值中最大的一個作為分類結果。
優點:
訓練k個分類器,個數較少,其分類速度相對較快。
缺點:
①每個分類器的訓練都是將全部的樣本作為訓練樣本,這樣在求解二次規劃問題時,訓練速度會隨著訓練樣本的數量的增加而急劇減慢;
②同時由于負類樣本的數據要遠遠大于正類樣本的數據,從而出現了樣本不對稱的情況,且這種情況隨著訓練數據的增加而趨向嚴重。解決不對稱的問題可以引入不同的懲罰因子,對樣本點來說較少的正類采用較大的懲罰因子C;
③還有就是當有新的類別加進來時,需要對所有的模型進行重新訓練。
7.2 一對一
N類需要N(N?1)2N(N?1)2個分類器
其做法是在任意兩類樣本之間設計一個SVM,因此k個類別的樣本就需要設計k(k?1)/2k(k?1)/2個SVM。
當對一個未知樣本進行分類時,最后得票最多的類別即為該未知樣本的類別。
Libsvm中的多類分類就是根據這個方法實現的。
示例:
假設有四類A,B,C,D四類。在訓練的時候我選擇A,B; A,C; A,D; B,C; B,D;C,D所對應的向量作為訓練集,然后得到六個訓練結果,在測試的時候,把對應的向量分別對六個結果進行測試,然后采取投票形式,最后得到一組結果。
投票是這樣的:
A=B=C=D=0;
(A,B)-classifier 如果是A win,則A=A+1;otherwise,B=B+1;
(A,C)-classifier 如果是A win,則A=A+1;otherwise, C=C+1;
…
(C,D)-classifier 如果是A win,則C=C+1;otherwise,D=D+1;
The decision is the Max(A,B,C,D)
評價:這種方法雖然好,但是當類別很多的時候,model的個數是n*(n-1)/2,代價還是相當大的。
優點:不需要重新訓練所有的SVM,只需要重新訓練和增加語音樣本相關的分類器。在訓練單個模型時,相對速度較快。
缺點:所需構造和測試的二值分類器的數量關于k成二次函數增長,總訓練時間和測試時間相對較慢。
總結
- 上一篇: 画面有点上头!男子扛铁板狂砸秦桧雕像:《
- 下一篇: 全新三星钱包在印度推出:可存储登机牌、信