天天看點

【機器學習算法-python實作】svm支援向量機(3)—核函數1.背景知識2.代碼部分

   前面我們提到的資料集都是線性可分的,這樣我們可以用SMO等方法找到支援向量的集合。然而當我們遇到線性不可分的資料集時候,是不是svm就不起作用了呢?這裡用到了一種方法叫做核函數,它将低次元的資料轉換成高緯度的進而實作線性可分。

     可能有的人不明白為什麼低次元的資料集轉換成高次元的就可以實作線性可分,下面摘抄一個網上的例子解釋一下。看下面這個圖,我們設紅色的區域是一組資料

,而直線ab除了紅色區域以外是另一組資料。因為直線是一維的,是以我們無法找到一條直線區分這兩組資料。

【機器學習算法-python實作】svm支援向量機(3)—核函數1.背景知識2.代碼部分

      單是當我們把這組資料引入二維之後,我們可以得到一組曲線,它在ab直線上部分指向黑色直線部分,ab直線下部指向紅色部分。

【機器學習算法-python實作】svm支援向量機(3)—核函數1.背景知識2.代碼部分

      我們通過這個例子可以看到核函數的作用,因為svm的結果隻跟向量内積有關系,是以我們可以配合核函數實作任意資料集的分類。如果有人問,如果就是有一定的點數使得我們無論增加多少次元都不能實作分類,這就是引用松弛變量的意義,忽略這一部分點,因為它們很有可能是噪聲。

     因為核函數有很多種類,比較常用的就是徑向基核函數(RBF),這個準确率是比較高的。公式:

【機器學習算法-python實作】svm支援向量機(3)—核函數1.背景知識2.代碼部分