本人水平有限,如果有錯誤的地方挨措,希望各位大神能夠不吝賜教挖滤,及時指正崩溪。
老規(guī)矩浅役,喝水不忘掘井人,首先要感謝發(fā)明SVM算法的前輩Vapnik伶唯。其次觉既,也要感謝Sean的引領(lǐng),把我?guī)脒@一行乳幸,否則瞪讼,光靠我自己摸索,會花去更多的時間粹断、精力符欠。最后,要感謝無數(shù)的人瓶埋,那些對我的思考方式產(chǎn)生影響的人希柿。
【我們生在一個不算太壞的時代,Vapnik前輩剛剛提出SVM算法的時候养筒,局限于那個年代計算機計算能力的不足曾撤,根本沒有多少人重視SVM算法≡畏啵】
又是一次喜憂參半挤悉,喜的是,技多不壓身巫湘,又多了一個解決問題的手段装悲,憂的是昏鹃,這個手段....好像也不能指望其預(yù)測股價啊。
SVM算法的推導(dǎo)過程中诀诊,將使用到拉格朗日乘數(shù)盆顾,還有一些向量知識。SVM其實也是一種分類算法畏梆,當(dāng)然了您宪,分類算法可以有很多,不過奠涌,SVM確有其強大的地方宪巨。【較之于上一篇的神經(jīng)網(wǎng)絡(luò)溜畅,SVM是一個凸空間捏卓,所以不會存在局部極值的問題〈雀瘢】
【這里又要插句題外話怠晴,你們可能在其它某個地方,會看到“聚類”這個詞浴捆,雖然只和“分類”差了一個字蒜田,但是在算法上,意義完全不同选泻。假如冲粤,你看到一群人,如果我讓你用肉眼去觀察页眯,超過178公分(為什么是178梯捕,因為Binhao的身高是178)的為一類人,不超過的為另一類人窝撵,那么傀顾,這個就叫分類。如果我不給定“178公分”這個指標或者說標簽碌奉,讓你把這些人歸類短曾,那你可能會這樣做:自己衡量一個度,高的為一類道批,矮的為一類错英,或者以胖的-中等-瘦的歸類,或者戴不戴眼鏡隆豹、頭發(fā)長中短椭岩、膚色等等,所有這些,我都沒有指定某個指標或貼上某個標簽判哥,完全是你根據(jù)這群人當(dāng)中每個人的特點献雅,來自己歸類,這個就叫聚類塌计。所以也可以看出挺身,分類是有監(jiān)督的,聚類是無監(jiān)督的锌仅≌录兀】
來看這樣一副圖:
如果要把圖中的紅點和藍點,用界線區(qū)分開热芹,那不同的分類算法劃出來的線可能會不同:
綠色的界線可能來自神經(jīng)網(wǎng)絡(luò)贱傀,黃色的界線可能來自決策樹,紫色的界線就是單純的一條直線伊脓,也可能是來自KNN(最近鄰居算法)府寒。
然而,雖然我畫圖不怎么樣报腔,但是審美還是可以的株搔,而且估計強迫癥犯了,總覺得這些線條都不太完美纯蛾。但是我一下子又想不出來更完美的線條纤房。大自然是神奇而美妙的,它給了我們無數(shù)的饋寶茅撞。于是帆卓,我夜觀天象,(我們應(yīng)該致力于環(huán)境的保護米丘,不然晚上看到的天空都是灰蒙蒙一片。但愿AI能夠在環(huán)保也做出巨大貢獻糊啡。)無意之中拄查,神奇而美妙的星空,給了我靈感棚蓄。如果我把圖-1稍加修飾一下:
我把圖-1中的藍點用藍線連了起來预茄,紅點用紅線連了起來舱污,這看起來像什么?藍色的點陣就好像夜空中的天鷹座,紅色的點陣就好像夜空中的天琴座屉佳。你不太知道這兩個星座沒關(guān)系,不過你一定聽說過钝尸,牛郎星和織女星挎狸。仔細再看一下,最大的那顆藍色的點就是牛郎星,最大的那顆紅色的點就是織女星科平。
雖然我肉眼無法觀測到銀河褥紫,但是我可以想到,把天鷹座和天琴座隔開的瞪慧,是銀河髓考。所以,又可以改動下圖片:
我們知道弃酌,在天文學(xué)角度氨菇,牛郎星和織女星是不可能碰到一塊的。但是在我國的古典文學(xué)典故里妓湘,為了分開牛郎和織女门驾,這條銀河被設(shè)計為盡可能最寬。
感謝大自然多柑,感謝宇宙奶是,這些靈感很重要。接下去竣灌,就該把這副圖交給擁有七十二般變化的數(shù)學(xué)了聂沙。
SVM:Support Vector Machine,支持向量機初嘹。圖-4虛線經(jīng)過的點及汉,如果把它們看作是一個個向量的坐標的話,這些坐標將有助于確定一個幾何空間中的超平面屯烦,這個超平面用來區(qū)分這些數(shù)據(jù)坷随,所以稱之為支持向量,那么“機”呢驻龟?我不知道温眉,我真的不知道。但Sean說得是對的翁狐,就是算法的意思类溢。漢語里,我們會說露懒,“我寫了一套【代碼\程序\軟件\系統(tǒng)】”闯冷,很多時候,中括號里的四個詞都是可以互換的懈词,細微的差別只在于聽的人感受到的高大上的程度不同而已蛇耀,所以,英語里“Learning坎弯、Machine纺涤、Algorithm”也是同一個道理译暂。
那么我們來看看,向量究竟能幫助我們解決那些困惑:
(這些直線都不太直洒琢,希望你們能體諒一下秧秉。)
假設(shè),有向量w衰抑,對向量w暫且只有一個要求象迎,在方向上,它垂直于作為分割的那條實線呛踊。同時砾淌,我們知道,銀河之中還有很多星星點點谭网,分布于實線兩側(cè)汪厨、虛線之內(nèi),假設(shè)其中就有一點x愉择,我們看作向量x劫乱。
因為w是垂直于實線的,所以向量x在w上的投影锥涕,如下圖所示:
黃色線條即為x在w上的投影衷戈,記為wx【老規(guī)矩,鍵盤輸入限制层坠,也是為了節(jié)省時間殖妇,箭頭就不畫了,但這里實際表示的是向量】破花。
如果這條黃色投影的長度越過了實線谦趣,也就是超過了某個長度,我們認為它就是一類(或者說正例)座每,記為 wx - c >=0前鹅,反之,就是另一類(反例)尺栖,記為 wx - c <0嫡纠。
多么熟悉的片段,故伎重演延赌,令c = -b,則有:wx + b >0 和 wx +b <0叉橱。
到這里還沒有完挫以,因為x是在兩條虛線內(nèi)的,我們現(xiàn)在是要對兩條虛線外的點進行分類窃祝,所以我們不得不再次使用數(shù)學(xué)上的便利掐松。
假設(shè)有一個正例的x(右側(cè)虛線外),則我們要求 wx + b >= 1,對于反例的x(左側(cè)虛線外)大磺,則 wx + b <= -1抡句。【注意杠愧,這一行的x只是名字上和上面幾行的x一樣待榔,代表的意義已經(jīng)不同。這正是之前提到的流济,不要被公式的不同表達形式給蒙蔽锐锣。】
再假設(shè)有一個變量y绳瘟,當(dāng)wx + b >= 1時雕憔,y等于1;當(dāng)wx + b <= -1時糖声,y等于-1斤彼。
在等式兩邊都乘以y,對于正例的x蘸泻,有:y(wx + b) >= 1琉苇;對于反例的x,也有:y(wx + b) >= 1 【wx + b <= -1的兩邊同時乘以了值為-1的y】蟋恬。
y(wx + b) >=1翁潘,即y(wx + b) - 1 >= 0。
但我現(xiàn)在要讓y(wx + b) - 1 = 0歼争,等于0在圖像上意味著拜马,在那兩條虛線上。
在我國古典文學(xué)典故里沐绒,七夕是牛郎織女相會的日子×┟В現(xiàn)在假設(shè)在七夕那天,織女來到銀河邊乔遮,牛郎早就已經(jīng)等在銀河的那邊了扮超。因為銀河被設(shè)計為盡可能寬,所以蹋肮,接下來出刷,在喜鵲搭建鵲橋的時候,數(shù)學(xué)是否能夠幫助我們計算出這個最大寬度呢坯辩?
由圖可知馁龟,向量z代表織女星,向量n代表牛郎星漆魔,兩點之間的直線距離為:向量z-向量n坷檩,記作(z-n)【箭頭省略了却音,你們懂的】。
w是條垂直于直線的向量矢炼。所以系瓢,河的寬度為:(z-n)w / ‖w‖。
雖然這里n代表了牛郎星句灌,z代表了織女星夷陋,但是往上翻一翻,n其實就是之前“反例的x”涯塔,z就是“正例的x”肌稻。由y(wx+b) -1 = 0以及正反例下y的取值(-1,1),可得:nw = -b - 1,? zw = -b + 1匕荸。所以:(z-n)w / ‖w‖ = [-b + 1 - (-b - 1)] /??‖w‖ = 2 /??‖w‖爹谭。
現(xiàn)在要求河的寬度( 2 /??‖w‖)的最大值,也就是求‖w‖的最小值榛搔,又是老生常談了诺凡,也就是求1/2 *?‖w‖^2的最小值。
但是践惑,這次的求極值腹泌,與以往有些不一樣。因為:1/2 *?‖w‖^2是有約束條件的尔觉,w必須滿足y(wx+b) -1 = 0凉袱。在帶有約束條件的函數(shù)求極值的情況下,我們要引入拉格朗日乘數(shù)侦铜,從而擺脫約束條件的束縛专甩。?
我們用R表示河寬:【要求極值的函數(shù) - 總和(拉格朗日乘子 * 約束條件函數(shù))】
R =?1/2 *?‖w‖^2 -?∑λ[y(wx + b) - 1]?
? ? = 1/2 *?‖w‖^2 - (∑λywx + ?∑λyb -?∑λ)?【敲黑板,w钉稍,x是向量涤躲,原因你們懂的】
接下去又回到熟悉的套路了,對w求偏導(dǎo)贡未,并令偏導(dǎo)函數(shù)結(jié)果為0:
ΔR/Δw = w -?∑λyx = 0【上一篇提到的种樱,對w求偏導(dǎo),就把除w以外的皆看作常數(shù)俊卤,常數(shù)的導(dǎo)數(shù)為零嫩挤,再配合函數(shù)加法及乘法求導(dǎo)規(guī)則】
所以 w =?∑λyx。
對b求偏導(dǎo):
ΔR/Δb = ∑λy = 0消恍,所以俐镐,∑λy = 0。
再把?w =?∑λyx?代入R哺哼,得:
R = 1/2 * (∑λyx)(∑λyx) - (∑λyx)(∑λyx) -? b∑λy + ∑λ佩抹,代入∑λy = 0,得:
R =?∑λ - 1/2 (∑λyx)(∑λyx)?=?∑λ?- 1/2 ∑∑λλyyxx 【兩個樣本點積】
河的最大寬度取決于兩個樣本的點積取董。
于是就有:wx + b = (∑λyx)x + b(也取決于兩個樣本間的點積)
這兩個式子(河寬與虛線)都與樣本的線性和有關(guān)聯(lián)棍苹。我們來反思一下,我們?yōu)槭裁匆肜窭嗜粘藬?shù)茵汰?因為要求河寬的極值枢里。河寬邊界上有什么?支持向量蹂午,因為落在邊界(虛線)上的的向量可以確定一個超平面栏豺,所以叫支持向量。那也就是說豆胸,拉格朗日乘數(shù)只參與到支持向量的確認中奥洼,如果某個向量不是支持向量,那么拉格朗日乘數(shù)就對它沒有效果晚胡,也就是λ=0灵奖。而非支持向量的數(shù)量一般來說,總是多于支持向量估盘,所以在∑λyx中瓷患,很多項都為0。
【本段粗斜體部分遣妥,包括圖-12擅编,為今早追加部分。是昨晚入睡時箫踩,突然頓悟Sean曾經(jīng)舉例過的兩個圓相切的例子爱态。但愿你們還記得上一篇神經(jīng)網(wǎng)絡(luò)提到的等高線圖,不同的是班套,上一回是用來爬山肢藐,所以越里面的圓,高度越高吱韭,這一回吆豹,1/2 *?‖w‖^2是個多維空間的凸空間(圖-12紅圈部分),所以又回到了梯度下降理盆,即越往里面痘煤,高度越低。為了簡化形式猿规,令f(w) =?1/2 *?‖w‖^2衷快;g(w) =?y(wx + b) - 1 = 0(河的邊界,也就是那兩條虛線)姨俩。由已知情況可得蘸拔,f(w)是在朝里移動师郑,f(w)朝里意味著河的邊界在擴大,也就是g(w)在朝外側(cè)移動(圖-12綠圈部分)调窍,當(dāng)f(w)與g(w)外切時宝冕,這一切點上,它們兩個方向相反邓萨,大小不等地梨。所以要令f(w) =?λg(w),這樣缔恳,f(w)的導(dǎo)數(shù) =?λg(w)?的導(dǎo)數(shù)宝剖,推得:f(w)的導(dǎo)數(shù)? - λg(w)?的導(dǎo)數(shù) = 0,也就是 (f(w) - λg(w))的導(dǎo)數(shù) = 0歉甚,就是再上面的一大串公式推導(dǎo)了万细。從圖里也能看出,λ大于等于0铃芦,而且它不是對所有的滿足f(w)的w有約束雅镊。】
當(dāng)然刃滓,如果遇到噪音仁烹,或者一些脫離群體的數(shù)據(jù),比方說咧虎,圖-7中的織女星z卓缰,如果通過鵲橋來到銀河對岸,那么這個時候砰诵,銀河就不能把她和牛郎星分開征唬,即“線性不可分”【圖-8】
這個時候,我們引入松弛變量茁彭,希臘字母'ζ'总寒,以及懲罰因子,C理肺,放棄這類點摄闸。
【C是事先我們自行指定的值,可以調(diào)整妹萨∧暾恚】
如果僅僅是平面線性分類,那似乎SVM也沒有體現(xiàn)出多少強大乎完,反而展現(xiàn)了其計算復(fù)雜的一面熏兄。我們古人怎么形容一個人的能力的,如果要表示一個人的能力非常非常非常非常厲害?
“斗轉(zhuǎn)星移摩桶、扭轉(zhuǎn)乾坤桥状、神鬼莫測、奪天地造化 ....”典格。假設(shè)出現(xiàn)了這樣一種能力岛宦,宇宙空間被改變了,天鷹座和天琴座擬合到一塊去了耍缴,見圖-10:
顯然,這是線性不可分的挽霉。
“天地之初防嗡,一片混沌,盤古一劃侠坎,開天辟地蚁趁。”
還記得上一篇提到的等高線圖么实胸?假設(shè)圖-10也是俯瞰所得他嫡,現(xiàn)在,你跑到平地庐完,從側(cè)面正視钢属,應(yīng)該就是圖-11的樣子:
“盤古一劃,開天辟地”门躯,從平面的線性不可分淆党,被拔高到多維平面的可分。這個時候再回過頭去看圖-10讶凉,你腦海里會自動繪制一條曲線來分割不同色彩的點染乌。手中無劍,心中有劍懂讯,這就是一個看山是山-看山不是山-看山是山的過程荷憋。
以上大部分都是文學(xué)修辭色彩,在數(shù)學(xué)上褐望,我們繼續(xù)引入其它功能:核函數(shù)勒庄。
【我曾詢問過Sean,核函數(shù)可不可以我們自己寫一個譬挚,Sean說可以锅铅,但是要遵循Mercer定理,我去簡單查了查Mercer定理减宣,意識到這是一個關(guān)于矩陣的“深淵”盐须,我決定暫時先不往里跳了∑犭纾】
很明顯贼邓,從圖-10的二維平面阶冈,到圖-11的多維平面,向量的坐標被變化了塑径,假設(shè)變化后的x為:
change(x)女坑,我們已經(jīng)知道,最大寬度與邊界只與樣本間的點積有關(guān)(change(x1) change(x2))统舀,所以匆骗,核函數(shù)的功能就是為了計算出變化后的樣本向量的點積。
假設(shè)核函數(shù)K誉简,那么有:K(x1, x2) =?change(x1) change(x2) 【鑒于鍵盤輸入限制碉就,也為了節(jié)省時間,向量的箭頭省略了闷串∥驮浚】
那我們可以采用哪些現(xiàn)有的核函數(shù)K呢?
e^(-?‖x1-x2‖ / σ)
【看到這個函數(shù)烹吵,我們應(yīng)該能自然聯(lián)想到碉熄,它可能會導(dǎo)致過擬合±甙危】
還是那句話锈津,沒有哪個算法是萬能的,關(guān)鍵還是在于把實際問題抽象到輸入向量只损。
本人水平有限一姿,如果有錯誤的地方,希望各位大神能夠不吝賜教跃惫,及時指正叮叹。
拋了兩塊磚了,寫得不好爆存,望輕拍蛉顽。