1. 程式人生 > >《統計學習方法》第 7 章“支援向量機”導讀

《統計學習方法》第 7 章“支援向量機”導讀

目錄

《統計學習方法》第 7 章“支援向量機”導讀

我這篇筆記主要是介紹李航的《統計學習方法》第 7 章內容,以筆記的方式呈現。需要說明的是,為了使得本文儘量易懂,我把書上的一些標題或者專有名詞做了更改,只是為了幫助初學的朋友們的理解。

學習“支援向量機”的步驟

“支援向量機”的內容非常多,掌握“支援向量機”是要花費一定時間的,經常看著看著,就不知道自己在看啥了。下面我簡單羅列一下關於“支援向量機”的研究順序,和各個知識點的地位和作用,希望能給看到我這篇筆記的朋友們一些幫助。

"支援向量機"學習方法包含構建由簡單到複雜的模型。

—— 李航《統計學習方法》第 7 章“支援向量機”引言部分。

由簡單到複雜的模型依次就是下面 3 個模型,我從統計學習 \(3\)

要素的角度(模型、策略、方法,李航《統計學習方法》第 1 章就有介紹)對它們再做一層剖析:

第 1 階段:嚴格線性可分支援向量機

  • “嚴格線性可分支援向量機”即書上說的“線性可分支援向量機”。我這裡強調“嚴格”是為了突出我們此時對模型的假設,這個假設和感知機模型是完全一致的。

注:感知機模型是李航的《統計學習方法》介紹的第 1 個模型,麻雀雖小五臟俱全,我個人認為還是非常重要的,雖然很簡單(那是在我瞭解他以後才覺得),在實際做分類的時候不會用它,但感知機模型從模型假設(線性可分)、到找到策略(損失函式最小化)、到使用方法(隨機梯度下降法),比較完整清晰地體現了機器學習研究的基本步驟,並且感知機模型中提到的一些概念,例如線性可分、超平面、超平面的法向量、點到超平面的距離公式,定義類標為 \(-1\)

\(1\),使用類標乘以預測結果表示預測正確與否,這些思想和小技巧和我們的支援向量機可以說是完全通用的,甚至感知機也有對偶問題的演算法(對偶問題的演算法提出就是為了方便計算,將引數的學習歸結為部分樣本資料特徵和標籤的線性組合,二者在這點上也是非常一致的),這一點也是極其相似的,因此,在學習支援向量機的時候,感知機如果你忘了的話,可以趁機複習一下。

  • 後一個模型“差一點線性可分的支援向量機”就可以通過引入一個容忍錯誤的度量,和嚴格線性可分的情況使用相同的“策略”和“方法”完成分類任務;

具體,我們在看第 2 部分“線性支援向量機”的時候,其實可以看到,很多地方都是在摘抄第 1 部分的結論,在一些邊界條件和目標函式上稍有不同而已,第 1 部分搞懂了,第 2 部分就非常快了。

  • 前面會跟你扯一些“代數間隔”、“幾何間隔”的概念,我個人覺得不太重要,回過頭來看都不要緊,介紹這兩個概念無非是要保證後續敘述的無比正確性,這是寫數學專著的要求;

  • 策略:策略這部分是很重要的,策略如果你忘了是什麼,翻到書本第 1 章看看策略是什麼,“硬間隔最大化”是核心思想,策略就是學習的準則,在“嚴格線性可分”的前提下,“硬間隔最大化”保證了模型有更好的泛化能力,即對未知資料的預測能力。

比較下面兩張圖,我們認為資料點應該儘量遠離決策邊界,這是我們指定嚴格線性可分支援向量機的學習準則,即策略,因為如果資料點距離決策邊界很近,決策邊界的一點點改動,都會造成一些資料點的預測類別改變,這是不穩定的

說明:這裡“硬間隔”對應了我前面說的“嚴格線性可分”,是相對於後面敘述的“軟間隔”而言的,可以看到軟間隔的時候,再來理解這一點。

  • [ ] (這裡要配圖比較泛化能力好的和差的。)
  • 我看到這一部分覺得比較難理解的是,怎麼就把最後的目標函式,即兩條間隔邊界的距離變成

\[ {\max_{w,b}} \quad \cfrac{1}{||w||} \]

書上怎麼就莫名其妙取 \(\hat \gamma=1\),然後得到線性可分的支援向量機的最優化問題

\[ \begin{aligned} {\rm \min_{w,b}} \quad & \cfrac{1}{2}||w||^2 \\ {\rm s.t.} \quad & y_i(w \cdot x_i+b) - 1\geq 0, \quad i = 1, 2, \cdots,N \end{aligned} \]

不管是李航的《統計學習方法》還是周志華的《機器學習》,都只是使用縮放的方式解釋了這件事情。我簡單使用了變數代換的方式描述了這樣做的合理性:

看到這裡,我們就明白了,”硬間隔最大化的支援向量機“問題最終轉換成數學問題,我們解這個最優化問題:

\[ {\rm \min_{w,b}} \qquad \cfrac{1}{2}||w||^2 \\ {\rm s.t.} \qquad y_i(w \cdot x_i+b) - 1\geq 0, \quad i = 1, 2, \cdots,N \]
輸入是嚴格線性可分的資料對 \((\vec x,y)\),輸出是這個問題的最優解 \(w^*\)\(b^*\)。然後最優超平面就得到了:

\[ w^* \cdot \vec x + b^* = 0 \]

做預測的時候把 \(\vec x\) 代入 \(w^{*} \cdot \vec x + b^{*}\) 判斷符號,大於 \(0\) 的歸為一類,小於 \(0\) 的歸為另一類。

看到這裡,其實我覺得可以先跳過書本的一些部分,直接到 7.2 節 ”線性支援向量機與軟間隔最大化“。因為其實你已經知道”支援向量機“在做什麼了。最起碼它能解決嚴格線性可分的二分類資料問題。比起感知機而言,它得到的決策邊界是唯一的,並且是對未知資料有很好的預測能力

在這個問題裡,模型和感知機是一樣的,即二分類資料”嚴格“線性可分,策略是”硬間隔最大化“,這一點用數學表達成能表示成如下形式:

\[ {\rm \min_{w,b}} \qquad \cfrac{1}{2}||w||^2 \\ {\rm s.t.} \qquad y_i(w \cdot x_i+b) - 1\geq 0, \quad i = 1, 2, \cdots,N \]

看到這裡,你可能會問:

1、感知機只要分類都正確演算法就停止了,它得到的決策邊界是不唯一的;那麼支援向量機得到的泛化效能比感知機好,你說它決策邊界是唯一的,有什麼證據嗎?

答:當然有啦,就是書本上的定理 7.1,你可以回過頭來再看它;

2、上面的最優化問題怎麼解?

答:書本上 7.1.4 節”學習的對偶演算法“就是在講這一部分。這屬於統計學習 \(3\) 要素的角度(模型、策略、方法)中的方法。我們為了看清”支援向量機“的全貌,可以暫時略過,這部分內容不好消化,要結合附錄一起看,剛開始看的時候會漸漸忘了這個演算法到底是在做什麼,跑得原來越遠,拉不回來了,這是我剛開始看這部分內容的狀態,聰明的你應該比我好。

3、只能解決嚴格線性可分的二分類問題,是不是太沒用了。遇到不能線性可分的是不是就沒轍了,多分類問題咋辦?

答:之所以先討論嚴格的情況,是因為線性可分好做。其它非線性可分的情況,可以轉化成線性可分的情況來做。想一想從一元線性迴歸到多元線性迴歸,通過構造多項式特徵,最後也是用線性迴歸的演算法來做的,道理是一樣的。至於使用二分類問題問題解決多分類問題,機器學習中使用的思想有 ”OvO“ 與 ”OvR“,很多書籍上都有介紹,在這裡就不展開了。

寫到這裡,有一些概念我是沒有提到,因為絕大多數將支援向量機的書籍都有講,我羅列一下:支援向量、間隔、間隔邊界、決策邊界(即分離超平面),當然這個時候,你可以去看看函式間隔、幾何間隔。這些概念其實都是見名知義的,如果你還比較模糊,不妨再翻翻書

第 2 階段:差一點線性可分的支援向量機

有的時候,我們會遇到一些離群點,如果要照顧到它們分類的正確性是得不償失的。我們不會”撿了芝麻丟了西瓜“,就是這個道理。

  • [ ] 這裡要配圖,為了照顧到少數離群點,而使得泛化能力變差。

理解鬆弛變數

那麼,此時我們是怎麼做的呢?對每一個數據引入一個鬆弛變數,這個變數對於分類正確且在間隔邊界之外的資料而言為 \(0\) ,如果在間隔邊界之內,即使分類正確,也會有一個很小的值

理解這個思想可以對比於邏輯迴歸,對於邏輯迴歸演算法而言,不管你分類多正確,你的損失函式都會計入一個很小的概率。而此時支援向量機不是:

1、只要是分類正確的落在兩個間隔邊界之外的,我們認為是絕對安全的,所以不計損失;

2、即使分類正確,但是落在兩個間隔邊界之內的,我們認為此時的預測有一定風險,這個風險就量化為鬆弛變數的值;

3、分類錯誤的話,鬆弛變數的值就會大於 \(1\) ,錯得越離譜,這個值越大。

什麼是懲罰係數 \(C\)

\(C\) 其實我們並不陌生,我們在學習嶺迴歸和 LASSO 迴歸的時候,知道可以在損失函式的後面加上一個尾巴,這個尾巴表示了模型的複雜程度,這個尾巴前面有一個係數,用於平衡損失函式和模型的複雜度:

  • \(C\) 很大,說明模型複雜度佔據了損失函式的主要部分,因此真的”損失“那部分就會淡化了,因此模型會變得簡單,容易欠擬合;
  • \(C\) 很小,極端情況那就跟沒有一樣,此時模型容易變得複雜,容易過擬合。

這個道理在李航《統計學習方法》第 1 章介紹“策略”的部分,”結構風險=經驗風險+正則化項“,正則化項又叫懲罰項,叫懲罰還好理解一點,不知道為什麼要起這麼拗口的名字,”風險“、”結構風險“、”經驗風險“、”正則化“不查書真的不知道在說什麼。

這裡 \(C\) 的作用是一樣的,為了權衡”最大間隔“和”對每一個數據引入的鬆弛變數“這兩件事。如果我們對那個越過邊界的點特別在意,”寧可錯殺三千,不能放過一個“,這個 \(C\) 就要設定得很大,讓這個離群點儘量不越界或者越界的距離短一點。如果我們想要顧大局,犧牲個體,就可以把 \(C\) 設定小一點。

從鬆弛變數的角度理解 SVM 自帶正則化

  • 引入了鬆弛變數以後,此時”差一點線性可分的支援向量機“所表達的最優化問題的數學表示式就跟”嚴格線性可分的支援向量機“差不多了,結構上一致,因此引入了鬆弛變數的線性支援向量機的問題就可以包括嚴格線性可分的支援向量機問題,因為其實只要引入的鬆弛變數都為 0,就是嚴格線性可分的支援向量機,兩個問題合二為一了
  • 還有一點好處,對於支援向量機而言,我們從來不談”支援向量機“的正則化,這其實是在這一節介紹的”差一點線性可分的支援向量機“自帶的效果。

我們來看此時得到的數學表示式:

\[ {\rm \min_{w,b,\xi}} \qquad \cfrac{1}{2}||w||^2 + C\sum_{i=1}^N \xi_i\\ {\rm s.t.} \qquad y_i(w \cdot x_i+b) \geq 1 - \xi_i, \quad i = 1, 2, \cdots, N\\ \xi_i \ge0,\quad i = 1, 2, \cdots, N \quad\qquad \]

目標函式從形式上看,前面的 \(\cfrac{1}{2}||w||^2\) 是不是就是我們學習過的嶺迴歸的表示形式,而後面的 \(\sum_{i=1}^N \xi_i\) 是針對所有樣本而言的,\(\xi_i\) 是針對每一個樣本在指定的一個距離間隔邊界(注意是間隔邊界,不是決策邊界)的距離,可以看成是一種損失。目標函式的形式不就是”損失 + 正則化“的樣子嗎?

  • 這裡的鬆弛變數的值書本上又叫它”合頁損失“。

這部分內容雖然佔據了一定篇幅,但是很多都是和第 1 階段相同,很多結論無非就是在限制條件那裡多了個 \(C\)

第 3 階段:線性不可分的支援向量機

終於到最後了。”和線性可分差距太遠的時候“即這裡對於”線性不可分的支援向量機“而言,我們的思路其實很簡單,上面我們也提過,就是從”一元線性迴歸“到”多元線性迴歸“的思路,”通過構造特徵升維“,”低維空間線性不可分,到高維空間就有可能線性可分“,李航老師的書上也用例子介紹了這個思路。

  • [ ] 這裡要配圖。

直觀理解”低維空間線性不可分,到高維空間就有可能線性可分“

這裡要配圖。

在這裡我要特別強調一點:這一小節雖然一開始就在講核技巧,整個章節也幾乎都在介紹核技巧,但核技巧不是解決線性不可分的支援向量機問題的思想,它是一個具體的、可以操作的方法,核技巧是方法層面,不是思想層面,我們應該首先看到思想層面,因為它有時候更重要,而不應該被這個技巧、方法層面的東西蒙蔽了雙眼。

這裡舉一個可能不是很恰當的例子:一個學校來了兩個老師,一個是普通二本師範院校剛剛畢業的學生 A,他是來工作的,一個是名牌大學的本科生 B,他來上課只是為了為考研賺一些生活費,他們的教學效果和受歡迎程度很可能是 A 更優,原因很簡單:A 是來教書的,他選擇了教育行業是熱愛教學,經過 4 年的專業訓練和學習,在教學技能和教學態度上很可能遠遠超過 B,而 B 有可能根本不喜歡教書,名牌大學畢業只是他的標籤,他來教書只是為了貼補生活費,他的主要精力放在考研上。所以我們看待問題不能只看到這個問題吸引人的部分,有時要先看看它是用來幹什麼的。

因此我們就可以在高維空間中,使用第 1 階段和第 2 階段介紹的線性可分或者近似線性可分的策略和方法來解決在高維空間線性可分的問題,進而解決在原始低維空間中線性不可分的問題。核心思想就是構造特徵,轉化。

其實到這裡支援向量機的主要框架就介紹完了,就這麼簡單。那麼你要問我”核技巧“被你吃了嗎?不是的,核技巧只是我們為了解決在高維空間中線性可分問題的時候使用的一個方法,因為它有一定技巧性,還有一點點神奇、神祕的色彩,是一個可以讓我們偷懶的”捷徑“,所以我們叫它”核技巧“

”核技巧“是方法層面,而不是思想層面的東西

上面說了”線性不可分的支援向量機“首先是構造特徵,把空間對映到高維空間,那麼具體怎麼做呢?

  • 首先”從低維空間到高維空間的對映“一定是非線性對映,才有可能把低維空間的超曲面”拉直“,問題來了,這個對映是什麼?怎麼找到這個對映?
  • 其實這個對映找到以後,我們要在高維空間中做運算,我們要意識到一點:在高維空間中做運算,其實是很消耗資源的。

單單第一件事情其實就很不好辦了,這個非線性對映是什麼,那麼多非線性對映,你怎麼找。好在這件事情,偉大的數學家(電腦科學家)幫我們解決了。核技巧就幫我們一下子幹了這兩件事,核技巧給出了一個具體的樣子,它雖然沒有直接給出非線性對映的樣子,但其實我們並不關心,我們只關心那個在高維空間中進行運算的結果(具體可以等到理解了對偶問題的演算法再來理解),核技巧把它們合二為一,具體化了,我們剩下要做的只是調參,如果你的資料很乾淨,噪聲很小,你可以設定引數,使得演算法預測非常準確,這樣即使過擬合,影響也不大,如果你的資料噪聲很大,就得設定另一套引數,避免過擬合,這正是核技巧神奇、神祕的地方。

”核技巧“把一個抽象的問題具體化,簡單化,並且可以且容易操作。在這裡還是強調一下,”核技巧“是方法層面,而不是思想層面的東西。處理非線性可分的問題,SVM 處理的思路是構造特徵,使用樣本在新的高維特徵空間中線性可分。

如果我們能夠有一種方法輕鬆地解決低維空間中的非線性可分問題,或者我們輕鬆地找到了從低維空間到高維空間的非線性對映,並且在高維空間中進行計算毫不費事,那可能核函式(核技巧)就不為我們所知了。


後面還沒有介紹的內容有:

  • 如何求解第 1 部分提到的數學化以後的帶約束的最優化問題;
  • 拉格朗日乘子法
  • 拉格朗日對偶問題
  • KKT 條件
  • 核函式

當然,絕大部分介紹 SVM 的書籍在這些知識上已經講解得很正確了,我只會談一些直觀理解和應用的部分。

  • 僅僅使用一部分支援向量來做超平面的決策,無需依賴全部資料,效率高;
  • SVM 模型的目標函式計算了距離,距離是對特徵縮放敏感的,這一點類似於在 k 近鄰演算法中計算距離。
  • SVM 用於迴歸;
  • SVM 如何用於異常檢測。
  • 軟間隔最大化:那些引數和是不是支援向量機的關係:利用對偶互補條件,介紹合頁損失
  • 落在軟間隔之內的樣本也是支援向量

求解:拉格朗日乘子法

應用:最大熵模型,SVM,線性判別分析,主成分分析