1. 程式人生 > >理解SVM(二)——線性不可分的情況

理解SVM(二)——線性不可分的情況

文章轉載自https://blog.csdn.net/puqutogether/article/details/41309745

理解SVM(二)——線性不可分的情況

    前面一篇介紹了SVM的基本原理和程式碼實現。其中提到了原始的SVM對資料對好要線性可分的假設太嚴格了,很多資料在一定程度上都不是線性可分的。那麼這篇我們就要好好說說SVM對於線性不可分的情況是怎麼處理的。

1. 什麼是線性不可分

    線性不可分簡單來說就是你一個數據集不可以通過一個線性分類器(直線、平面)來實現分類。這樣子的資料集在實際應用中是很常見的,例如:人臉影象、文字文件等。下面的幾個資料都是線性不可分的:

 

我們不可以使用一個直線或者一個直面把上面影象中的兩類資料很好的劃分。這就是線性不可分。

2. 解決線性不可分的思想

    現在流行的解決線性不可分的方法就是使用核函式(kernel)。這個技術加在任何分類演算法上幾乎都可以提高一些效果,不過也給程式帶來了一些不便(例如多了模型的選擇和引數的調節)。

    核函式解決線性不可分的本質思想就是把原始的樣本通過核函式對映到高維空間中,讓樣本在高維特徵空間中是線性可分的,然後再使用常見的線性分類器,如SVM就可以很好的分類了。

    那麼什麼是“通過核函式對映到高維空間”呢?針對上面兩個線性不可分的資料例子我們說一下各自的對映過程,如下圖:

說明:圖中開口向上的二次拋物線就是核函式,正類樣本(紅色)對映到該拋物線中得到的函式值都是小於0的,負類樣本(藍色)對映得到的函式值都是大於0的,這個時候就線性可分了。那麼為什麼說對映之後就是高維空間了,解釋如下:

上述核函式是拋物線,函式模型為,我們需要通過g(x)=cy的向量乘的形式,這個時候得到的g(x)特徵就是4維的,即為高維特徵空間。

下面是另外一個例子的對映到高維空間的圖示。

 

 

3. 核函式

    首先,我們要聯絡到上一篇中,說道通過KT條件和對偶問題的轉化,我們把原始的SVM目標函式轉化成了下面的形式:

可以發現其中要計算兩個樣本特徵向量之間的內積。核函式就是從這裡入手!

    根據這個切入點,有兩種思路:

1)將輸入的空間中樣本對映到新的空間中,在新的空間中求內積;

2)找到一個核函式,它不需要將輸入空間中的樣本對映到新的空間中去,在輸入空間中就可以直接計算出內積了。

 

    我們先看第一種,一個二維非線性空間要展開變成線性的,就會成為5維的,然後問題就變得線性可分。這種轉化帶來的問題就是維度變高了,後續的計算會變得非常複雜。對於學習期而言就是特徵空間維數可能最終無法計算,而他的泛化能力會隨著位數的增長而大大降低,最終可能會使得內積無法求出,後果也就失去了這種轉化的優勢。

 

    第二種方法,它其實是對輸入空間向高維空間的一種隱式對映(注意,這也是低維空間到高維空間的一種對映)。他不需要給出那個對映,而在輸入空間中就可以計算內積,這就是我們這節要講的核函式方法。

 

    核函式K,對於所有的x1,x2滿足:

 

    再說的直接一點,核函式可以簡化對映空間中的內積運算,而我們的SVM演算法中最需要計算的地方恰恰就是特徵向量之間的內積演算法,這也是我們剛才說的切入點。

 

    引入了核函式之後,我們的目標函式就成為了:

其中的內積直接替換成了核函式。其實注意觀察這兩個方式就可以發現:顯式對映就是先對映到高維空間,再求內積,此時往往由於過於高維,使得無法求得內積;隱式對映是先在核函式中求內積,然後再到高維,這個時候內積就是在輸入空間中求的,不怕維數災難了。

 

4. 常見的核函式和如何選擇核函式

    多項式核函式:

 

    線性核函式:

    高斯核函式等。