目錄算法
我這篇筆記主要是介紹李航的《統計學習方法》第 7 章內容,以筆記的方式呈現。須要說明的是,爲了使得本文儘可能易懂,我把書上的一些標題或者專有名詞作了更改,只是爲了幫助初學的朋友們的理解。安全
「支持向量機」的內容很是多,掌握「支持向量機」是要花費必定時間的,常常看着看着,就不知道本身在看啥了。下面我簡單羅列一下關於「支持向量機」的研究順序,和各個知識點的地位和做用,但願能給看到我這篇筆記的朋友們一些幫助。框架
"支持向量機"學習方法包含構建由簡單到複雜的模型。機器學習
—— 李航《統計學習方法》第 7 章「支持向量機」引言部分。函數
由簡單到複雜的模型依次就是下面 3 個模型,我從統計學習 \(3\) 要素的角度(模型、策略、方法,李航《統計學習方法》第 1 章就有介紹)對它們再作一層剖析:性能
注:感知機模型是李航的《統計學習方法》介紹的第 1 個模型,麻雀雖小五臟俱全,我我的認爲仍是很是重要的,雖然很簡單(那是在我瞭解他之後才以爲),在實際作分類的時候不會用它,但感知機模型從模型假設(線性可分)、到找到策略(損失函數最小化)、到使用方法(隨機梯度降低法),比較完整清晰地體現了機器學習研究的基本步驟,而且感知機模型中提到的一些概念,例如線性可分、超平面、超平面的法向量、點到超平面的距離公式,定義類標爲 \(-1\) 和 \(1\),使用類標乘以預測結果表示預測正確與否,這些思想和小技巧和咱們的支持向量機能夠說是徹底通用的,甚至感知機也有對偶問題的算法(對偶問題的算法提出就是爲了方便計算,將參數的學習歸結爲部分樣本數據特徵和標籤的線性組合,兩者在這點上也是很是一致的),這一點也是極其類似的,所以,在學習支持向量機的時候,感知機若是你忘了的話,能夠趁機複習一下。學習
具體,咱們在看第 2 部分「線性支持向量機」的時候,其實能夠看到,不少地方都是在摘抄第 1 部分的結論,在一些邊界條件和目標函數上稍有不一樣而已,第 1 部分搞懂了,第 2 部分就很是快了。優化
前面會跟你扯一些「代數間隔」、「幾何間隔」的概念,我我的以爲不過重要,回過頭來看都沒關係,介紹這兩個概念無非是要保證後續敘述的無比正確性,這是寫數學專著的要求;spa
策略:策略這部分是很重要的,策略若是你忘了是什麼,翻到書本第 1 章看看策略是什麼,「硬間隔最大化」是核心思想,策略就是學習的準則,在「嚴格線性可分」的前提下,「硬間隔最大化」保證了模型有更好的泛化能力,即對未知數據的預測能力。blog
比較下面兩張圖,咱們認爲數據點應該儘可能遠離決策邊界,這是咱們指定嚴格線性可分支持向量機的學習準則,即策略,由於若是數據點距離決策邊界很近,決策邊界的一點點改動,都會形成一些數據點的預測類別改變,這是不穩定的。
說明:這裏「硬間隔」對應了我前面說的「嚴格線性可分」,是相對於後面敘述的「軟間隔」而言的,能夠看到軟間隔的時候,再來理解這一點。
\[ {\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 \]
看到這裏,你可能會問:
一、感知機只要分類都正確算法就中止了,它獲得的決策邊界是不惟一的;那麼支持向量機獲得的泛化性能比感知機好,你說它決策邊界是惟一的,有什麼證據嗎?
答:固然有啦,就是書本上的定理 7.1,你能夠回過頭來再看它;
二、上面的最優化問題怎麼解?
答:書本上 7.1.4 節」學習的對偶算法「就是在講這一部分。這屬於統計學習 \(3\) 要素的角度(模型、策略、方法)中的方法。咱們爲了看清」支持向量機「的全貌,能夠暫時略過,這部份內容很差消化,要結合附錄一塊兒看,剛開始看的時候會漸漸忘了這個算法究竟是在作什麼,跑得原來越遠,拉不回來了,這是我剛開始看這部份內容的狀態,聰明的你應該比我好。
三、只能解決嚴格線性可分的二分類問題,是否是太沒用了。遇到不能線性可分的是否是就沒轍了,多分類問題咋辦?
答:之因此先討論嚴格的狀況,是由於線性可分好作。其它非線性可分的狀況,能夠轉化成線性可分的狀況來作。想想從一元線性迴歸到多元線性迴歸,經過構造多項式特徵,最後也是用線性迴歸的算法來作的,道理是同樣的。至於使用二分類問題問題解決多分類問題,機器學習中使用的思想有 」OvO「 與 」OvR「,不少書籍上都有介紹,在這裏就不展開了。
寫到這裏,有一些概念我是沒有提到,由於絕大多數將支持向量機的書籍都有講,我羅列一下:支持向量、間隔、間隔邊界、決策邊界(即分離超平面),固然這個時候,你能夠去看看函數間隔、幾何間隔。這些概念其實都是見名知義的,若是你還比較模糊,不妨再翻翻書
有的時候,咱們會遇到一些離羣點,若是要照顧到它們分類的正確性是得不償失的。咱們不會」撿了芝麻丟了西瓜「,就是這個道理。
那麼,此時咱們是怎麼作的呢?對每個數據引入一個鬆弛變量,這個變量對於分類正確且在間隔邊界以外的數據而言爲 \(0\) ,若是在間隔邊界以內,即便分類正確,也會有一個很小的值。
理解這個思想能夠對比於邏輯迴歸,對於邏輯迴歸算法而言,無論你分類多正確,你的損失函數都會計入一個很小的機率。而此時支持向量機不是:
一、只要是分類正確的落在兩個間隔邊界以外的,咱們認爲是絕對安全的,因此不計損失;
二、即便分類正確,可是落在兩個間隔邊界以內的,咱們認爲此時的預測有必定風險,這個風險就量化爲鬆弛變量的值;
三、分類錯誤的話,鬆弛變量的值就會大於 \(1\) ,錯得越離譜,這個值越大。
\(C\) 其實咱們並不陌生,咱們在學習嶺迴歸和 LASSO 迴歸的時候,知道能夠在損失函數的後面加上一個尾巴,這個尾巴表示了模型的複雜程度,這個尾巴前面有一個係數,用於平衡損失函數和模型的複雜度:
這個道理在李航《統計學習方法》第 1 章介紹「策略」的部分,」結構風險=經驗風險+正則化項「,正則化項又叫懲罰項,叫懲罰還好理解一點,不知道爲何要起這麼拗口的名字,」風險「、」結構風險「、」經驗風險「、」正則化「不查書真的不知道在說什麼。
這裏 \(C\) 的做用是同樣的,爲了權衡」最大間隔「和」對每個數據引入的鬆弛變量「這兩件事。若是咱們對那個越過邊界的點特別在乎,」寧肯錯殺三千,不能放過一個「,這個 \(C\) 就要設置得很大,讓這個離羣點儘可能不越界或者越界的距離短一點。若是咱們想要顧大局,犧牲個體,就能夠把 \(C\) 設置小一點。
咱們來看此時獲得的數學表達式:
\[ {\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\)。
終於到最後了。」和線性可分差距太遠的時候「即這裏對於」線性不可分的支持向量機「而言,咱們的思路其實很簡單,上面咱們也提過,就是從」一元線性迴歸「到」多元線性迴歸「的思路,」經過構造特徵升維「,」低維空間線性不可分,到高維空間就有可能線性可分「,李航老師的書上也用例子介紹了這個思路。
這裏要配圖。
在這裏我要特別強調一點:這一小節雖然一開始就在講核技巧,整個章節也幾乎都在介紹核技巧,但核技巧不是解決線性不可分的支持向量機問題的思想,它是一個具體的、能夠操做的方法,核技巧是方法層面,不是思想層面,咱們應該首先看到思想層面,由於它有時候更重要,而不該該被這個技巧、方法層面的東西蒙蔽了雙眼。
這裏舉一個可能不是很恰當的例子:一個學校來了兩個老師,一個是普通二本師範院校剛剛畢業的學生 A,他是來工做的,一個是名牌大學的本科生 B,他來上課只是爲了爲考研賺一些生活費,他們的教學效果和受歡迎程度極可能是 A 更優,緣由很簡單:A 是來教書的,他選擇了教育行業是熱愛教學,通過 4 年的專業訓練和學習,在教學技能和教學態度上極可能遠遠超過 B,而 B 有可能根本不喜歡教書,名牌大學畢業只是他的標籤,他來教書只是爲了貼補生活費,他的主要精力放在考研上。因此咱們看待問題不能只看到這個問題吸引人的部分,有時要先看看它是用來幹什麼的。
所以咱們就能夠在高維空間中,使用第 1 階段和第 2 階段介紹的線性可分或者近似線性可分的策略和方法來解決在高維空間線性可分的問題,進而解決在原始低維空間中線性不可分的問題。核心思想就是構造特徵,轉化。
其實到這裏支持向量機的主要框架就介紹完了,就這麼簡單。那麼你要問我」核技巧「被你吃了嗎?不是的,核技巧只是咱們爲了解決在高維空間中線性可分問題的時候使用的一個方法,由於它有必定技巧性,還有一點點神奇、神祕的色彩,是一個可讓咱們偷懶的」捷徑「,因此咱們叫它」核技巧「。
上面說了」線性不可分的支持向量機「首先是構造特徵,把空間映射到高維空間,那麼具體怎麼作呢?
單單第一件事情其實就很很差辦了,這個非線性映射是什麼,那麼多非線性映射,你怎麼找。好在這件事情,偉大的數學家(計算機科學家)幫咱們解決了。核技巧就幫咱們一會兒幹了這兩件事,核技巧給出了一個具體的樣子,它雖然沒有直接給出非線性映射的樣子,但其實咱們並不關心,咱們只關心那個在高維空間中進行運算的結果(具體能夠等到理解了對偶問題的算法再來理解),核技巧把它們合二爲一,具體化了,咱們剩下要作的只是調參,若是你的數據很乾淨,噪聲很小,你能夠設置參數,使得算法預測很是準確,這樣即便過擬合,影響也不大,若是你的數據噪聲很大,就得設置另外一套參數,避免過擬合,這正是核技巧神奇、神祕的地方。
」核技巧「把一個抽象的問題具體化,簡單化,而且能夠且容易操做。在這裏仍是強調一下,」核技巧「是方法層面,而不是思想層面的東西。處理非線性可分的問題,SVM 處理的思路是構造特徵,使用樣本在新的高維特徵空間中線性可分。
若是咱們可以有一種方法輕鬆地解決低維空間中的非線性可分問題,或者咱們輕鬆地找到了從低維空間到高維空間的非線性映射,而且在高維空間中進行計算絕不費事,那可能核函數(核技巧)就不爲咱們所知了。
後面尚未介紹的內容有:
固然,絕大部分介紹 SVM 的書籍在這些知識上已經講解得很正確了,我只會談一些直觀理解和應用的部分。
求解:拉格朗日乘子法
應用:最大熵模型,SVM,線性判別分析,主成分分析