
關(guān)于SVM的論文、書籍都非常的多,引用強哥的話“SVM是讓應(yīng)用數(shù)學(xué)家真正得到應(yīng)用的一種算法”。SVM對于大部分的普通人來說,要完全理解其中的數(shù)學(xué)是非常困難的,所以要讓這些普通人理解,得要把里面的數(shù)學(xué)知識用簡單的語言去講解才行。而且想明白了這些數(shù)學(xué),對學(xué)習(xí)其他的內(nèi)容也是大有裨益的。我就是屬于絕大多數(shù)的普通人,為了看明白SVM,看了不少的資料,這里把我的心得分享分享。
其實現(xiàn)在能夠找到的,關(guān)于SVM的中文資料已經(jīng)不少了,不過個人覺得,每個人的理解都不太一樣,所以還是決定寫一寫,一些雷同的地方肯定是不可避免的,不過還是希望能夠?qū)懗鲆稽c與別人不一樣的地方吧。另外本文準備不談太多的數(shù)學(xué)(因為很多文章都談過了),盡量簡單地給出結(jié)論,就像題目一樣-機器學(xué)習(xí)中的算法(之前叫做機器學(xué)習(xí)中的數(shù)學(xué)),所以本系列的內(nèi)容將更偏重應(yīng)用一些。如果想看更詳細的數(shù)學(xué)解釋,可以看看參考文獻中的資料。
一、線性分類器:
首先給出一個非常非常簡單的分類問題(線性可分),我們要用一條直線,將下圖中黑色的點和白色的點分開,很顯然,圖上的這條直線就是我們要求的直線之一(可以有無數(shù)條這樣的直線)
假如說,我們令黑色的點 = -1, 白色的點 = +1,直線f(x) = w.x + b,這兒的x、w是向量,其實寫成這種形式也是等價的f(x) = w1x1 + w2x2 … + wnxn + b, 當(dāng)向量x的維度=2的時候,f(x) 表示二維空間中的一條直線, 當(dāng)x的維度=3的時候,f(x) 表示3維空間中的一個平面,當(dāng)x的維度=n > 3的時候,表示n維空間中的n-1維超平面。這些都是比較基礎(chǔ)的內(nèi)容,如果不太清楚,可能需要復(fù)習(xí)一下微積分、線性代數(shù)的內(nèi)容。
剛剛說了,我們令黑色白色兩類的點分別為+1, -1,所以當(dāng)有一個新的點x需要預(yù)測屬于哪個分類的時候,我們用sgn(f(x)),就可以預(yù)測了,sgn表示符號函數(shù),當(dāng)f(x) > 0的時候,sgn(f(x)) = +1, 當(dāng)f(x) < 0的時候sgn(f(x)) = –1。
但是,我們怎樣才能取得一個最優(yōu)的劃分直線f(x)呢?下圖的直線表示幾條可能的f(x)
一個很直觀的感受是,讓這條直線到給定樣本中最近的點最遠,這句話讀起來比較拗口,下面給出幾個圖,來說明一下:
第一種分法:
第二種分法:
這兩種分法哪種更好呢?從直觀上來說,就是分割的間隙越大越好,把兩個類別的點分得越開越好。就像我們平時判斷一個人是男還是女,就是很難出現(xiàn)分錯的情況,這就是男、女兩個類別之間的間隙非常的大導(dǎo)致的,讓我們可以更準確的進行分類。在SVM中,稱為Maximum Marginal,是SVM的一個理論基礎(chǔ)之一。選擇使得間隙最大的函數(shù)作為分割平面是由很多道理的,比如說從概率的角度上來說,就是使得置信度最小的點置信度最大(聽起來很拗口),從實踐的角度來說,這樣的效果非常好,等等。這里就不展開講,作為一個結(jié)論就ok了,:)
上圖被紅色和藍色的線圈出來的點就是所謂的支持向量(support vector)。
上圖就是一個對之前說的類別中的間隙的一個描述。Classifier Boundary就是f(x),紅色和藍色的線(plus plane與minus plane)就是support vector所在的面,紅色、藍色線之間的間隙就是我們要最大化的分類間的間隙。
這里直接給出M的式子:(從高中的解析幾何就可以很容易的得到了,也可以參考后面Moore的ppt)
另外支持向量位于wx + b = 1與wx + b = -1的直線上,我們在前面乘上一個該點所屬的類別y(還記得嗎?y不是+1就是-1),就可以得到支持向量的表達式為:y(wx + b) = 1,這樣就可以更簡單的將支持向量表示出來了。
當(dāng)支持向量確定下來的時候,分割函數(shù)就確定下來了,兩個問題是等價的。得到支持向量,還有一個作用是,讓支持向量后方那些點就不用參與計算了。這點在后面將會更詳細的講講。
在這個小節(jié)的最后,給出我們要優(yōu)化求解的表達式:
||w||的意思是w的二范數(shù),跟上面的M表達式的分母是一個意思,之前得到,M = 2 / ||w||,最大化這個式子等價于最小化||w||, 另外由于||w||是一個單調(diào)函數(shù),我們可以對其加入平方,和前面的系數(shù),熟悉的同學(xué)應(yīng)該很容易就看出來了,這個式子是為了方便求導(dǎo)。
這個式子有還有一些限制條件,完整的寫下來,應(yīng)該是這樣的:(原問題)
s.t的意思是subject to,也就是在后面這個限制條件下的意思,這個詞在svm的論文里面非常容易見到。這個其實是一個帶約束的二次規(guī)劃(quadratic programming, QP)問題,是一個凸問題,凸問題就是指的不會有局部最優(yōu)解,可以想象一個漏斗,不管我們開始的時候?qū)⒁粋€小球放在漏斗的什么位置,這個小球最終一定可以掉出漏斗,也就是得到全局最優(yōu)解。s.t.后面的限制條件可以看做是一個凸多面體,我們要做的就是在這個凸多面體中找到最優(yōu)解。這些問題這里不展開,因為展開的話,一本書也寫不完。如果有疑問請看看wikipedia。
二、轉(zhuǎn)化為對偶問題,并優(yōu)化求解:
這個優(yōu)化問題可以用拉格朗日乘子法去解,使用了KKT條件的理論,這里直接作出這個式子的拉格朗日目標函數(shù):
求解這個式子的過程需要拉格朗日對偶性的相關(guān)知識(另外pluskid也有一篇文章專門講這個問題),并且有一定的公式推導(dǎo),如果不感興趣,可以直接跳到后面用藍色公式表示的結(jié)論,該部分推導(dǎo)主要參考自plukids的文章。
首先讓L關(guān)于w,b最小化,分別令L關(guān)于w,b的偏導(dǎo)數(shù)為0,得到關(guān)于原問題的一個表達式
將兩式帶回L(w,b,a)得到對偶問題的表達式
新問題加上其限制條件是(對偶問題):
這個就是我們需要最終優(yōu)化的式子。至此,得到了線性可分問題的優(yōu)化式子。
求解這個式子,有很多的方法,比如SMO等等,個人認為,求解這樣的一個帶約束的凸優(yōu)化問題與得到這個凸優(yōu)化問題是比較獨立的兩件事情,所以在這篇文章中準備完全不涉及如何求解這個話題,如果之后有時間可以補上一篇文章來談?wù)?)。
三、線性不可分的情況(軟間隔):
接下來談?wù)劸€性不可分的情況,因為線性可分這種假設(shè)實在是太有局限性了:
下圖就是一個典型的線性不可分的分類圖,我們沒有辦法用一條直線去將其分成兩個區(qū)域,每個區(qū)域只包含一種顏色的點。
要想在這種情況下的分類器,有兩種方式,一種是用曲線去將其完全分開,曲線就是一種非線性的情況,跟之后將談到的核函數(shù)有一定的關(guān)系:
另外一種還是用直線,不過不用去保證可分性,就是包容那些分錯的情況,不過我們得加入懲罰函數(shù),使得點分錯的情況越合理越好。其實在很多時候,不是在訓(xùn)練的時候分類函數(shù)越完美越好,因為訓(xùn)練函數(shù)中有些數(shù)據(jù)本來就是噪聲,可能就是在人工加上分類標簽的時候加錯了,如果我們在訓(xùn)練(學(xué)習(xí))的時候把這些錯誤的點學(xué)習(xí)到了,那么模型在下次碰到這些錯誤情況的時候就難免出錯了(假如老師給你講課的時候,某個知識點講錯了,你還信以為真了,那么在考試的時候就難免出錯)。這種學(xué)習(xí)的時候?qū)W到了“噪聲”的過程就是一個過擬合(over-fitting),這在機器學(xué)習(xí)中是一個大忌,我們寧愿少學(xué)一些內(nèi)容,也堅決杜絕多學(xué)一些錯誤的知識。還是回到主題,用直線怎么去分割線性不可分的點:
我們可以為分錯的點加上一點懲罰,對一個分錯的點的懲罰函數(shù)就是這個點到其正確位置的距離:
在上圖中,藍色、紅色的直線分別為支持向量所在的邊界,綠色的線為決策函數(shù),那些紫色的線表示分錯的點到其相應(yīng)的決策面的距離,這樣我們可以在原函數(shù)上面加上一個懲罰函數(shù),并且?guī)掀湎拗茥l件為:
公式中藍色的部分為在線性可分問題的基礎(chǔ)上加上的懲罰函數(shù)部分,當(dāng)xi在正確一邊的時候,ε=0,R為全部的點的數(shù)目,C是一個由用戶去指定的系數(shù),表示對分錯的點加入多少的懲罰,當(dāng)C很大的時候,分錯的點就會更少,但是過擬合的情況可能會比較嚴重,當(dāng)C很小的時候,分錯的點可能會很多,不過可能由此得到的模型也會不太正確,所以如何選擇C是有很多學(xué)問的,不過在大部分情況下就是通過經(jīng)驗嘗試得到的。
接下來就是同樣的,求解一個拉格朗日對偶問題,得到一個原問題的對偶問題的表達式:
藍色的部分是與線性可分的對偶問題表達式的不同之處。在線性不可分情況下得到的對偶問題,不同的地方就是α的范圍從[0, +∞),變?yōu)榱薣0, C],增加的懲罰ε沒有為對偶問題增加什么復(fù)雜度。
四、核函數(shù):
剛剛在談不可分的情況下,提了一句,如果使用某些非線性的方法,可以得到將兩個分類完美劃分的曲線,比如接下來將要說的核函數(shù)。
我們可以讓空間從原本的線性空間變成一個更高維的空間,在這個高維的線性空間下,再用一個超平面進行劃分。這兒舉個例子,來理解一下如何利用空間的維度變得更高來幫助我們分類的(例子以及圖片來自pluskid的kernel函數(shù)部分):
下圖是一個典型的線性不可分的情況
但是當(dāng)我們把這兩個類似于橢圓形的點映射到一個高維空間后,映射函數(shù)為:
用這個函數(shù)可以將上圖的平面中的點映射到一個三維空間(z1,z2,z3),并且對映射后的坐標加以旋轉(zhuǎn)之后就可以得到一個線性可分的點集了。
用另外一個哲學(xué)例子來說:世界上本來沒有兩個完全一樣的物體,對于所有的兩個物體,我們可以通過增加維度來讓他們最終有所區(qū)別,比如說兩本書,從(顏色,內(nèi)容)兩個維度來說,可能是一樣的,我們可以加上作者這個維度,是在不行我們還可以加入頁碼,可以加入擁有者,可以加入購買地點,可以加入筆記內(nèi)容等等。當(dāng)維度增加到無限維的時候,一定可以讓任意的兩個物體可分了。
回憶剛剛得到的對偶問題表達式:
我們可以將紅色這個部分進行改造,令:
這個式子所做的事情就是將線性的空間映射到高維的空間,k(x, xj)有很多種,下面是比較典型的兩種:
上面這個核稱為多項式核,下面這個核稱為高斯核,高斯核甚至是將原始空間映射為無窮維空間,另外核函數(shù)有一些比較好的性質(zhì),比如說不會比線性條件下增加多少額外的計算量,等等,這里也不再深入。一般對于一個問題,不同的核函數(shù)可能會帶來不同的結(jié)果,一般是需要嘗試來得到的。
五、一些其他的問題:
1)如何進行多分類問題:
上面所談到的分類都是2分類的情況,當(dāng)N分類的情況下,主要有兩種方式,一種是1 vs (N – 1)一種是1 vs 1,前一種方法我們需要訓(xùn)練N個分類器,第i個分類器是看看是屬于分類i還是屬于分類i的補集(出去i的N-1個分類)。
后一種方式我們需要訓(xùn)練N * (N – 1) / 2個分類器,分類器(i,j)能夠判斷某個點是屬于i還是屬于j。
這種處理方式不僅在SVM中會用到,在很多其他的分類中也是被廣泛用到,從林教授(libsvm的作者)的結(jié)論來看,1 vs 1的方式要優(yōu)于1 vs (N – 1)。
2)SVM會overfitting嗎?
SVM避免overfitting,一種是調(diào)整之前說的懲罰函數(shù)中的C,另一種其實從式子上來看,min ||w||^2這個看起來是不是很眼熟?在最小二乘法回歸的時候,我們看到過這個式子,這個式子可以讓函數(shù)更平滑,所以SVM是一種不太容易over-fitting的方法。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10CDA 數(shù)據(jù)分析師:商業(yè)數(shù)據(jù)分析實踐的落地者與價值創(chuàng)造者 商業(yè)數(shù)據(jù)分析的價值,最終要在 “實踐” 中體現(xiàn) —— 脫離業(yè)務(wù)場景的分 ...
2025-09-10機器學(xué)習(xí)解決實際問題的核心關(guān)鍵:從業(yè)務(wù)到落地的全流程解析 在人工智能技術(shù)落地的浪潮中,機器學(xué)習(xí)作為核心工具,已廣泛應(yīng)用于 ...
2025-09-09SPSS 編碼狀態(tài)區(qū)域中 Unicode 的功能與價值解析 在 SPSS(Statistical Product and Service Solutions,統(tǒng)計產(chǎn)品與服務(wù)解決方案 ...
2025-09-09