日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习基础——支持向量机

發布時間:2024/1/17 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习基础——支持向量机 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

? ?最開始接觸SVM是在吳恩達的課程上,展示了一個例子:用SVM將人聲從環境聲中單獨剝離出來。后來,在吳教授的Coursera機器學習課程中監督學習部分的末尾,講述了SVM。但是他所講述的SVM是基于邏輯回歸修改而得來的。 這個東西確實不太好明白,目前我也只是將自己的理解結合July的資料整理描述出來,在未來會繼續的修正與更新這塊內容,下面就開始我的粗淺的認識。

一、什么是SVM?

??SVM(Support Vector Machine)即支持向量機,主要是用于分類任務(或者說二分類任務)中使用。對于分類任務,最基本的思路就是:基于訓練集,在樣本空間中,找到一個劃分超平面(Hyper Plane),將不同類別的樣本劃分開來。但是,可以將訓練樣本分開的超平面可能有很多,我們是根據什么來選擇到底哪一個是所需要的呢? SVM是90年代中期發展起來的,基于統計學習理論的機器學習算法,它通過使結構化風險最小來提高機器的泛化能力,從而實現經驗風險和置信范圍的最小化。(結構化風險和經驗風險在劃分軟間隔的時候會說明。) 通俗來講,它是一種二類分類模型,其基本模型定義為特征空間上的間隔最大的線性分類器,即支持向量機的學習策略便是間隔(Margin)最大化,最終可轉化為一個凸二次規劃問題的求解。

1.1 線性分類

在樣本空間中,劃分超平面可以通過如下線性方程來描述: 類別用y表示,數據用x表示。其中:y取值為1或-1。分別代表對應的類別。但是,為什么會取-1和+1呢?這個標準其實源自邏輯回歸(logistic regression)。

1.1.1 分類取值1或-1的標準:邏輯回歸

Logistic回歸目的是從特征學習出一個0/1分類模型,而這個模型是將特性的線性組合作為自變量,由于自變量的取值范圍是負無窮到正無窮。因此,使用logistic函數(或稱作sigmoid函數)將自變量映射到(0,1)上,映射后的值被認為是屬于y=1的概率。? ? 形式化表示就是? ? 假設函數

? ?其中x是n維特征向量,函數g就是sigmoid函數。? ?函數的圖像是:

??可以看到,sigmoid函數將所有數據都映射到了[0,1]之間,? ?而假設函數就是特征屬于y=1的概率。

? ??當我們要判別一個新來的特征屬于哪個類時,只需讓大于0.5就是y=1的類,反之屬于y=0類。? ? 再審視一下,發現只和有關,>0,那么,g(z)只不過是用來映射,真實的類別決定權還在。還有當=1,反之=0。如果我們只從出發,希望模型達到的目標無非就是讓訓練數據中y=1的特征,而是y=0的特征。Logistic回歸就是要學習得到,使得正例的特征遠大于0,負例的特征遠小于0,強調在全部訓練實例上達到這個目標。

1.1.2 邏輯回歸表述SVM

類似于邏輯回歸,SVM中,用y = ±1代替邏輯回歸中y = 1和0;用w和b代替。以前的,其中認為。現在我們替換b為,后面替換為(即)。這樣,我們讓,進一步。也就是說除了y由y=0變為y=-1,只是標記不同外,與logistic回歸的形式化表示沒區別。? ? 再明確下假設函數

? ??上面提到過我們只需考慮的正負問題,而不用關心g(z),因此我們這里將g(z)做一個簡化,將其簡單映射到y=-1和y=1上。映射關系如下:
? ? 于此,想必已經解釋明白了為何線性分類的標準一般用1 或者-1 來標示。

1.1.3 線性分類的簡單例子

下面舉個簡單的例子(硬間隔),一個二維平面(一個超平面,在二維空間中的例子就是一條直線),如下圖所示,平面上有兩種不同的點,分別用兩種不同的顏色表示,一種為紅顏色的點,另一種則為藍顏色的點,紅顏色的線表示一個可行的超平面

? ?從上圖中我們可以看出,這條紅顏色的線把紅顏色的點和藍顏色的點分開來了。而這條紅顏色的線就是我們上面所說的超平面,也就是說,這個所謂的超平面的的確確便把這兩種不同顏色的數據點分隔開來,在超平面一邊的數據點所對應的??全是 -1 ,而在另一邊全是 1 。

? ?接著,我們可以令分類函數提醒:下文很大篇幅都在討論著這個分類函數,或者說模型

?

? ?顯然,如果f(x) = 0?,那么x?是位于超平面上的點。


? ?? ?如圖所示,距離超平面最近的幾個訓練樣本點使得為1,這些樣本點稱為支持向量(Support Vector),兩個異類向量到超平面的距離之和為:。找到有最大間隔的劃分超平面,也就是使最大化,要求滿足條件(s.t.的意思是:subject to)這也就是使得最小化。這就是支持向量機的基本型
? ? 當然,有些時候,或者說大部分時候數據并不是線性可分的,這個時候滿足這樣條件的超平面就根本不存在(不過關于如何處理這樣的問題我們后面會講),這里先從最簡單的情形開始推導,就假設數據都是線性可分的,亦即這樣的超平面是存在的。? ? 而且值得注意的是,這里的Margin是硬間隔,即沒有或者不考慮誤分類的情況。

??請注意,下面的篇幅將按下述3點走:

  • 咱們就要確定上述分類函數f(x) = w.x + b(w.x表示w與x的內積)中的兩個參數w和b,通俗理解的話w是法向量,b是截距;
  • 那如何確定w和b呢?答案是尋找兩條邊界端或極端劃分直線中間的最大間隔(之所以要尋最大間隔是為了能更好的劃分不同類的點,下文你將看到:為尋最大間隔,導出,繼而引入拉格朗日函數和對偶變量,化為對單一因數對偶變量的求解,當然,這是后話),從而確定最終的最大間隔分類超平面hyper plane和分類函數;
  • 進而把尋求分類函數f(x) = w.x + b的問題轉化為對w,b的最優化問題,最終化為對偶因子的求解。
  • ? ?

    二、深入了解SVM

    2.1 線性可分到線性不可分


    2.1.1 從原始問題到對偶問題的求解

    雖然上文1.3節給出了目標函數,卻沒有講怎么來求解。現在就讓我們來處理這個問題。回憶一下之前得到的目標函數(subject to導出的則是約束條件):

    ? ? ?由于求的最大值相當于求的最小值,所以上述問題等價于(w由分母變成分子,從而也有原來的max問題變為min問題,很明顯,兩者問題等價):

  • 轉化到這個形式后,我們的問題成為了一個凸優化問題,或者更具體的說,因為現在的目標函數是二次的,約束條件是線性的,所以它是一個凸二次規劃問題。這個問題可以用任何現成的?QP (Quadratic Programming)?的優化包進行求解,歸結為一句話即是:在一定的約束條件下,目標最優,損失最小
  • 但雖然這個問題確實是一個標準的 QP 問題,但是它也有它的特殊結構,通過?Lagrange Duality?變換到對偶變量 (dual variable) 的優化問題之后,可以找到一種更加有效的方法來進行求解,而且通常情況下這種方法比直接使用通用的 QP 優化包進行優化要高效得多。
  • ? ??也就說,除了用解決QP問題的常規方法之外,還可以通過求解對偶問題得到最優解,這就是線性可分條件下支持向量機的對偶算法,這樣做的優點在于:一者對偶問題往往更容易求解;二者可以自然的引入核函數,進而推廣到非線性分類問題。

    ? ? 至于上述提到,關于什么是Lagrange duality?簡單地來說,通過給每一個約束條件加上一個 Lagrange multiplier(拉格朗日乘子),即引入拉格朗日乘子,如此我們便可以通過拉格朗日函數將約束條件融和到目標函數里去(也就是說把條件融合到一個函數里頭,現在只用一個函數表達式便能清楚的表達出我們的問題,n為樣本個數):


    ? ?然后我們令

    ? ? 容易驗證,當某個約束條件不滿足時,例如,那么我們顯然有只要令即可)。而當所有約束條件都滿足時,則有亦即我們最初要最小化的量。因此,在要求約束條件得到滿足的情況下最小化實際上等價于直接最小化(當然,這里也有約束條件,就是)

    因為如果約束條件沒有得到滿足,會等于無窮大,自然不會是我們所要求的最小值。具體寫出來,我們現在的目標函數變成了

    ? ? 這里用表示這個問題的最優值,這個問題和我們最初的問題是等價的。不過,現在我們來把最小和最大的位置交換一下(稍后,你將看到,當下面式子滿足了一定的條件之后,這個式子d?便是上式P?的對偶形式表示):

    ? ? 當然,交換以后的問題不再等價于原問題,這個新問題的最優值用來表示。并且,我們有?,這在直觀上也不難理解,最大值中最小的一個總也比最小值中最大的一個要大吧!??總之,第二個問題的最優值在這里提供了一個第一個問題的最優值的一個下界,在滿足某些條件的情況下,這兩者相等,這個時候我們就可以通過求解第二個問題來間接地求解第一個問題。

    ? ? 也就是說,下面我們將先求L 對w、b的極小,再求L 對的極大。而且,之所以從minmax的原始問題,轉化為maxmin的對偶問題,一者因為是的近似解,二者,轉化為對偶問題后,更容易求解。

    2.1.2 KKT條件

    ??? 與此同時,上段說“在滿足某些條件的情況下”,這所謂的“滿足某些條件”就是要滿足KKT條件。那KKT條件的表現形式是什么呢?據維基百科:KKT 條件的介紹,一般地,一個最優化數學模型能夠表示成下列標準形式:

    ? ? 其中,f(x)是需要最小化的函數,h(x)是等式約束,g(x)是不等式約束,p和q分別為等式約束和不等式約束的數量。同時,我們得明白以下兩個定理:

    • 凸優化的概念:?為一凸集,??為一凸函數。凸優化就是要找出一點??,使得每一??滿足??。
    • KKT條件的意義:它是一個非線性規劃(Nonlinear Programming)問題能有最優化解法的必要和充分條件。

    ? ? 那到底什么是所謂Karush-Kuhn-Tucker條件呢?KKT條件就是指上面最優化數學模型的標準形式中的最小點?x*?必須滿足下面的條件:

    ? ? 經過論證,我們這里的問題是滿足 KKT 條件的(首先已經滿足Slater condition,再者f和gi也都是可微的,即L對w和b都可導),因此現在我們便轉化為求解第二個問題。也就是說,現在,咱們的原問題通過滿足一定的條件,已經轉化成了對偶問題。而求解這個對偶學習問題,分為3個步驟,首先要讓L(w,b,a)?關于??和??最小化,然后求對α的極大,最后利用SMO算法求解對偶因子。

    2.1.3 求解對偶問題的步驟

    ? ??(1)首先固定要讓??關于??和??最小化,我們分別對w,b求偏導數,即令??和??等于零。

    ? ? 以上結果代回上述的??

    ? ? 得到:

    ? ? 提醒:有讀者可能會問上述推導過程如何而來?說實話,其具體推導過程是比較復雜的,如下圖所示:

    ? ? ? 最后,得到:

    (2)求的極大值,這塊交由SMO算法處理,具體可以參考相關論文資料。

    不得不提醒下讀者:經過上面第一個步驟的求w和b,得到的拉格朗日函數式子已經沒有了變量w,b,只有,而反過來,求得的將能導出w,b的解,最終得出分離超平面和分類決策函數。為何呢?因為如果求出了,根據,即可求出w。然后通過,即可求出b?

    ???如前面所說,這個問題有更加高效的優化算法,即我們常說的SMO(Sequential Minimal Optization)算法。

    2.2 核函數(線性不可分)

    2.2.1、特征空間的隱式映射:核函數

    ? ? 咱們首先給出核函數的來頭:

    • 在上文中,我們已經了解到了SVM處理線性可分的情況,而對于非線性的情況,SVM 的處理方法是選擇一個核函數??,通過將數據映射到高維空間,來解決在原始空間中線性不可分的問題。由于核函數的優良品質,這樣的非線性擴展在計算量上并沒有比原來復雜多少,這一點是非常難得的。當然,這要歸功于核方法——除了 SVM 之外,任何將計算表示為數據點的內積的方法,都可以使用核方法進行非線性擴展。

    ? ? 也就是說,Minsky和Papert早就在20世紀60年代就已經明確指出線性學習器計算能力有限。為什么呢?因為總體上來講,現實世界復雜的應用需要有比線性函數更富有表達能力的假設空間,也就是說,目標概念通常不能由給定屬性的簡單線性函數組合產生,而是應該一般地尋找待研究數據的更為一般化的抽象特征。

    ? ? 而下文我們將具體介紹的核函數則提供了此種問題的解決途徑,從下文你將看到,核函數通過把數據映射到高維空間來增加第一節所述的線性學習器的能力,使得線性學習器對偶空間的表達方式讓分類操作更具靈活性和可操作性。因為訓練樣例一般是不會獨立出現的,它們總是以成對樣例的內積形式出現,而用對偶形式表示學習器的優勢在為在該表示中可調參數的個數不依賴輸入屬性的個數,通過使用恰當的核函數來替代內積,可以隱式得將非線性的訓練數據映射到高維空間,而不增加可調參數的個數(當然,前提是核函數能夠計算對應著兩個輸入特征向量的內積)。

    ? ??1、簡而言之:在線性不可分的情況下,支持向量機通過某種事先選擇的非線性映射(核函數)將輸入變量映射到一個高維特征空間,在這個空間中構造最優分類超平面。我們使用SVM進行數據集分類工作的過程首先是同預先選定的一些非線性映射將輸入空間映射到高維特征空間(下圖很清晰的表達了通過映射到高維特征空間,而把平面上本身不好分的非線性數據分了開來):? ? 使得在高維屬性空間中有可能最訓練數據實現超平面的分割,避免了在原輸入空間中進行非線性曲面分割計算。SVM數據集形成的分類函數具有這樣的性質:它是一組以支持向量為參數的非線性函數的線性組合,因此分類函數的表達式僅和支持向量的數量有關,而獨立于空間的維度,在處理高維輸入空間的分類時,這種方法尤其有效,其工作原理如下圖所示:? ?2、具體點說:在我們遇到核函數之前,如果用原始的方法,那么在用線性學習器學習一個非線性關系,需要選擇一個非線性特征集,并且將數據寫成新的表達形式,這等價于應用一個固定的非線性映射,將數據映射到特征空間,在特征空間中使用線性學習器,因此,考慮的假設集是這種類型的函數:這里?:X->F是從輸入空間到某個特征空間的映射,這意味著建立非線性學習器分為兩步:
  • 首先使用一個非線性映射將數據變換到一個特征空間F,
  • 然后在特征空間使用線性學習器分類。
  • 在上文我提到過對偶形式,而這個對偶形式就是線性學習器的一個重要性質,這意味著假設可以表達為訓練點的線性組合,因此決策規則可以用測試點和訓練點的內積來表示:如果有一種方式可以在特征空間中直接計算內積φ(xi?·?φ(x),就像在原始輸入點的函數中一樣,就有可能將兩個步驟融合到一起建立一個非線性的學習器,這樣直接計算法的方法稱為核函數方法,于是,核函數便橫空出世了。? ? 這里我直接給出一個定義:核是一個函數K,對所有x,z(-X,滿足,這里φ是從X到內積特征空間F的映射。? ??3、總而言之,舉個簡單直接點的例子,如@Wind所說:如果不是用核技術,就會先計算線性映射phy(x1)和phy(x2),然后計算這兩個特征的內積,使用了核技術之后,先把phy(x1)和phy(x2)的通用表達式子:< phy(x1),phy(x2) >=k( <x1,x2> )計算出來,注意到這里的< , >表示內積,k( , )就是對應的核函數,這個表達往往非常簡單,所以計算非常方便。? ? OK,接下來,咱們就進一步從外到里,來探探這個核函數的真面目。

    2.2.2、核函數:如何處理非線性數據

    ? ? 在2.1節中我們介紹了線性情況下的支持向量機,它通過尋找一個線性的超平面來達到對數據進行分類的目的。不過,由于是線性方法,所以對非線性的數據就沒有辦法處理。舉個例子來說,則是如下圖所示的兩類數據,分別分布為兩個圓圈的形狀,這樣的數據本身就是線性不可分的,此時咱們該如何把這兩類數據分開呢(下文將會有一個相應的三維空間圖)?

    ??

    ? ? 事實上,上圖所述的這個數據集,是用兩個半徑不同的圓圈加上了少量的噪音生成得到的,所以,一個理想的分界應該是一個“圓圈”而不是一條線(超平面)。如果用??和??來表示這個二維平面的兩個坐標的話,我們知道一條二次曲線(圓圈是二次曲線的一種特殊情況)的方程可以寫作這樣的形式:

    ? ? 注意上面的形式,如果我們構造另外一個五維的空間,其中五個坐標的值分別為?,?,?,?,?,那么顯然,上面的方程在新的坐標系下可以寫作:

    ? ? 關于新的坐標??,這正是一個 hyper plane 的方程!也就是說,如果我們做一個映射??,將??按照上面的規則映射為??,那么在新的空間中原來的數據將變成線性可分的,從而使用之前我們推導的線性分類算法就可以進行處理了。這正是?Kernel?方法處理非線性問題的基本思想。

    ? ? 再進一步描述 Kernel 的細節之前,不妨再來看看這個例子映射過后的直觀例子。當然,你我可能無法把 5 維空間畫出來,不過由于我這里生成數據的時候就是用了特殊的情形,具體來說,我這里的超平面實際的方程是這個樣子(圓心在??軸上的一個正圓):

    ? ? 因此我只需要把它映射到?,?,??這樣一個三維空間中即可,下圖即是映射之后的結果,將坐標軸經過適當的旋轉,就可以很明顯地看出,數據是可以通過一個平面來分開的(pluskid:下面的gif 動畫,先用 Matlab 畫出一張張圖片,再用 Imagemagick 拼貼成):

    ? ? 現在讓我們再回到 SVM 的情形,假設原始的數據時非線性的,我們通過一個映射??將其映射到一個高維空間中,數據變得線性可分了,這個時候,我們就可以使用原來的推導來進行計算,只是所有的推導現在是在新的空間,而不是原始空間中進行。當然,推導過程也并不是可以簡單地直接類比的,例如,原本我們要求超平面的法向量??,但是如果映射之后得到的新空間的維度是無窮維的(確實會出現這樣的情況,比如后面會提到的 高斯核Gaussian Kernel?),要表示一個無窮維的向量描述起來就比較麻煩。于是我們不妨先忽略過這些細節,直接從最終的結論來分析,回憶一下,我們上一次2.1節中得到的最終的分類函數是這樣的:

    ? ? 現在則是在映射過后的空間,即:

    ? ??而其中的??也是通過求解如下 dual 問題而得到的

    ??? 這樣一來問題就解決了嗎?似乎是的:拿到非線性數據,就找一個映射??,然后一股腦把原來的數據映射到新空間中,再做線性 SVM 即可。不過事實上沒有這么簡單!其實剛才的方法稍想一下就會發現有問題:在最初的例子里,我們對一個二維空間做映射,選擇的新空間是原始空間的所有一階和二階的組合,得到了五個維度;如果原始空間是三維,那么我們會得到 19 維的新空間,這個數目是呈爆炸性增長的,這給??的計算帶來了非常大的困難,而且如果遇到無窮維的情況,就根本無從計算了。所以就需要 Kernel 出馬了。

    ??? 不妨還是從最開始的簡單例子出發,設兩個向量和,而即是到前面2.2.1節說的五維空間的映射,因此映射過后的內積為:

    ? ? ? ??(公式說明:上面的這兩個推導過程中,所說的前面的五維空間的映射,這里說的前面便是文中2.2.1節的所述的映射方式,仔細看下2.2.1節的映射規則,再看那第一個推導,其實就是計算x1,x2各自的內積,然后相乘相加即可,第二個推導則是直接平方,去掉括號,也很容易推出來

    ? ? 另外,我們又注意到:

    ? ? ?二者有很多相似的地方,實際上,我們只要把某幾個維度線性縮放一下,然后再加上一個常數維度,具體來說,上面這個式子的計算結果實際上和映射

    ? ? ?之后的內積的結果是相等的,那么區別在于什么地方呢?

  • 一個是映射到高維空間中,然后再根據內積的公式進行計算;
  • 而另一個則直接在原來的低維空間中進行計算,而不需要顯式地寫出映射后的結果
  • ? ? (公式說明:上面之中,最后的兩個式子,第一個算式,是帶內積的完全平方式,可以拆開,然后,通過湊一個得到,第二個算式,也是根據第一個算式湊出來的

    ? ? 回憶剛才提到的映射的維度爆炸,在前一種方法已經無法計算的情況下,后一種方法卻依舊能從容處理,甚至是無窮維度的情況也沒有問題。

    ??? 我們把這里的計算兩個向量在隱式映射過后的空間中的內積的函數叫做核函數?(Kernel Function) ,例如,在剛才的例子中,我們的核函數為:

    ? ??核函數能簡化映射空間中的內積運算——剛好“碰巧”的是,在我們的?SVM 里需要計算的地方數據向量總是以內積的形式出現的。對比剛才我們上面寫出來的式子,現在我們的分類函數為:

    ? ? 其中??由如下 dual 問題計算而得:

    ? ? 這樣一來計算的問題就算解決了,避開了直接在高維空間中進行計算,而結果卻是等價的!當然,因為我們這里的例子非常簡單,所以我可以手工構造出對應于的核函數出來,如果對于任意一個映射,想要構造出對應的核函數就很困難了。

    2.2.3、幾個核函數

    ? ? 通常人們會從一些常用的核函數中選擇(根據問題和數據的不同,選擇不同的參數,實際上就是得到了不同的核函數),例如:

    • 多項式核,顯然剛才我們舉的例子是這里多項式核的一個特例(R = 1,d = 2。雖然比較麻煩,而且沒有必要,不過這個核所對應的映射實際上是可以寫出來的,該空間的維度是,其中??是原始空間的維度。
    • 高斯核,這個核就是最開始提到過的會將原始空間映射為無窮維空間的那個家伙。不過,如果選得很大的話,高次特征上的權重實際上衰減得非常快,所以實際上(數值上近似一下)相當于一個低維的子空間;反過來,如果選得很小,則可以將任意的數據映射為線性可分——當然,這并不一定是好事,因為隨之而來的可能是非常嚴重的過擬合問題。不過,總的來說,通過調控參數,高斯核實際上具有相當高的靈活性,也是使用最廣泛的核函數之一。下圖所示的例子便是把低維線性不可分的數據通過高斯核函數映射到了高維空間:
    • 線性核,這實際上就是原始空間中的內積。這個核存在的主要目的是使得“映射后空間中的問題”和“映射前空間中的問題”兩者在形式上統一起來了(意思是說,咱們有的時候,寫代碼,或寫公式的時候,只要寫個模板或通用表達式,然后再代入不同的核,便可以了,于此,便在形式上統一了起來,不用再分別寫一個線性的,和一個非線性的)

    2.2.4、核函數的本質


    上面說了這么一大堆,讀者可能還是沒明白核函數到底是個什么東西?我再簡要概括下,即以下三點:
  • 實際中,我們會經常遇到線性不可分的樣例,此時,我們的常用做法是把樣例特征映射到高維空間中去(如上文2.2節最開始的那幅圖所示,映射到高維空間后,相關特征便被分開了,也就達到了分類的目的);
  • 但進一步,如果凡是遇到線性不可分的樣例,一律映射到高維空間,那么這個維度大小是會高到可怕的(如上文中19維乃至無窮維的例子)。那咋辦呢?
  • 此時,核函數就隆重登場了,核函數的價值在于它雖然也是講特征進行從低維到高維的轉換,但核函數絕就絕在它事先在低維上進行計算,而將實質上的分類效果表現在了高維上,也就如上文所說的避免了直接在高維空間中的復雜計算。
  • ? ? 最后引用這里的一個例子舉例說明下核函數解決非線性問題的直觀效果。

    ? ??假設現在你是一個農場主,圈養了一批羊群,但為預防狼群襲擊羊群,你需要搭建一個籬笆來把羊群圍起來。但是籬笆應該建在哪里呢?你很可能需要依據牛群和狼群的位置建立一個“分類器”,比較下圖這幾種不同的分類器,我們可以看到支持向量機完成了一個很完美的解決方案。


    ? ? 這個例子從側面簡單說明了支持向量機使用非線性分類器的優勢,而邏輯模式以及決策樹模式都是使用了直線方法。

    2.2.5、當滿足什么條件的時候,k(.,.)才是核函數呢?

    ?ht關于核函數的選取和為什么他可以在低維計算等效成高維計算,請看這篇文章核函數

    2.3、使用松弛變量處理 outliers 方法(軟間隔問題)

    ??? 在本文第一節最開始討論支持向量機的時候,我們就假定,數據是線性可分的,亦即我們可以找到一個可行的超平面將數據完全分開。后來為了處理非線性數據,在上文2.2節使用 Kernel 方法對原來的線性 SVM 進行了推廣,使得非線性的的情況也能處理。雖然通過映射??將原始數據映射到高維空間之后,能夠線性分隔的概率大大增加,但是對于某些情況還是很難處理。

    ? ? 例如可能并不是因為數據本身是非線性結構的,而只是因為數據有噪音。對于這種偏離正常位置很遠的數據點,我們稱之為 outlier ,在我們原來的 SVM 模型里,outlier 的存在有可能造成很大的影響,因為超平面本身就是只有少數幾個 support vector 組成的,如果這些 support vector 里又存在 outlier 的話,其影響就很大了。例如下圖:

    ??? 用黑圈圈起來的那個藍點是一個 outlier ,它偏離了自己原本所應該在的那個半空間,如果直接忽略掉它的話,原來的分隔超平面還是挺好的,但是由于這個 outlier 的出現,導致分隔超平面不得不被擠歪了,變成途中黑色虛線所示(這只是一個示意圖,并沒有嚴格計算精確坐標),同時 margin 也相應變小了。當然,更嚴重的情況是,如果這個 outlier 再往右上移動一些距離的話,我們將無法構造出能將數據分開的超平面來。

    ??? 為了處理這種情況,SVM 允許數據點在一定程度上偏離一下超平面(為了防止過擬合,SVM允許在一些樣本上預測出錯,以滿足整體的的最大化Margin)。例如上圖中,黑色實線所對應的距離,就是該 outlier 偏離的距離,如果把它移動回來,就剛好落在原來的超平面上,而不會使得超平面發生變形了。

    ? ? 插播下一位讀者@Copper_PKU的理解:換言之,在有松弛的情況下outline點也屬于支持向量SV,同時,對于不同的支持向量,拉格朗日參數的值也不同,如此篇論文《Large Scale Machine Learning》中的下圖所示:

    ? ??對于遠離分類平面的點值為0;對于邊緣上的點值在[0, 1/L]之間,其中,L為訓練數據集個數,即數據集大小;對于outline數據和內部的數據值為1/L。更多請參看本文文末參考條目第51條。

    我們的優化目標是:

    其中:l0/1為損失函數。(下面損失函數的形式用采用hinge損失函數)。

    還可以將優化目標寫成更一般的形式:

    其中,稱為結構風險(Structural risk),用于描述模型f的某些性質第二項稱為經驗風險(Empirical risk),用于描述模型和訓練數據的契合程度;C將二者折中。換一個角度說,可以將上式理解成“正則化問題”,為正則化項,C為正則化常數。在吳恩達的機器學習課程中,效果等同于,其中為邏輯回歸中的正則化參數,或者說是為了防止過擬合的懲罰因子)

    ? ? OK,繼續回到咱們的問題。我們,原來的約束條件為:


    ??? 現在考慮到outlier問題(即不是所有的樣本點都滿足這個條件,由噪聲數據或者其他情況造就,采用hinge損失形式),約束條件變成了:

    ? ? 其中稱為松弛變量 (slack variable),對應數據點允許偏離的 functional margin 的量。當然,如果我們使任意大的話,那任意的超平面都是符合條件的了。所以,我們在原來的目標函數(效果等效為Logistic regression中的Cost Function)后面加上一項,使得這些的總和也要最小:

    ? ? 其中??是一個參數,用于控制目標函數中兩項(“尋找 margin 最大的超平面”和“保證數據點偏差量最小”)之間的權重。注意,其中??是需要優化的變量(之一),而??是一個事先確定好的常量。完整地寫出來是這個樣子

    用之前的方法將限制或約束條件加入到目標函數中,得到新的拉格朗日函數,如下所示:

    ? ? ?分析方法和前面一樣,轉換為另一個問題之后,我們先讓針對、和最小化:

    ? ? ?將??帶回??并化簡,得到和原來一樣的目標函數:

    ? ? ?不過,由于我們得到而又有(作為 Lagrange multiplier 的條件),因此有,所以整個 dual 問題現在寫作:

    ? ? 把前后的結果對比一下(錯誤修正:圖中的Dual formulation中的Minimize應為maxmize):

    ? ??可以看到唯一的區別就是現在 dual variable??多了一個上限?。而 Kernel 化的非線性形式也是一樣的,只要把換成即可。這樣一來,一個完整的,可以處理線性和非線性并能容忍噪音和 outliers 的支持向量機才終于介紹完畢了。

    三、小結

    ? ??不準確的說SVM它本質上即是一個分類方法,用w^T+b定義分類函數,于是求w、b,為尋最大間隔,目標是求函數1/2||w||^2的最小值,繼而引入拉格朗日因子,化為對拉格朗日乘子a的求解(求解過程中會涉及到一系列最優化或凸二次規劃等問題)。如此,通過對偶轉換,將求w.b與求等價,而的求解可以用一種快速學習算法SMO,至于核函數,是為處理非線性情況,若直接映射到高維計算恐維度爆炸,故在低維計算,等效高維表現

    本文主要參考了July大神的《支持向量機通俗導論(理解SVM的三層境界)》,周志華的《機器學習》還是吳恩達的機器學習課程,并在此基礎上加上了一些自己的理解。文中的圖主要是從July的文章中拿的,衷心感謝!

    總結

    以上是生活随笔為你收集整理的机器学习基础——支持向量机的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。