核函數:RBF 是如何讓線性 SVM 可以分類非線性數據的?

核函數:RBF 是如何讓線性 SVM 可以分類非線性數據的?

1. 線性支持向量機

支持向量機的思想就是給定訓練樣本集 DD,在樣本空間中找到一個劃分的超平面,例如下圖:
在這裏插入圖片描述

但如果遇到某一些數據,並沒有這麼容易可以用一個平面分隔開,像如下的環形數據

alt

現實中非線性的數據還是很多數的,而解非線性問題要遠比線性問題複雜得多,花費的資源也會成倍的增加,爲此我們使用了核技巧(kernel trick)

2. 核函數

如果原始空間是有限維,即屬性數有限,那麼一定存在一個高維特徵空間使得樣本可分。1

簡單地講,就是把數據映射到一個更加高維的空間,讓數據在此高維空間上的映射線性可分。文字可能不太容易懂,看圖的話,我們會比較直觀。

還是如上面的環形數據,利用了核函數映射後在三維空間上的分佈,如下圖所示:

在這裏插入圖片描述

利用 scikit-learn 計算的關於原點 (0, 0) 的 RBF(高斯)映射,結尾會附上代碼。

不難看出,在這個三維空間上的點,能夠簡單的用一個平面就分隔開,這樣就避免瞭解非線性問題。

2.1. 徑向基函數(Radial Basis Function)

所謂徑向基函數,就是某種沿徑向對稱的標量函數。 通常定義爲空間中任一點 xx 到某一中心 xcx_c 之間歐氏距離的單調函數。xx 越遠離中心,函數的取值就越小。2

一般 RBF 核又指高斯核,其形式爲:
κ(xi,xj)=exp(xixj22σ2) \kappa(\boldsymbol{x}_i,\boldsymbol{x}_j)=\mathrm{exp}\left(- \frac{\left\|\boldsymbol{x}_i-\boldsymbol{x}_j\right\|^2}{2\sigma^2}\right )
其中 σ>0\sigma \gt 0 爲高斯核的帶寬(其實意義與高斯分佈的差不多),xi\boldsymbol{x}_i 就是第 ii 個數據。

2.2. 計算核函數

計算核函數可以使用 sklearn 的 sklearn.metrics.pairwise.rbf_kernel 來計算:(具體的代碼,可以在我的 Github 上下載,如果對你有幫助,希望可以給我個 star。)

>>> from sklearn.metrics import pairwise

>>> # draw circles data
>>> X, y = make_circles(100, factor=.1, noise=.1)
>>> # calculate the rbf (gaussian) kernel between X and (0, 0)
>>> K = pairwise.rbf_kernel(X, np.array([[0, 0]]))
>>> print(K)
[[0.58581766]
 [0.74202632]
...
 [0.63660304]
 [0.98952965]]

利用這種變換,我們就可以用 SVM 在數據之間找到一個可以把兩個類別區分開來的平面了:

在這裏插入圖片描述


  1. 《機器學習》周志華,第 6 章 支持向量機,6.3 核函數 ↩︎

  2. 百度百科,高斯核函數 ↩︎

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章