數學知識-核函式的通俗解釋例項

帥澤澤發表於2020-12-13

1.核函式本質

核函式其實準確來說就是一個內積(低維和高維的內積相等),相似度,和那個對映函式沒有任何關係(因為有時候你根本找不到那個對映函式),即使找到了對映函式也沒啥意義。比如說你想把二維對映到三維,自己湊項數恰好湊成了二次多項式函式,最大的意義就是讓你看清楚了原理。
你的根本目的就是圖個省事在低維空間裡面算
然後再說一下英文裡kernel trick本質是是個tirck就說明他確實不是什麼太高深的東西,就是一個計算內積的工具

2. 核函式的性質

核函式必須是連續的,對稱的,並且最優選地應該具有正(半)定Gram矩陣。據說滿足Mercer定理的核是正半定數,意味著它們的核矩陣只有非負特徵值。使用肯定的核心確保優化問題將是凸的和解決方案將是唯一的。

然而,許多並非嚴格定義的核函式在實踐中表現得很好。一個例子是Sigmoid核心,儘管它廣泛使用,但它對於其引數的某些值不是正半定的。 Boughorbel(2005)也實驗證明,只有條件正定的核心在某些應用中可能勝過大多數經典核心。

核心還可以分為各向異性靜止,各向同性靜止,緊湊支撐,區域性靜止,非穩定或可分離非平穩。此外,核心也可以標記為scale-invariant(規模不變)或scale-dependent(規模依賴),這是一個有趣的屬性,因為尺度不變核心驅動訓練過程不變的資料的縮放。

補充:Mercer 定理:任何半正定的函式都可以作為核函式。所謂半正定的函式f(xi,xj),是指擁有訓練資料集合(x1,x2,…xn),我們定義一個矩陣的元素aij = f(xi,xj),這個矩陣式n*n的,如果這個矩陣是半正定的,那麼f(xi,xj)就稱為半正定的函式。這個mercer定理不是核函式必要條件,只是一個充分條件,即還有不滿足mercer定理的函式也可以是核函式

3. 幾種常用的核

3.1 線性核

線性核心是最簡單的核心函式。 它由內積<x,y>加上可選的常數c給出。 使用線性核心的核心演算法通常等於它們的非核心對應物,即具有線性核心的KPCA與標準PCA相同。
表示式 :在這裡插入圖片描述

3.2 多項式核函式

多項式核是非固定核心。 多項式核心非常適合於所有訓練資料都歸一化的問題。我記得一般都會把問題歸一化吧??

表示式:k(x,y)=(αx ^ T y + c)^ d

可調引數是斜率α,常數項c和多項式度d。

3.3 高斯核函式

高斯核是徑向基函式核的一個例子。

在這裡插入圖片描述
或者,它也可以使用來實現

在這裡插入圖片描述

可調引數sigma在核心的效能中起著主要作用,並且應該仔細地調整到手頭的問題。 如果過高估計,指數將幾乎呈線性,高維投影將開始失去其非線性功率。 另一方面,如果低估,該函式將缺乏正則化,並且決策邊界將對訓練資料中的噪聲高度敏感。

3.4指數的核心

指數核與高斯核密切相關,只有正態的平方被忽略。 它也是一個徑向基函式核心。

表示式:在這裡插入圖片描述
。和高斯核確實很像。

3.5 拉普拉斯運算元核

拉普拉斯核心完全等同於指數核心,除了對sigma引數的變化不那麼敏感。 作為等價的,它也是一個徑向基函式核心。
表示式:
在這裡插入圖片描述重要的是注意,關於高斯核心的σ引數的觀察也適用於指數和拉普拉斯核心。

4. sklearn svm

4.1.SVM的分類表示式

y = wx+b,w表示權重,b表示偏置
可以看出來,是一個線性分類器,那麼就只能解決一個,就是我們輸入的資料是線性可分的

所以總的來說:
1.如果資料是線性可分的(一般表現為特徵維度遠遠大於資料量,或者資料維度很大),就可以直接使用線性核函式kernel=”liner”
2.如果資料是線性不可分,那麼就要使用核函式將資料x變成線性可分,然後帶回線性分類器,比如有輸入資料x,核函式k,那麼SVM分類器就表示為:y = wk(x)+b,
SVM的核函式共有5種’linear’(其實就是不使用核函式), ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’

但實際過程中根本不知道你的資料是線性可分還是不是線性可分的,所以一般都是使用資料把所有SVM各個核函式跑一遍,誰高選誰

4.2 SVM程式碼例項

from sklearn.svm import SVC
clf = SVC()
clf.set_params(kernel=svm_kernel,probability=probability).fit(X_train, y_train)
clf.predict(X_test)

4.2.1 SVM的引數

  • C=1.0, 懲罰因子C,即對誤差的寬容度。c越高,說明越不能容忍出現誤差,容易過擬合。C越小,容易欠擬合。
  • kernel=’rbf’, SVM核函式,可以為’linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’,或者自定義。
  • degree=3, 只作用於’poly’核函式,設定多項式核函式的最高此項次數
  • gamma=’auto’,決定了資料對映到新的特徵空間後的分佈,gamma越大,支援向量越少,gamma值越小,支援向量越多。支援向量的個數影響訓練與預測的速度
  • coef0=0.0,
  • shrinking=True,
  • probability=False, 如果要返回分類的百分比,就把這個設定為True
  • tol=1e-3,
  • cache_size=200, 快取
  • class_weight=None,
  • verbose=False,
  • max_iter=-1, 最大迭代次數
  • decision_function_shape=’ovr’, 設定多分類比較方式,1對1,還是1對多
  • random_state=None

4.2.2 各個核函式可調參的引數

C引數,任何核函式都可調 一般選擇10^t , t=[- 4,4]

  1. linear沒其它引數可調的
  2. poly 多項式核函式 重點就調一個degree引數,可以選擇1-12
  3. RBF 徑向基核函式 gamma引數可以選擇下面幾個數的倒數:0.1 0.2 0.4 0.6 0.8 1.6 3.2 6.4 12.8,預設的是類別數的倒數,即1/k,2分類的話就是0.5
  4. sigmoid 一般還可調2個引數,gamma,coef0,一般可選1 2 3 4,r選0.2 0.4 0.6 0.8 1

4.3. sklearn中SVM的問題

  1. 不支援多執行緒並行運算
  2. 不支援線上計算
  3. 2種預測方法predict和predict_proba(取最高概率)最終結果居然不一樣

相關文章