[机器学习] 分类 --- Support Vector Machine (SVM)
1. 基本概念
支持向量機(Support Vector Machine, SVM)的基本模型是在特征空間上找到最佳的分離超平面使得訓練集上正負樣本間隔最大。SVM是用來解決二分類問題的有監督學習算法,在引入了核方法之后SVM也可以用來解決非線性問題。
一個普通的SVM是一條直線,用來完美劃分linearly separable 的兩類。但這又不是一條普通的直線,這是無數條可以分類的直線中最完美的,因為它恰好在兩個類的中間,距離兩個類的點都一樣遠。而所謂的Support vetor 就是這些離分界線最近的點。如果去掉這些點,直線多半會改變位置,所以說這些vector(點)support(定義了)machine(分類器)
分類算法:支持向量機(SVM)是一個分類算法(機器學習中經常把算法稱為一個“機器”),它的目標是找到圖中實線所表示的決策邊界,也稱為超平面(Hyperplane)
支持向量(Support vectors):支持向量就是圖中虛線穿過的數據點(兩個×與一個o),直觀上來看,它們確定了超平面的位置——超平面與過同一類的兩個支持向量(兩個×)的直線平行,并且兩類支持向量到超平面的距離相等.
與logistic回歸的對比:SVM與logistic回歸用的是相同的模型,但是處理方式不一樣——logistic回歸用概率的方式求解模型(最大似然估計),SVM從幾何的角度解析;另外在logistic回歸中,每一個數據點都會對分類平面產生影響,在SVM中它卻只關注支持向量(如果支持向量無變化,增加或者刪除一些遠處的數據點,產生的超平面還是一樣的)——所以產生了這兩個不同的算法,但是它們還是比較相似的.
一般SVM有下面三種:
- 硬間隔支持向量機(線性可分支持向量機):當訓練數據線性可分時,可通過硬間隔最大化學得一個線性可分支持向量機。
- 軟間隔支持向量機:當訓練數據近似線性可分時,可通過軟間隔最大化學得一個線性支持向量機。
- 非線性支持向量機:當訓練數據線性不可分時,可通過核方法以及軟間隔最大化學得一個非線性支持向量機。
?
2. 硬間隔支持向量機
給定訓練樣本集D={(x1→,y1),(x2→,y2),…,(xn→,yn)}
yi∈{+1,?1},i表示第i個樣本,n表示樣本容量。分類學習最基本的想法就是基于訓練集D
在特征空間中找到一個最佳劃分超平面將正負樣本分開,而SVM算法解決的就是如何找到最佳超平面的問題。
該分類決策函數也稱為線性可分支持向量機。?
在測試時對于線性可分支持向量機可以用一個樣本離劃分超平面的距離來表示分類預測的可靠程度,如果樣本離劃分超平面越遠則對該樣本的分類越可靠,反之就不那么可靠。
那么,什么樣的劃分超平面是最佳超平面呢?
對于有A、B、C三個超平面,很明顯應該選擇超平面B,也就是說超平面首先應該能滿足將兩類樣本點分開。
?
對于圖2的A、B、C三個超平面,應該選擇超平面C,因為使用超平面C進行劃分對訓練樣本局部擾動的“容忍”度最好,分類的魯棒性最強。例如,由于訓練集的局限性或噪聲的干擾,訓練集外的樣本可能比圖2中的訓練樣本更接近兩個類目前的分隔界,在分類決策的時候就會出現錯誤,而超平面C受影響最小,也就是說超平面C所產生的分類結果是最魯棒性的、是最可信的,對未見樣本的泛化能力最強。
?
?
1 數學建模
求解這個”決策面”的過程,就是最優化。一個最優化問題通常有兩個基本的因素:
1)目標函數,也就是你希望什么東西的什么指標達到最好;
2)優化對象,你期望通過改變哪些因素來使你的目標函數達到最優。在線性SVM算法中,目標函數顯然就是那個”分類間隔”,而優化對象則是決策面。所以要對SVM問題進行數學建模,首先要對上述兩個對象(”分類間隔”和”決策面”)進行數學描述。按照一般的思維習慣,我們先描述決策面。
數學建模的時候,先在二維空間建模,然后再推廣到多維。
?
1)分類間隔 方程
我們將能夠正確劃分正負樣本的超平面的表達式定義為:?
我們已經知道間隔的大小實際上就是支持向量對應的樣本點到決策面的距離的二倍。那么圖中的距離d我們怎么求?我們高中都學過,點到直線的距離距離公式如下:
公式中的直線方程為Ax0+By0+C=0,點P的坐標為(x0,y0)。現在,將直線方程擴展到多維,求得我們現在的超平面方程,對公式進行如下變形:
?
2)?最大間隔分類器
?
我們已經順利獲得了目標函數的數學形式。但是為了求解w的最大值。我們不得不面對如下問題:
- 我們如何判斷超平面是否將樣本點正確分類?
- 我們知道相求距離d的最大值,我們首先需要找到支持向量上的點,怎么在眾多的點中選出支持向量上的點呢?
上述我們需要面對的問題就是約束條件,也就是說我們優化的變量d的取值范圍受到了限制和約束。事實上約束條件一直是最優化問題里最讓人頭疼的東西。但既然我們已經知道了這些約束條件確實存在,就不得不用數學語言對他們進行描述。但SVM算法通過一些巧妙的小技巧,將這些約束條件融合到一個不等式里面。
這個二維平面上有兩種點,我們分別對它們進行標記:
- 紅顏色的圓點標記為1,我們人為規定其為正樣本;
- 藍顏色的五角星標記為-1,我們人為規定其為負樣本。
對每個樣本點xi加上一個類別標簽yi:
如果我們的超平面方程能夠完全正確地對上圖的樣本點進行分類,就會滿足下面的方程:
?
如果我們要求再高一點,假設決策面正好處于間隔區域的中軸線上,并且相應的支持向量對應的樣本點到決策面的距離為d,那么公式進一步寫成:
上述公式的解釋就是,對于所有分類標簽為1的樣本點,它們到直線的距離都大于等于d(支持向量上的樣本點到超平面的距離)。對于所有分類標簽為-1的樣本點,它們到直線的距離都小于等于d。公式兩邊都除以d,就可以得到:
? ? ? ? ? ??
因為||w||和d都是標量。所上述公式的兩個矢量,依然描述一條直線的法向量和截距。
上述兩個公式,都是描述一條直線,數學模型代表的意義是一樣的。現在,讓我們對wd和γd重新起個名字,就叫它們w和γ。因此,我們就可以說:"對于存在分類間隔的兩類樣本點,我們一定可以找到一些超平面面,使其對于所有的樣本點均滿足下面的條件:
上述方程即給出了SVM最優化問題的約束條件。這時候,可能有人會問了,為什么標記為1和-1呢?因為這樣標記方便我們將上述方程變成如下形式:? ? ?
正是因為標簽為1和-1,才方便我們將約束條件變成一個約束方程,從而方便我們的計算。
3) 線性SVM優化問題基本描述
現在整合一下思路,我們已經得到我們的目標函數:
我們的優化目標是是d最大化。我們已經說過,我們是用支持向量上的樣本點求解d的最大化的問題的。那么支持向量上的樣本點有什么特點呢?
現在我們就可以將我們的目標函數進一步化簡:
?
因為,我們只關心支持向量上的點。隨后我們求解d的最大化問題變成了||w||的最小化問題。進而||w||的最小化問題等效于
為什么要做這樣的等效呢?這是為了在進行最優化的過程中對目標函數求導時比較方便,但這絕對不影響最優化問題最后的求解。我們將最終的目標函數和約束條件放在一起進行描述:
?
這里n是樣本點的總個數,縮寫s.t.表示”Subject to”,是”服從某某條件”的意思。上述公式描述的是一個典型的不等式約束條件下的二次型函數優化問題,同時也是支持向量機的基本數學模型。
?
3. 軟間隔支持向量機
在現實任務中很難找到一個超平面將不同類別的樣本完全劃分開,即很難找到合適的核函數使得訓練樣本在特征空間中線性可分。退一步說,即使找到了一個可以使訓練集在特征空間中完全分開的核函數,也很難確定這個線性可分的結果是不是由于過擬合導致的。解決該問題的辦法是在一定程度上運行SVM在一些樣本上出錯,為此引入了“軟間隔”(soft margin)的概念,如圖4所示:
4. 非線性支持向量機
現實任務中原始的樣本空間D中很可能并不存在一個能正確劃分兩類樣本的超平面。如圖中所示的問題就無法找到一個超平面將兩類樣本進行很好的劃分。 對于這樣的問題可以通過將樣本從原始空間映射到特征空間使得樣本在映射后的特征空間里線性可分。
其實核函數的本質作用可以簡練概括為:將低維空間的線性不可分類問題,借助核函數轉化為高維空間的線性可分,進而可以在高維空間找到分類的最優邊界(超平面)。(下圖引自July‘s?支持向量機通俗導論(理解SVM的三層境界))。若要要分類下圖紅色和藍色樣本點:
?
? ? ? ? ? ? ??
? ? ? ? ? ? ? ? ? 二維線性不可分? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?三維線性可分
?
核方法
用于產生非線性分類邊界。
linear,線性核,會產生線性分類邊界,一般來說它的計算效率最高,而且需要數據最少。線性函數。
poly,多項式核,會產生多項式分類邊界。多項式函數。
svc = svm.SVC(kernel='poly',degree=4) svc.fit(X, y)rbf,徑向基函數,也就是高斯核,是根據與每一個支持向量的距離來決定分類邊界的,它能映射到無限維,是最靈活的方法,但是也需要最多的數據。容易產生過擬合問題。指數函數。
svc = svm.SVC(kernel='rbf', gamma=1e2)?
Question1:? 為什么正負樣本的分類邊界是+1和 -1
Answer:純粹為了計算方便,下面證明一下為什么可以是正負1
Proof(不考慮軟間隔和核方法,也就是該分類問題在該空間內是確定的線性可分):
選擇用1作為邊界,完全是為了計算方便.
?
Question2:? ?SVM函數間隔中, γ??=y(wTx+b)=yf(x)中的y是只取1和-1 嗎?y的唯一作用就是確保函數間隔的非負性?
這個問題將問題搞混了。y是個分類標簽,二分時,y就取了兩個值,而剛好取了-1和1。只是因為用超平面分類時,不同的類中的點的函數值剛好有不同的符號,所以這里就用符號來進行了分類。
具體闡述如下:
1. 對于二類問題,因為y只取兩個值,這兩個是可以任意取的,只要是取兩個值就行;
2. 支持向量機去求解二類問題,目標是求一個特征空間的超平面;而超平面分開的兩類對應于超平面的函數值的符號是剛好相反的;
3. 基于上述兩種考慮,為了使問題足夠簡單,我們取y的值為1和-1;
4. 在取定分類標簽y為-1和1之后,一個平面正確分類樣本數據,就相當于用這個平面計算yf(x)>0;
5. 并且這樣一來,yf(x)也有了明確的幾何含義;
總而言之要明白,二類問題的標簽y是可以取任意兩個值的,不管取怎樣的值對于相同的樣本點,只要分類相同,所有的y的不同取值都是等價的。之所以取某些特殊的值,只是因為這樣一來計算會變得方便,理解變得容易。svm中y取1或-1的歷史原因是因為感知器最初的定義,實際取值可以任意,總能明確表示輸入樣本是否被誤分,但是用+1、-1可以起碼可以是問題描述簡單化、式子表示簡潔化、幾何意義明確化。
舉個例子:如果取y為1與2(比如原來取-1的現在取1,原來取1的現在取2 ),那么分類正確的判定標準就變成了(y?1.5)?f(x)>0所以取1和-1只是為了計算簡單方便,沒有實質變化,更非一定必須取一正一負。
接下來的問題是,如何確定這個超平面呢?從直觀上而言,這個超平面應該是最適合分開兩類數據的直線。而判定“最適合”的標準就是這條直線離直線兩邊的數據的間隔最大。所以,得尋找有著最大間隔的超平面。
?
參考:
總結
以上是生活随笔為你收集整理的[机器学习] 分类 --- Support Vector Machine (SVM)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何让你的scrapy爬虫不再被ban之
- 下一篇: 吉吉影音怎么样