自學(xué)機(jī)器學(xué)習(xí)一個月严就,接觸到很多算法荒辕,但總覺得沒有體會到各個算法的精髓汗销,暈暈呼呼的。現(xiàn)在決定將每個算法總結(jié)一遍抵窒,白紙黑子寫下來弛针,隨著時光慢慢體會各個算法間不同。
較早的分類模型——感知機(jī)(1957)是二類分類的線性模型李皇,也是后來神經(jīng)網(wǎng)絡(luò)和支持向量機(jī)的基礎(chǔ)削茁。支持向量機(jī)(Support vector
machines)最早也是一種二類分類模型,經(jīng)過演進(jìn)掉房,現(xiàn)在成為既能處理多元線性和非線性的問題茧跋,也能處理回歸問題。在深度學(xué)習(xí)風(fēng)靡之前算是最好的分類算法卓囚。但目前SVM的應(yīng)用仍然很多瘾杭,尤其是在小樣本集上。
1.感知機(jī)模型
感知機(jī)模型是一種二分類的線性分類器哪亿,只能處理線性可分的問題粥烁,就是嘗試找到一個超平面將數(shù)據(jù)集分開贤笆,在二維空間這個超平面就是一條直線,在三維空間就是一個平面讨阻。感知機(jī)模型如下:
sign函數(shù)是指示函數(shù)(當(dāng)wx+b> 0芥永,f(x)= 1; wx+b < 0,f(x)= -1)钝吮。感知機(jī)的超平面是wx+b= 0埋涧。
將上述分段函數(shù)(wx+b> 0,f(x)= 1; wx+b < 0f(x)= -1)整合成f(x)(wx+b)>0搀绣,即y(wx+ b) >0飞袋。滿足該式子的樣本點即分類正確的點,不滿足的即分類錯誤的點链患。目標(biāo)是找到這樣一組參數(shù)w和b巧鸭,使得將訓(xùn)練集中的正類點和負(fù)類點分開。
接下來定義損失函數(shù)(損失函數(shù)是衡量錯誤的程度的函數(shù)麻捻。當(dāng)損失函數(shù)等于零時纲仍,意味著預(yù)測值=實際值)。
其中M是表示誤分類的樣本集合贸毕。
2.支持向量機(jī)
感知機(jī)模型中郑叠,我們的目標(biāo)是將訓(xùn)練集分開,只要是能將樣本分開的超平面都滿足我們的要求明棍,而這樣的超平面有很多乡革。支持向量機(jī)本質(zhì)上和感知機(jī)類似,只是要求更加苛刻摊腋。在分類過程中沸版,遠(yuǎn)離超平面的點肯定比超平面附近的點安全,更不容易被誤分類兴蒸。支持向量機(jī)的思想就是重點關(guān)注這些離超平面很近的點视粮,一句話就是在分類正確的同時,讓離超平面最近的點到超平面的間隔最大橙凳。
γ是離超平面最近的點的到超平面的幾何間隔蕾殴,將幾何間隔用函數(shù)間隔替代,可以將式子表示為:
γ(帽子)表示的是函數(shù)間隔岛啸,而函數(shù)間隔的取值是會隨著w钓觉,b成倍數(shù)變化而變化的,并不會影響最終的結(jié)果坚踩,因此令γ(帽子)
= 1议谷,則我們最終的問題可以表述為:
在這里引出了支持向量機(jī)的第一個亮點:最大化間隔,最大化間隔能使得分類更加精確,且該最大間隔超平面是存在且唯一的卧晓。
上面的問題中的1/2||w||2?是凸函數(shù)芬首,同時約束不等式是仿射函數(shù),因此這是一個凸二次規(guī)劃問題逼裆,根據(jù)凸優(yōu)化理論郁稍,我們可以借助拉格朗日函數(shù)將我們的約束問題轉(zhuǎn)化為無約束的問題來求解,我們的優(yōu)化函數(shù)可以表達(dá)為:
αi?是拉格朗日乘子胜宇,?
? ? ?αi?≥0?
i = 1, 2, 3, ....., n 耀怜。
根據(jù)拉格朗日的對偶性,可以將原始問題轉(zhuǎn)化為對偶問題(只要對偶問題存在桐愉,對偶問題的最優(yōu)化解就是原問題的最優(yōu)化解财破,一般對偶問題都比原始問題更容易求解)極大極小問題:
先對w,b求導(dǎo)求極小問題从诲,可以得到w左痢,b的值:
將求得的解代入到拉格朗日函數(shù)中,可以得到下面的優(yōu)化函數(shù)(將代入后原本的求α的極大問題轉(zhuǎn)換成了極小問題):
因此只需要求得我們的α的值就可以求得我們的w系洛,b的值(求α的常用算法是SMO算法俊性,可以參考https://www.cnblogs.com/pinard/p/6111471.html)假設(shè)最終求得的α的值為α*,則w描扯,b可以表述成:
引入KTT條件(KTT條件是上面拉格朗日函數(shù)求最優(yōu)解的必要條件):
從KTT條件中可以看出定页,當(dāng)yi(w*xi?+b*) - 1 > 0 時,αi*= 0绽诚;當(dāng)αi*> 0 時典徊,yi(w*xi?+b*) - 1 = 0;
結(jié)合上面的w恩够,b表達(dá)式可以引出支持向量機(jī)的第二個亮點:w卒落,b參數(shù)只與滿足yi(w*xi?+b*) - 1 = 0的樣本有關(guān),而這些樣本點就是離最大間隔超平面最近的點玫鸟,我們將這些點稱之為支持向量。因此很多時候支持向量在小樣本集分類時也能表現(xiàn)的很好犀勒,也正是因為這個原因屎飘。(另外需注意:α向量的個數(shù)是和訓(xùn)練集數(shù)量相等的,對與大的訓(xùn)練集贾费,會導(dǎo)致所需要的參數(shù)數(shù)量增多钦购,因此SVM在處理大的訓(xùn)練集時會比其他常見的機(jī)器學(xué)習(xí)算法要慢)
3.軟間隔最大化
通常情況下的訓(xùn)練集中都會存在一些異常點,而這些異常點會導(dǎo)致訓(xùn)練集線性不可分褂萧,但除去這些異常點之后押桃,剩下的樣本就是線性可分的,而上面講到的硬間隔最大化是無法處理線性不可分的問題导犹,線性不可分意味著有些樣本點的函數(shù)間隔是不能滿足大于等于1的約束條件唱凯。因此我們對每個樣本(xi,yi)引入一個松弛變量?ξi羡忘,則我們的約束條件變?yōu)椋?/p>
目標(biāo)函數(shù)中加入對松弛變量的懲罰項,懲罰參數(shù)C> 0磕昼,目標(biāo)優(yōu)化函數(shù)變?yōu)椋?/p>
因為整個求解的原始問題可以描述為:
采用和之前同樣的求解方法卷雕,利用拉格朗日將約束問題轉(zhuǎn)化為無約束的問題,將原始問題轉(zhuǎn)化為求極大極小問題的對偶問題票从,可以得到我們的最終結(jié)果:
和第二部分中的結(jié)果唯一不同的是αi?的取值范圍多了一個上限C值漫雕,對于軟間隔最大化時,其支持向量描述要復(fù)雜一些峰鄙,因為其支持向量可以在間隔邊界上(如下圖中的虛線)浸间,也可以在間隔邊界和超平面之間,或者在分離超平面誤分的一側(cè)吟榴。
4魁蒜、合頁損失函數(shù)
合頁損失函數(shù)又稱為hinge損失函數(shù),其表達(dá)式如下:
因此我們上面的優(yōu)化問題可以描述為:
對上述損失函數(shù)中的第一項可以理解為當(dāng)樣本分類正確且間隔大于1煤墙,即yi(wxi?+b) ≥ 1時梅惯,損失為0;而當(dāng)?yi(wxi?+b) < 1 時仿野,損失為
1-?yi(wxi?+b)铣减,注意在這里即使樣本分類正確,但是間隔小于1的也會計入損失脚作,這就是支持向量機(jī)的苛刻性葫哗。
下圖是hinge損失函數(shù)和其他一些損失函數(shù)的比較:
5、線性不可分
上面講到的軟間隔最大化只能解決由于異常點而導(dǎo)致的線性不可分問題球涛,而對于本身的數(shù)據(jù)集就是非線性的問題就無能為力劣针,根據(jù)相關(guān)理論對于在低維空間線性不可分的問題,一般將其映射到高維空間后都是線性可分的亿扁,我們可以將這一理論運(yùn)用到支持向量機(jī)中捺典,可以引入一個函數(shù)??(x),將樣本集從當(dāng)前維度映射到更高的維度从祝,回過頭來看我們之前的優(yōu)化函數(shù):
我們只需要將優(yōu)化函數(shù)中的內(nèi)積xi??·?xj?轉(zhuǎn)化成?(xi)?·??(xj)即可解決我們的非線性問題襟己,但與此同時也引入了新的問題我們的數(shù)據(jù)維度增大后,內(nèi)積的計算量也增大了牍陌,當(dāng)映射后的維度很高擎浴,甚至是達(dá)到無窮維之后,求解模型時的計算量也會顯著增大毒涧,那么如何來處理這個問題呢贮预?這就需要引入我們的核函數(shù)了。
我們知道即使在映射到高維后,內(nèi)積?(xi)?·??(xj)的值也依然是一個常數(shù)仿吞,那么是否存在這樣一個函數(shù)K(?xi?·?xj?)=??(xi)?·??(xj)滑频,有理論證明當(dāng)這樣的函數(shù)是存在的(Mercer定理已證明),我們將其稱為核函數(shù)茫藏。
在此引出了支持向量機(jī)的第三個亮點:在不需要將樣本映射到高維空間误趴,而利用核函數(shù)解決非線性分類問題。
通過借助核函數(shù)就解決了我們的問題务傲,當(dāng)然不是什么函數(shù)都能作為核函數(shù)的凉当,已經(jīng)被證明的核函數(shù)并不多,而常用的核函數(shù)也就那么幾個售葡,接下來我們介紹下常見的幾種核函數(shù):
1)線性核函數(shù)
線性核函數(shù)很好理解看杭,只能用來處理線性問題,其表達(dá)式如下:
因此我們可以將線性SVM和非線性SVM放在一起挟伙,只需要通過設(shè)定核函數(shù)和處理它們
2)多項式核函數(shù)
其中的a楼雹,c,d的值都是需要我們?nèi)ネㄟ^調(diào)參設(shè)置的尖阔。
3)徑向基核函數(shù)
徑向基核函數(shù)也稱為高斯核函數(shù)
參數(shù)較少贮缅,只需要自己去設(shè)置參數(shù)σ
4)Sigmoid核函數(shù)
K(x,y) = tanh (ax?·?z+ r)
需要設(shè)置調(diào)試的參數(shù)a,r介却,其中 tanh函數(shù)雙曲正切函數(shù)谴供,也被常用來作神經(jīng)網(wǎng)絡(luò)中的激活函數(shù)。
根據(jù)泰勒展開式齿坷,我們知道高階可導(dǎo)的函數(shù)都可以用多項式函數(shù)表示桂肌,在這里徑向基核函數(shù)和Sigmoid核函數(shù)都是高階可導(dǎo)的,因此都可以用多項式來表述永淌。換句話說崎场,徑向基核函數(shù)和Sigmoid核函數(shù)都是可以表述高階多項式的,因此在選擇核函數(shù)時遂蛀,徑向基核函數(shù)和Sigmoid核函數(shù)通常要比多項式核函數(shù)表現(xiàn)的要好谭跨,因為可以自動的去匹配階數(shù),而不需要我們?nèi)ブ付ǘ囗検胶撕瘮?shù)的階數(shù)李滴,此外多項式核函數(shù)需要調(diào)試的參數(shù)也比較多螃宙,因此通常選擇徑向基核函數(shù)。
6悬嗓、總結(jié)
總的來說污呼,在集成算法和神經(jīng)網(wǎng)絡(luò)風(fēng)靡之前裕坊,SVM基本上是最好的分類算法包竹,但即使在今天,它依然占有較高的地位。
SVM的主要優(yōu)點有:
1)引入最大間隔周瞎,分類精確度高
2)在樣本量較小時苗缩,也能準(zhǔn)確的分類,并且具有不錯的泛化能力
3)引入核函數(shù)声诸,能輕松的解決非線性問題
4)能解決高維特征的分類酱讶、回歸問題,即使特征維度大于樣本的數(shù)據(jù)彼乌,也能有很好的表現(xiàn)
SVM的主要缺點有:
1)在樣本量非常大時泻肯,核函數(shù)中內(nèi)積的計算,求解拉格朗日乘子α值的計算都是和樣本個數(shù)有關(guān)的慰照,會導(dǎo)致在求解模型時的計算量過大
2)核函數(shù)的選擇通常沒有明確的指導(dǎo)灶挟,有時候難以選擇一個合適的核函數(shù),而且像多項式核函數(shù)毒租,需要調(diào)試的參數(shù)也非常多
3)SVM對缺失數(shù)據(jù)敏感(好像很多算法都對缺失值敏感稚铣,對于缺失值,要么在特征工程時處理好墅垮,要么使用樹模型)惕医。