1. 程式人生 > >機器學習之&&SVM支援向量機入門:Maximum Margin Classifier

機器學習之&&SVM支援向量機入門:Maximum Margin Classifier

概率論只不過是把常識用數學公式表達了出來。

——拉普拉斯

0. 前言

這是一篇SVM的入門筆記,來自我對PlusKid、JerryLead、July等大神文章的拜讀心得,說是心得還不如說是讀文筆記,希望在自己理解的層面上給予SVM這個偉大的機器學習演算法概要介紹,讓更多的熱愛機器學習的夥伴們進入到SVM的世界。PS:文章會以問答的形式為主要結構。

1.概念

1.1.什麼是SVM?

支援向量機即 Support Vector Machine,簡稱 SVM 。(第一次接觸SVM是在阿里大資料競賽的時候,大家都在討論用什麼樣的方法去掙阿里那100W的獎金(鄙人因為能力有限進入決賽階段,但是因為模型優化問題,名落松山),SVM、LR、協同過濾等等)SVM是Vapnik和Cortes於1995年首先提出的,它旨在解決

小樣本、非線性、高緯(因為現實應用中的資料多為這般特性)等特性的資料特徵的模式識別問題,特別在分類問題中,一直被大家認為是一種現有的可用的效果最好的分類演算法之一。(甚至很多人覺得之一可以去掉,但是神經網路"大大"不願意-。-)

1.2.為什麼會有SVM?

前面已經說過了SVM在解決小樣本、非線性、高緯資料上的優勢,那麼我們就從線性分類器開始逐步探討為什麼會有SVM的出現?

1.2.1.線性分類器

給定一些資料點,它們分別屬於兩個不同的類,現在要找到一個線性分類器把這些資料分成兩類。如果用x表示資料點,用y表示類別(y可以取1或者-1,分別代表兩個不同的類,有些地方會選 0 和 1 ,當然其實分類問題選什麼都無所謂,只要是兩個不同的數字即可,不過這裡選擇 +1 和 -1 是為了方便 SVM 的推導,後面就會明瞭了

),一個線性分類器的學習目標便是要在n維的資料空間中找到一個超平面(hyper plane),這個超平面的方程可以表示為( wT中的T代表轉置):

(為什麼會有這個形式化表示的超平面方程,請猛戳這裡)

一個超平面,在二維空間中的例子就是一條直線。我們希望的是,通過這個超平面可以把兩類資料分隔開來,比如,在超平面一邊的資料點所對應的 y 全是 -1 ,而在另一邊全是 1 。具體來說,我們令 f(x)=wTx+b ,顯然,如果 f(x)=0 ,那麼 x 是位於超平面上的點。我們不妨要求對於所有滿足 f(x)<0 的點,其對應的 y 等於 -1 ,而 f(x)>0 則對應 

y=1 的資料點。當然,有些時候(或者說大部分時候)資料並不是線性可分的,這個時候滿足這樣條件的超平面就根本不存在,不過關於如何處理這樣的問題我們後面會講(SVM核函式的出現),這裡先從最簡單的情形開始推導,就假設資料都是線性可分的,亦即這樣的超平面是存在的。

如下圖所示,兩種顏色的點分別代表兩個類別,紅顏色的線表示一個可行的超平面。在進行分類的時候,我們將資料點 x代入 f(x) 中,如果得到的結果小於 0 ,則賦予其類別 -1 ,如果大於 0 則賦予類別 1 。如果 f(x)=0,則很難辦了,分到哪一類都不是。事實上,對於 f(x) 的絕對值很小的情況,我們都很難處理,因為細微的變動(比如超平面稍微轉一個小角度)就有可能導致結果類別的改變。理想情況下,我們希望 f(x) 的值都是很大的正數或者很小的負數,這樣我們就能更加確信它是屬於其中某一類別的。

當然,有些時候,或者說大部分時候資料並不是線性可分的,這個時候滿足這樣條件的超平面就根本不存在(不過關於如何處理這樣的問題我們後面會講),這裡先從最簡單的情形開始推導,就假設資料都是線性可分的,亦即這樣的超平面是存在的。

    換言之,在進行分類的時候,遇到一個新的資料點x將x代入f(x) 中,如果f(x)小於0x類別賦為-1,如果f(x)大於0x的類別賦為1。

    接下來的問題是,如何確定這個超平面呢?從直觀上而言,這個超平面應該是最適合分開兩類資料的直線。而判定“最適合”的標準就是這條直線離直線兩邊的資料的間隔最大。所以,得尋找有著最大間隔的超平面。

2.SVM之函式間隔(functional margin)與幾何間隔(geometrical margin)

2.1.什麼是函式間隔和幾何間隔及其關係?

為了讓欲分類的點遠離超平面(這樣分類效果更好),我們可以用(y*(w*x+b))的正負性來判定或表示分類的正確性,因此我們定義函式間隔如下:


注意前面乘上類別 y 之後可以保證這個 margin 的非負性(因為 f(x)<0 對應於 y=1 的那些點),而點到超平面的距離定義為 geometrical margin 。不妨來看看二者之間的關係。

如圖所示,對於一個點 x ,令其垂直投影到超平面上的對應的為 x0 ,由於 w 是垂直於超平面的一個向量,我們有

x=x0+γww

又由於 x0 是超平面上的點,滿足 f(x0)=0 ,代入超平面的方程即可算出

γ=wTx+bw=f(x)w

不過,這裡的 γ 是帶符號的,我們需要的只是它的絕對值,因此類似地,也乘上對應的類別 

相關推薦

機器學習&&SVM支援向量入門:Maximum Margin Classifier

概率論只不過是把常識用數學公式表達了出來。 ——拉普拉斯 0. 前言 這是一篇SVM的入門筆記,來自我對PlusKid、JerryLead、July等大神文章的拜讀心得,說是心得還不如說是讀文筆記,希望在自己理解的層面上給予SVM這個偉大的機

機器學習實戰——SVM支援向量 實現記錄

問題:TypeError: data type not understood alphas = mat(zeros(m,1)) 原因是zeros(())格式不對,更改後: alphas = mat(zeros((m,1))) 問題:關於IDLE中換行,回車前面出現很多空格的情況

機器學習演算法——SVM(支援向量)

文章目錄 1. SVM簡介 2. SVM的一些概念 2.1 函式間隔與幾何間隔 2.2 支援向量 3. SVM模型目標函式與優化 3.1 SVM模型目標函式的推導(線性可分)

PYTHON機器學習實戰——SVM支援向量

支援向量機不是很好被理解,主要是因為裡面涉及到了許多數學知識,需要慢慢地理解。理論知識參考:http://www.cnblogs.com/steven-yang/p/5658362.html 一下附上原始碼:#-*- coding:utf-8 -*- #!/usr/bin/

Python/scikit-learn機器學習庫(SVM支援向量)

SVM SVM用於分類、迴歸、異常檢測。 優點: 高維空間有效。 維度小於樣本數時依然有效。 樣本少時表現不好。 分類 多分類: SVC、NuSVC、LinearSVC。SVMs決策函式依賴於訓練資料中一部分,這些向量稱為支援向量。 NuSVC

機器學習筆記(13)---支援向量SVM

前言 學習前幾章很順利,然後就覺得機器學習也不過如此,但學到這章時,發現如果沒有一點理論基礎,是看不懂的(如果不想看懂理論,可直接使用MLiA書上例子,只要知道怎麼把資料組織成演算法支援的資料型別即可),回想起看前幾章為什麼能這麼順利,原因是之前看過一堆相關視

python機器學習庫sklearn——支援向量svm

支援向量機的優勢在於: 在高維空間中非常高效.即使在資料維度比樣本數量大的情況下仍然有效. 在決策函式(稱為支援向量)中使用訓練集的子集,因此它也是高效利用記憶體的. 通用性: 不同的核函式與特定的決策函式一一對應.常見的 kernel 已經提供,也

王小草【機器學習】筆記--支援向量SVM

標籤(空格分隔): 王小草機器學習筆記 1.SVM的原理與目標 1.1 分割超平面 來看上圖,假設C和D是兩個不想交的凸集,則存在一個超平面P,這個P可以將C和D分離。 這兩個集合的距離,定義為兩個集合間元素的最短距離。 做集合C和集合

機器學習支持向量(三):核函數和KKT條件的理解

麻煩 ron 現在 調整 所有 核函數 多項式 err ges 註:關於支持向量機系列文章是借鑒大神的神作,加以自己的理解寫成的;若對原作者有損請告知,我會及時處理。轉載請標明來源。 序: 我在支持向量機系列中主要講支持向量機的公式推導,第一部分講到推出拉格朗日對偶函數的對

機器學習支持向量(一):支持向量的公式推導

根據 監督式 art 通用 利用 哪些 這就是 在線 方法 註:關於支持向量機系列文章是借鑒大神的神作,加以自己的理解寫成的;若對原作者有損請告知,我會及時處理。轉載請標明來源。 序: 我在支持向量機系列中主要講支持向量機的公式推導,第一部分講到推出拉格朗日對偶函數的對偶因

機器學習支持向量(四)

應用 問題 計算過程 非線性 簡單 常熟 一段 約束 有關 引言:   SVM是一種常見的分類器,在很長一段時間起到了統治地位。而目前來講SVM依然是一種非常好用的分類器,在處理少量數據的時候有非常出色的表現。SVM是一個非常常見的分類器,在真正了解他的原理之前我們多多少少

機器學習 --- 軟間隔支援向量

一、軟間隔支援向量機直觀理解 之前所介紹的支援向量機形式都是要求所有的樣本都要能被正確地劃分,這又被稱作"硬間隔支援向量機",當資料是帶有噪聲的,就可能會產生一些脫離群體的點。在實際情況中,採用硬間隔的方式難以確定合適的核函式使得訓練樣本在特徵空間中線性可分,即使能確定某個核函式能進行很好的劃分

Python Spark SVM支援向量

資料準備 和決策樹分類一樣,依然使用StumbleUpon Evergreen資料進行實驗。 Local模式啟動ipython notebook cd ~/pythonwork/ipynotebook PYSPARK_DRIVER_PYTHON=

sklearn庫學習支援向量

核支援向量機 核SVM的重要引數是正則化引數C、核的選擇以及與核相關的引數。 在低維資料和高維資料上表現都很好。 但對樣本個數的縮放表現不好。 預處理資料和調參都需要非常小心。 線性模型在低維空間中可能非常受限,因為線和平面的靈活性有限,新增更多的特徵讓線性

Stanford機器學習筆記-8. 支援向量(SVMs)概述

8. Support Vector Machines(SVMs) Content 8. Support Vector Machines(SVMs)       8.1 Optimization Objection       8.2 Large margin intuition       8.

機器學習實戰】支援向量----分類庫和簡單訓練mnist

前面已經對mnist資料集進行了讀取,現在我們可以直接使用sklearn.svm模組中的演算法庫對mnist資料集進行訓練。 【svm模組】 演算法庫: sklearn.svm模組中提供了這些庫: 大概分成這幾類(除了svm_l1_min_c

機器學習筆記8-支援向量(3/3)

機器學習筆記8-支援向量機(3/3) scikit-learn中的SVM函式 機器學習庫scikit-learn中也集成了SVM的函式,可以方便的進行呼叫,可用來分類、迴歸和異常點檢測。 支援向量機的優點有: i)在高維空間效果很好 ii)當維度數大於樣本點數時,效果仍然不錯 i

吳恩達機器學習筆記 —— 13 支援向量

本章講述了SVM,相比於《統計學習方法》,從邏輯迴歸的角度更容易理解了。 從邏輯迴歸來看,看損失值與Z的值的關係: 代入原來的是指,可以化簡公式: 總結來說:如果y=1,我們希望z的值大於等於1,如果y=0,我們希望z的值小於-1,這樣損失函式的值都會為0. 線性可分的決策邊界: 但是這種情況對於

機器學習實戰》支援向量的數學理解及程式實現

一、 引言最近在機器學習課上,學到的《機器學習實戰》第六章的支援向量機,這部分內容非常多,不僅要會程式設計和測試,還要理解它的數學基礎,這裡對這部分的學習進行一些總結。二、 SVM的數學原理從一個簡單的二分問題開始說吧:我們要把這兩類不同的點區分開,那麼在這個二維平面上就是找

機器學習實戰-55:支援向量分類演算法(Support Vector Machine)

支援向量機分類演算法 支援向量機(Support Vector Machine)分類演算法屬於監督學習演算法。常用分類演算法包括:邏輯迴歸(Logistic Regression, LR)、K最近鄰(k-Nearest Neighbor, KNN)、樸素貝葉斯