本章開(kāi)始進(jìn)入SVM的講解。SVM(Support Vector Machine)指的是支持向量機(jī),是常見(jiàn)的一種判別方法。在機(jī)器學(xué)習(xí)領(lǐng)域,是一個(gè)有監(jiān)督的學(xué)習(xí)模型,通常用來(lái)進(jìn)行模式識(shí)別、分類(lèi)以及回歸分析。
在進(jìn)入SVM學(xué)習(xí)之前,需要對(duì)以下知識(shí)點(diǎn)進(jìn)行說(shuō)明,大綱如下:
● 梯度下降法、拉格朗日乘子法、KKT條件回顧
● 感知器模型回顧
● SVM線性可分 (重點(diǎn))
● SVM線性不可分 (重點(diǎn))
● 核函數(shù) (重點(diǎn))
● SMO
1、梯度下降法、拉格朗日乘子法、KKT條件回顧
梯度下降法是一種求極值的算法,在對(duì)自變量沒(méi)有限制條件的時(shí)候使用。當(dāng)函數(shù)自變量存在取值范圍的時(shí)候,就無(wú)法使用梯度下降法進(jìn)行求解了。
10 回歸算法 - 梯度下降在線性回歸中的應(yīng)用
11 回歸算法 - BGD、SGD、MBGD梯度下降
12 回歸算法 - 手寫(xiě)梯度下降代碼
對(duì)自變量有取值范圍的函數(shù),如果要求極值,可以使用拉格朗日乘子法。即在有限制的情況下,對(duì)有限制條件的函數(shù)進(jìn)行轉(zhuǎn)化,轉(zhuǎn)化成無(wú)限制條件的函數(shù),使轉(zhuǎn)化完的函數(shù)和原函數(shù)等價(jià),這時(shí)取得極值點(diǎn)的時(shí)候和原函數(shù)相同。這就是拉格朗日乘子法的思想和存在的意義。
02 SVM - 拉格朗日乘子法
當(dāng)有限制的函數(shù)轉(zhuǎn)化成無(wú)限制的函數(shù)后,就可以通過(guò)求偏導(dǎo)的方法(梯度下降法)進(jìn)行求極值。
KKT條件 是指,滿足什么樣的條件下,可以讓原函數(shù)轉(zhuǎn)化成拉格朗日乘子法。
03 SVM - KKT條件
2、感知器模型
直觀理解:找到一些直線劃分兩個(gè)不同的分類(lèi),使得誤分的點(diǎn)越少越好。
04 SVM - 感知器模型
3、SVM線性可分、不可分 (重點(diǎn))
用感知器找到的直線不止一條,可以找到一條感知器模型的最優(yōu)解。最后找到的直線稱(chēng)為SVM支持向量機(jī)。
SVM支持向量機(jī)可以處理兩類(lèi)問(wèn)題:
SVM線性可分模型 ,即一條直線可以分割兩種分類(lèi)。

05 SVM - 支持向量機(jī) - 概念、線性可分
06 SVM - 線性可分SVM算法和案例
07 SVM - 軟間隔模型
08 SVM - 軟間隔模型算法流程
SVM線性不可分模型,兩種分類(lèi)比較緊密,用一條直線無(wú)法輕易分割。這種問(wèn)題的處理方式可以將數(shù)據(jù)映射到高維,通過(guò)一個(gè)面來(lái)分割兩類(lèi)數(shù)據(jù),最后求高維面在低維上的映射。

4、核函數(shù) (重點(diǎn))
解決數(shù)據(jù)映射到高維時(shí),計(jì)算量復(fù)雜的問(wèn)題。
10 SVM - 核函數(shù)
5、SMO
SVM通常用對(duì)偶問(wèn)題來(lái)求解,這樣的好處有兩個(gè):1、變量只有N個(gè)(N為訓(xùn)練集中的樣本個(gè)數(shù)),原始問(wèn)題中的變量數(shù)量與樣本點(diǎn)的特征個(gè)數(shù)相同,當(dāng)樣本特征非常多時(shí),求解難度較大。2、可以方便地引入核函數(shù),求解非線性SVM。求解對(duì)偶問(wèn)題,常用的算法是SMO,徹底地理解這個(gè)算法對(duì)初學(xué)者有一定難度,本文嘗試模擬算法作者發(fā)明該算法的思考過(guò)程,讓大家輕輕松松理解SMO算法。
理解原理即可。
參考: 《用講故事的辦法幫你理解SMO算法》
11 SVM - SMO - 序列最小優(yōu)化算法
12 SVM - SMO - 初始β變量的選擇、總結(jié)
13 SVM - SVR(回歸問(wèn)題的SVM)
6、scikit-learn SVM算法庫(kù)
scikit-learn中SVM的算法庫(kù)主要分為兩類(lèi),一類(lèi)是分類(lèi)算法,包括:SVC、NuSVC和LinearSVC這三個(gè)類(lèi),另外一類(lèi)是回歸算法,包括:SVR、NuSVR和LinearSVR這三個(gè)類(lèi);除此之外,用的比較多的SVM模型還有OneClassSVM類(lèi)(主要功能是:異常點(diǎn)檢測(cè))
詳見(jiàn):http://scikit-learn.org/dev/modules/svm.html

scikit-learn SVM算法庫(kù)概述分類(lèi)算法


scikit-learn SVM算法庫(kù)概述回歸算法


一些代碼案例:
《14 SVM - 代碼案例一 - 鳶尾花數(shù)據(jù)SVM分類(lèi)》
《15 SVM - 代碼案例二 - 鳶尾花數(shù)據(jù)不同分類(lèi)器效果比較》
《16 SVM - 代碼案例三 - 不同SVM核函數(shù)效果比較》
《17 SVM - 代碼案例四 - 不同SVM懲罰參數(shù)C值不同效果比較》