數學知識-核函式的通俗解釋例項
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]
- linear沒其它引數可調的
- poly 多項式核函式 重點就調一個degree引數,可以選擇1-12
- 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
- sigmoid 一般還可調2個引數,gamma,coef0,一般可選1 2 3 4,r選0.2 0.4 0.6 0.8 1
4.3. sklearn中SVM的問題
- 不支援多執行緒並行運算
- 不支援線上計算
- 2種預測方法predict和predict_proba(取最高概率)最終結果居然不一樣
相關文章
- 核函式 多項式核函式 高斯核函式(常用)函式
- JavaScript陣列、字串、數學函式的知識點JavaScript陣列字串函式
- 例項解釋NLLLoss損失函式與CrossEntropyLoss損失函式的關係函式ROS
- PHP函式處理函式例項詳解PHP函式
- js函式作為函式的引數程式碼例項JS函式
- 通俗解釋什麼函式程式設計中的函子Functors? - iRi函式程式設計
- 【函式】oracle translate() 詳解+例項函式Oracle
- 基礎知識:網路專業術語的通俗形象解釋
- (Oracle)儲存過程、儲存函式和包的相關知識與例項Oracle儲存過程儲存函式
- vfork函式例項函式
- 例項詳解 Linux 中的 fork() 函式Linux函式
- Javascript函式的基本知識JavaScript函式
- PHP類和物件函式例項詳解PHP物件函式
- Sql Server函式全解(2):數學函式SQLServer函式
- 數學建模例題例 2.21 map()函式使用示例函式
- 數學建模例題例 2.24 zip()函式使用示例函式
- 彩票的數學知識
- cuda 核函式函式
- 遞迴函式例項大全遞迴函式
- hasOwnProperty()函式程式碼例項函式
- pipelined函式例項函式
- Excel isna函式的用法和例項Excel函式
- ASP 中 Split 函式的例項 (轉)函式
- 數學建模例題例 2.22 filter()函式使用示例Filter函式
- 資料分析入門必知:機器學習最通俗的解釋?機器學習
- shell裡邊子函式與主函式的例項(轉)函式
- js變數與函式常識學習JS變數函式
- JS函式知識點梳理JS函式
- 例項總結Oracle知識點大全Oracle
- (Oracle)SQL知識與40個例項OracleSQL
- 【知識點】inline函式、回撥函式、普通函式inline函式
- JavaScript進階知識點——函式和物件詳解JavaScript函式物件
- 通俗解釋協方差與相關係數
- Dart小知識 -- 函式(Function) && 可選引數(Optional parameters)Dart函式Function
- $.ajax()函式用法簡單例項函式單例
- C#例項建構函式C#函式
- 私有建構函式的物件建立例項函式物件
- 例項物件和函式物件的區別物件函式