最近一直木有登錄過簡(jiǎn)書,轉(zhuǎn)戰(zhàn)寫技術(shù)博客了钧唐,今天突然發(fā)現(xiàn)自自己好久之前發(fā)的機(jī)器學(xué)習(xí)居然好多人關(guān)注,好開森額~我盡量多分享一些干貨給大家~ 謝謝各位大佬的關(guān)注
SVM的原理是什么?
SVM是一種二類分類模型。它的基本模型是在特征空間中尋找間隔最大化的分離超平面的線性分類器僻他。(間隔最大是它有別于感知機(jī))
(1)當(dāng)訓(xùn)練樣本線性可分時(shí),通過硬間隔最大化腊尚,學(xué)習(xí)一個(gè)線性分類器吨拗,即線性可分支持向量機(jī);
(2)當(dāng)訓(xùn)練數(shù)據(jù)近似線性可分時(shí)婿斥,引入松弛變量劝篷,通過軟間隔最大化,學(xué)習(xí)一個(gè)線性分類器民宿,即線性支持向量機(jī)娇妓;
(3)當(dāng)訓(xùn)練數(shù)據(jù)線性不可分時(shí),通過使用核技巧及軟間隔最大化活鹰,學(xué)習(xí)非線性支持向量機(jī)哈恰。
注:以上各SVM的數(shù)學(xué)推導(dǎo)應(yīng)該熟悉:硬間隔最大化(幾何間隔)---學(xué)習(xí)的對(duì)偶問題---軟間隔最大化(引入松弛變量)---非線性支持向量機(jī)(核技巧)。
SVM為什么采用間隔最大化华望?
當(dāng)訓(xùn)練數(shù)據(jù)線性可分時(shí)蕊蝗,存在無窮個(gè)分離超平面可以將兩類數(shù)據(jù)正確分開仅乓。
感知機(jī)利用誤分類最小策略赖舟,求得分離超平面,不過此時(shí)的解有無窮多個(gè)夸楣。
線性可分支持向量機(jī)利用間隔最大化求得最優(yōu)分離超平面宾抓,這時(shí),解是唯一的豫喧。另一方面石洗,此時(shí)的分隔超平面所產(chǎn)生的分類結(jié)果是最魯棒的,對(duì)未知實(shí)例的泛化能力最強(qiáng)紧显。
然后應(yīng)該借此闡述讲衫,幾何間隔,函數(shù)間隔孵班,及從函數(shù)間隔—>求解最小化1/2 ||w||^2 時(shí)的w和b涉兽。即線性可分支持向量機(jī)學(xué)習(xí)算法—最大間隔法的由來。
為什么要將求解SVM的原始問題轉(zhuǎn)換為其對(duì)偶問題篙程?
一枷畏、是對(duì)偶問題往往更易求解(當(dāng)我們尋找約束存在時(shí)的最優(yōu)點(diǎn)的時(shí)候,約束的存在雖然減小了需要搜尋的范圍虱饿,但是卻使問題變得更加復(fù)雜拥诡。為了使問題變得易于處理触趴,我們的方法是把目標(biāo)函數(shù)和約束全部融入一個(gè)新的函數(shù),即拉格朗日函數(shù)渴肉,再通過這個(gè)函數(shù)來尋找最優(yōu)點(diǎn)冗懦。)
二、自然引入核函數(shù)仇祭,進(jìn)而推廣到非線性分類問題批狐。
為什么SVM要引入核函數(shù)?
當(dāng)樣本在原始空間線性不可分時(shí)前塔,可將樣本從原始空間映射到一個(gè)更高維的特征空間嚣艇,使得樣本在這個(gè)特征空間內(nèi)線性可分。
引入映射后的對(duì)偶問題:
在學(xué)習(xí)預(yù)測(cè)中华弓,只定義核函數(shù)K(x,y)食零,而不是顯式的定義映射函數(shù)?。因?yàn)?b>特征空間維數(shù)可能很高寂屏,甚至可能是無窮維贰谣,因此直接計(jì)算?(x)·?(y)是比較困難的。相反迁霎,直接計(jì)算K(x,y)比較容易(即直接在原來的低維空間中進(jìn)行計(jì)算吱抚,而不需要顯式地寫出映射后的結(jié)果)。
核函數(shù)的定義:K(x,y)=<?(x),?(y)>考廉,即在特征空間的內(nèi)積等于它們?cè)谠紭颖究臻g中通過核函數(shù)K計(jì)算的結(jié)果秘豹。
除了SVM之外,任何將計(jì)算表示為數(shù)據(jù)點(diǎn)的內(nèi)積的方法昌粤,都可以使用核方法進(jìn)行非線性擴(kuò)展既绕。
svm RBF核函數(shù)的具體公式?
Gauss徑向基函數(shù)則是局部性強(qiáng)的核函數(shù)涮坐,其外推能力隨著參數(shù)σ的增大而減弱凄贩。
這個(gè)核會(huì)將原始空間映射為無窮維空間。不過袱讹,如果σ選得很大的話疲扎,高次特征上的權(quán)重實(shí)際上衰減得非常快捷雕,所以實(shí)際上(數(shù)值上近似一下)相當(dāng)于一個(gè)低維的子空間椒丧;反過來,如果?σ選得很小非区,則可以將任意的數(shù)據(jù)映射為線性可分——當(dāng)然瓜挽,這并不一定是好事,因?yàn)殡S之而來的可能是非常嚴(yán)重的過擬合問題征绸。不過久橙,總的來說俄占,通過調(diào)控參數(shù)σ,高斯核實(shí)際上具有相當(dāng)高的靈活性淆衷,也是使用最廣泛的核函數(shù)之一缸榄。
為什么SVM對(duì)缺失數(shù)據(jù)敏感?
這里說的缺失數(shù)據(jù)是指缺失某些特征數(shù)據(jù)祝拯,向量數(shù)據(jù)不完整甚带。SVM沒有處理缺失值的策略(決策樹有)。而SVM希望樣本在特征空間中線性可分佳头,所以特征空間的好壞對(duì)SVM的性能很重要鹰贵。缺失特征數(shù)據(jù)將影響訓(xùn)練結(jié)果的好壞。
SVM是用的是哪個(gè)庫康嘉?Sklearn/libsvm中的SVM都有什么參數(shù)可以調(diào)節(jié)碉输?
用的是sklearn實(shí)現(xiàn)的。采用sklearn.svm.SVC設(shè)置的參數(shù)亭珍。本身這個(gè)函數(shù)也是基于libsvm實(shí)現(xiàn)的(PS: libsvm中的二次規(guī)劃問題的解決算法是SMO)敷钾。
SVC函數(shù)的訓(xùn)練時(shí)間是隨訓(xùn)練樣本平方級(jí)增長(zhǎng),所以不適合超過10000的樣本肄梨。
對(duì)于多分類問題阻荒,SVC采用的是one-vs-one投票機(jī)制,需要兩兩類別建立分類器众羡,訓(xùn)練時(shí)間可能比較長(zhǎng)侨赡。
sklearn.svm.SVC(C=1.0,?kernel='rbf',?degree=3,?gamma='auto',?coef0=0.0,?shrinking=True,?probability=False,tol=0.001,?cache_size=200,?class_weight=None,?verbose=False,?max_iter=-1,?decision_function_shape=None,random_state=None)
參數(shù):
l? C:C-SVC的懲罰參數(shù)C?默認(rèn)值是1.0
C越大,相當(dāng)于懲罰松弛變量纱控,希望松弛變量接近0辆毡,即對(duì)誤分類的懲罰增大,趨向于對(duì)訓(xùn)練集全分對(duì)的情況甜害,這樣對(duì)訓(xùn)練集測(cè)試時(shí)準(zhǔn)確率很高,但泛化能力弱球昨。C值小尔店,對(duì)誤分類的懲罰減小,允許容錯(cuò)主慰,將他們當(dāng)成噪聲點(diǎn)嚣州,泛化能力較強(qiáng)。
l? kernel:核函數(shù)共螺,默認(rèn)是rbf该肴,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’?
0 – 線性:u'v
1 – 多項(xiàng)式:(gamma*u'*v + coef0)^degree
2 – RBF函數(shù):exp(-gamma|u-v|^2)
3 –sigmoid:tanh(gamma*u'*v + coef0)
l? degree:多項(xiàng)式poly函數(shù)的維度,默認(rèn)是3藐不,選擇其他核函數(shù)時(shí)會(huì)被忽略匀哄。
l? gamma:?‘rbf’,‘poly’ 和‘sigmoid’的核函數(shù)參數(shù)秦效。默認(rèn)是’auto’,則會(huì)選擇1/n_features
l? coef0:核函數(shù)的常數(shù)項(xiàng)涎嚼。對(duì)于‘poly’和 ‘sigmoid’有用阱州。
l? probability:是否采用概率估計(jì)?.默認(rèn)為False
l? shrinking:是否采用shrinking heuristic方法法梯,默認(rèn)為true
l? tol:停止訓(xùn)練的誤差值大小苔货,默認(rèn)為1e-3
l? cache_size:核函數(shù)cache緩存大小,默認(rèn)為200
l? class_weight:類別的權(quán)重立哑,字典形式傳遞夜惭。設(shè)置第幾類的參數(shù)C為weight*C(C-SVC中的C)
l? verbose:允許冗余輸出?
l? max_iter:最大迭代次數(shù)铛绰。-1為無限制滥嘴。
l? decision_function_shape:‘ovo’, ‘ovr’ or None, default=None3
l? random_state:數(shù)據(jù)洗牌時(shí)的種子值,int值
主要調(diào)節(jié)的參數(shù)有:C至耻、kernel若皱、degree、gamma尘颓、coef0走触。
SVM如何處理多分類問題?
一般有兩種做法:一種是直接法疤苹,直接在目標(biāo)函數(shù)上修改互广,將多個(gè)分類面的參數(shù)求解合并到一個(gè)最優(yōu)化問題里面∥酝粒看似簡(jiǎn)單但是計(jì)算量卻非常的大惫皱。
另外一種做法是間接法:對(duì)訓(xùn)練器進(jìn)行組合。其中比較典型的有一對(duì)一尤莺,和一對(duì)多旅敷。
一對(duì)多,就是對(duì)每個(gè)類都訓(xùn)練出一個(gè)分類器颤霎,由svm是二分類媳谁,所以將此而分類器的兩類設(shè)定為目標(biāo)類為一類,其余類為另外一類友酱。這樣針對(duì)k個(gè)類可以訓(xùn)練出k個(gè)分類器晴音,當(dāng)有一個(gè)新的樣本來的時(shí)候,用這k個(gè)分類器來測(cè)試缔杉,那個(gè)分類器的概率高锤躁,那么這個(gè)樣本就屬于哪一類。這種方法效果不太好或详,bias比較高系羞。
svm一對(duì)一法(one-vs-one)郭计,針對(duì)任意兩個(gè)類訓(xùn)練出一個(gè)分類器,如果有k類觉啊,一共訓(xùn)練出C(2,k) 個(gè)分類器拣宏,這樣當(dāng)有一個(gè)新的樣本要來的時(shí)候,用這C(2,k)?個(gè)分類器來測(cè)試杠人,每當(dāng)被判定屬于某一類的時(shí)候勋乾,該類就加一,最后票數(shù)最多的類別被認(rèn)定為該樣本的類嗡善。