SVM 不同kernel function使用時機
雖然看過Scikit learn中文件有提到SVM的幾個kernel function(https://scikit-learn.org/stable/modules/svm.html#svm-kernels)
但還是不確定這些kernel function的使用時機、要如何選擇等等
謝謝
回答列表
-
2020/10/03 上午 08:57陳明佑 (Ming You Chen)贊同數:1不贊同數:1留言數:0
實務上, SVM因為計算的"時間複雜度"較高 (演算法名詞, 需要解釋請google)
所以當資料大到一定數量以上, SVM就很難跑得動
如果用sklearn的SVM, 超過一萬筆就有失敗機率
用libsvm, 能撐到十萬左右, 更多還是不行
簡單的說, 資料數量夠少的機器學習才能用SVM
不是預測效果的問題, 是會跑不動
-
2020/10/03 下午 10:45Jeffrey贊同數:2不贊同數:0留言數:0
回歸基本的解釋說明:
1. SVM的學習方法,用統計風險最小化的原則來估計一個分類的超平面(hyperplane),其基礎的概念就是找到一個決策邊界(decision boundary)讓兩類之間的邊界(margins)最大化,使其可以完美區隔開來
2. SVM 演演算法使用一組定義為內核的數學函數。內核的功能是將數據作為輸入,並將其轉換為所需的形式。
3. 不同的 SVM 演演演算法使用不同類型的內核函數。
使用場景- 創建非線性超平面:
1. Polynomial: 它在圖像處理中很受歡迎。
2. RBF: 它是一個通用內核;在事先對數據沒有瞭解時使用
3. Sigmoid:可以用它作為神經網路的代理。
SVM 的一些常見應用是:
- 人臉檢測 – SVM 將圖像的某些部分分類為人臉和非人臉,並在人臉周圍創建方形邊界。
- 文本和超文字分類– SVM 允許對歸納模型和轉導模型進行文本和超文本分類。他們使用培訓數據將文檔分類為不同的類別。它根據生成的分數進行分類,然後與閾值進行比較。
- 圖像分類 –使用 SVM 可提高圖像分類的搜尋精度。與傳統基於查詢的搜索技術相比,它提供了更高的精度。
- 生物資訊學 – 包括蛋白質分類和癌症分類。我們使用SVM來識別基因的分類,患者基於基因和其他生物問題。
- 蛋白質摺疊和遠端同源檢測– 應用 SVM 演算法進行蛋白質遠端同源檢測。
- 手寫辨識– 我們使用 SVM 來識別廣泛使用的手寫字元。
- 通用預測控制 (GPC) – 使用基於 SVM 的 GPC 使用有用的參數控制混沌動力學。
-
2020/10/05 上午 01:23張維元 (WeiYuan)贊同數:2不贊同數:0留言數:0
嗨,這是一個好問題
先稍微講一下 kernal function 的目的,目標是在當資料在原始空間中無法被線性分類器有效的分類時,經由非線性投影後的資料能在更高維度的空間中可以更區隔開。例如下圖,將原本二維不同分類的資料轉換成容易分類的三維:
Kernel 的手法是將資料投到更高維度的空間進行分類,但也有可能需要再搭配降維的操作。常用的 kernel function 有: Linear、polynomial、RBF ,根據不同的資料會有不同的效果跟選擇(這部分我覺得比較難有個標準的解法,實務上建議多試試看)。以下整理幾點重要的特性:
1. Linear Kernel:最簡單的 kernel 建議先嘗試使用,缺點是難以處理非線性的資料
2. Polynomial Kernel:在經過非線性轉換後,適合將非線性的資料做更好的區分
3. RBF kernel:Gaussian 可以作到無限多維的轉換,適用的資料量更彈性,缺點是在於被轉換到無限多維後,模型沒辦法容易的被解讀
最後還是要強調一點,kernel 的選擇我覺得比較難有個標準的解法,實務上建議多試試看
很高興可以在這次問答進行討論,如果還有不懂或是模糊的部分也歡迎持續追問。期待你的互動與鼓勵創造出不同更深度的討論。歡迎加入我自己經營的Line 群組社群,會有不定時舉辦的分享活動,一起來玩玩吧!