SVM (support vector machine)(支持向量機)算法
在傳統機器學習算法中SVM應該算是最方便的「開箱即用」的算法了,也是比較難理解掌握的算法了,但實際上是一點就透的知識。今天我將由淺入深幫助你們理解SVM。網絡
若是有什麼紕漏,也請你們在評論中指出,感謝。機器學習
在機器學習算法中咱們大體能夠分爲 分類和聚類兩種,SVM屬於監督學習的分類算法,是個分類器,嚴格的說是二分類器,在一次分類中只能進行二類分類不是多分類器。函數
接下來我用幾張圖(都是隻有X Y軸的二維空間)示來講明上面的總結,途中的線就是決策邊界,每一個二維空間都被決策邊界劃分爲了若干個子空間,下面列舉的傳統機器學習算方中,對於一樣一個空間(即一樣一份樣本數據)不一樣分類算法的區別只是畫決策邊界的方式不同而已。工具
kNN(最近鄰算法)學習
決策樹測試
SVM優化
一個分類器是否優秀取決於兩個方面:一是在被學習的樣本空間上進行分類的正確率,即數據擬合的能力。二是 泛化·推廣 的能力,即對未出如今樣本里的新數據的預測能力,若是這方面能力低下咱們就稱之爲overfit過分擬合。每每這兩方面能力會相互抵消和影響,若是兩者平衡的好就是好算法。spa
接下來正式開始講解SVM。it
下圖中3條線都將2類數據正確的分開,可是那條線最好呢?
雖然3條線分割的正確率都是100%,可是顯然B更好的,這個決策邊界離兩邊的數據都比較遠,比較好的避免過分擬合的問題,也就是說B有更好的泛化和推廣能力。
下面是推導,假設 令決策邊界 名爲C,決策邊界到原點的距離爲L,決策邊界的法線爲f,藍色點爲A向量,紅色點爲B向量
從圖中能夠看出,顯然A·f <L和 B·f >L,即 圖中的每一個點的向量表示投影(向量的點乘能夠簡單的理解爲投影,好比A·f)到決策邊界法線方向上的長度 必定是小於L的爲1類 大於L的爲另一類,無論決策邊界自身擺放方向如何,是否足夠好,只要C能正確的進行分類,那麼C就必定符合這一特性。
因此咱們只要能肯定表明C的二元方程C(v)便可,則對於任意一個新來的樣本v, 有當C(v)<0 時v爲藍色的點 ,C(v)>0時爲紅點。至此,分類問題被轉變爲求未知方程C(v)的問題。
咱們要求的分割線方程應該剛好同時遠離紅和藍兩個區域,即這個待求的未知方程須要知足下邊兩個條件。
f*v+L>=1 對於紅點要高於分割線1個單位長度以上(爲何要加1?其實只是爲了讓這個點和分割線之間是有間隙的,而不會緊挨着)
f*v+L<=-1 對於藍點要低於分割線1個單位長度以上
如今,咱們再引入一個變量Y,該變量在V爲正例即紅色等於1 爲反例時爲-1.上文寫的兩個不等式,在不等式的兩邊都乘以Y則獲得 Y(f*v+L)-1>=0(不等式一) 兩個不等式獲得了統一,即全部的點都必須知足該不等式。
咱們來想象這樣一個場景(以下圖):咱們把分割線C分別向上和向下進行平移,當遇到數據點後就停下來。紅藍兩類數據被一條馬路分紅了兩組,而馬路越寬說明兩組數據被分的比較開,分類器的分類效果比較好。而那些正好在馬路邊上的點 就是 所謂的support vector(支持向量)只有這些點決定了馬路的寬度,那些遠離分割線(馬路中間線)的點咱們實際上是不須要關心的。而馬路的寬度咱們是能夠求出來的,即 寬度 ,如今咱們的問題又轉換爲最大化W函數的問題上了,同時B A兩個點還必須知足Y(f*v+L)-1=0(等式一), 這個來自於(不等式一)的約束,其中那些遠離馬路的天然是>0的點,而剛好在路邊的點也就是support vector點是=0的而A B兩點就是支持向量,因此將B和A帶入(等式一)咱們能夠獲得
(等式二)(當v=B時由於B爲紅色的正例樣本此時Y=1)同理
(等式三),因此
。而求函數
的最大值等價於求函數
的最小值(不要忘記了在等式一的約束條件下),而處理在約束條件下求極值的一類問題就要用到 拉格朗日乘子 這個算法。
引入拉格朗日乘子後得(其中
是指的全部的support vector,只有法向量f和分割線到原點的距離L兩個是自變量其它的變量都是已知的值).
求w(f,L)這樣一個2元函數,接下來來的作法就是求兩個偏導數並令其爲0求得駐點,該駐點即爲極小值點。
你也許會問 駐點就是極值點 ?這不對吧。
答案是數據家會爲咱們證實w(f,L)是一個凸優化函數即只會有一個全局最優解,不會陷入到局部最優解裏。關於凸優化那又是一大塊內容了這裏不展開講了。
PS:BP神經網絡算法中採用的是梯度降低算法就很容易陷入到局部最優解的問題中,而SVM對這個問題是免疫,這是SVM的優勢。
令2個偏導數=0求極值
和
OK兩個方程 兩個未知數,咱們能夠求得 f 和 L 了,而後我就能夠獲得分割線的函數 C(v)=f*v+L ,
則對於未知的新數據點向量u,當 C(u)>0則u爲正例紅點,反之爲藍點。
大功告成!!!最後咱們找到的這個 決策線C(針對2維空間)OR 決策面(針對3維+空間)在SVM中被稱之爲 超平面,超平面是咱們學習SVM過程當中遇到的第一個重要概念。
等等咱們的例子是否是太簡單了點?現實中哪裏會那麼好恰好能夠用一條線劃分爲2類,即線性可分。
以下圖 如何用一條直線進行劃分爲2類?事實上你是作不到的。
上圖是用「笛卡爾座標空間」來表示的數據,若是咱們把圖中的點轉換爲極座標表示,那就變成線性可分了。
因此,不可分的問題,不少狀況下是能夠經過「轉換問題空間」方式獲得解決。上面的例子就是把X Y的座標系 變成 極座標系,換了一個「問題空間」來實現的。而在SVM中完成問題空間轉換的函數被稱做「核函數」,核函數在SVM中是另外一個很是重要的概念。
設有核函數F,咱們能夠將「原問題空間V」中的每個向量點轉換到一個「新的問題空間B」下的新值,F(V)=B ,而後咱們再在B空間裏應用本文最先提到的「尋找超平面」的方法找到決策邊界便可。而具體核函數是什麼,前人們已經總結試驗出了不少典型的函數(不須要你去尋找),通常的SVM工具包裏也都包含了。
使用SVM的通常過程,也就是權衡各個核函數的過程,咱們會找到針對當前訓練樣本數據以及測試樣本數據,在擬合能力和泛化能力方面表現最好的那一個核函數來使用。使用起來很簡單,開箱即用,大致上也就是選取哪個核函數 這麼一個參數須要你測試和調整。