機器學習——支援向量機(SVM)
一、SVM 概念
- 將樣本的兩種特徵用 一條直線或者超平面分開,並且間隔最大。
- 非線性問題,因為其複雜性,需要使用複雜模型,引數多,容易過擬合,而 SVM既能解決複雜問題,又不容易過擬合(但不能保證不會過擬合)
二、支援向量機演算法基本原理
2.1 線性 SVM
線性(SVM):找到最好的決策邊界
最大化 Margin: 決策邊界最近的距離
最小的Margin之和最大化
2.1 非線性(SVM)超平面
低維對映到高維再處理,找到最優的(核方法)
一條直線方程,其中m是斜率,c是直線在y軸的截距:y= mx +c
二維空間裡面,一條直線的方程可以表示為:Ax+By+C=0
三維空間裡面,平面的方程可以表示為:Ax+By+Cz+D=0
那麼超平面方程:
w^T x = 0 也可以寫作(w^T·x+b=0)
其中 w 和 x 是向量,w^T是兩個向量的點積。向量w通常被稱為權重。
w , x皆為向量, wx+b=0就是a1*x1+a2*x2+...an*xn+b=0
2.2 超平面公式推導
超平面之間的距離
樣本點到超平面之間的距離
樣本的正確分類 - 拉格朗日方法(對偶演算法):
- 約束最優化問題
對於線(w,b)可以通過縮放使得其結果值|y|>=1~~~y_i(w^ T\Phi (x_i)+b)\geqslant 1
arg max_{w,b} \left \{ \frac{1}{{\left \| w \right \|}}min_i[y_i(w^ T\Phi (x_i)+b)] \right \}
即(目標函式):arg max_{w,b}\frac{1}{{\left \| w \right \|}}且y_i(w^ T\Phi (x_i)+b)\geqslant 1
~~~~~~轉換成求最小值:arg min_{w,b}\frac{1}{2}w^2
且 y_i(w^ T\Phi (x_i)+b)\geqslant 1
- 拉格朗日乘子法標準格式:
min f(x)
s.t g_i(x) \leqslant 0 ,i = 1,2...m - 樣本正確分類(拉格朗日方法):
- f(x) = w^Tx + b
- 構造拉格朗日方程:
s.t.y_i( w^Tx + b) \geq 1,~~~i = 1,2,3...m
g_i(x) =1- y_i( w^Tx_i + b) \leq 0,~~~i = 1,2,3...m
~~~~~~~~~~~~~~~~~~~~~L(w,b,\alpha) = \frac{1}{2} || w||^2+\sum_{i=1}^{m}\alpha_i(1- y_i( w^Tx_i + b))
2.3 拉格朗日乘子法-超平面推論
2.4 示例:拉格朗日乘子法求超平面
例題:已知如圖訓練集:
正例點
x_1=(3,3)^T,x_2=(4,3)^T,負例點 x_3=(1,1)^T
。 試求最大間隔分離超平面。
2.5 鬆弛因子
在 SVM 中設定一個引數「C」;從而你可以在兩種結果中權衡:
1. 擁有很寬的間隔;
2. 精確分離訓練資料;
C 的值越大,意味著在訓練資料中允許的誤差越少。
必需強調一下這是一個權衡的過程。如果想要更好地分類訓練資料,那麼代價就是間隔會更寬。
以下幾個圖展示了在不同的 C 值中分類器和間隔的變化(未顯示支援向量)。
三、核函式
- 核函式特點
- 如果資料集中有 n 個點,SVM 只需要將所有點兩兩配對的點積以尋找分類器。僅此而已。
當我們需要將資料對映到高維空間的時候也是這樣,不需要向 SVM 提供準確的對映,
而是提供對映空間中所有點兩兩配對的點積。
3.1 核函式定義
假設X是輸入空間,H是特徵空間,存在一個對映ϕ使得X中的點x能夠計算得到H空間中的點h ,對於所有的X中的點都成立:
h=\phi(x)
若x,z是X空間中的點,函式k(x,z)滿足下述條件,那麼都成立,則稱k為核函式,而ϕ為對映函式:
k(x,z)=\phi (x)\cdot \phi (z)
3.2 常用核函式
- 線性核
- 線性核,主要用於線性可分的情況,我們可以看到特徵空間到輸入空間的維度是
一樣的,其引數少速度快,對於線性可分資料,其分類效果很理想。
K(x_i,x_j) = x_i^T,x_j - 多項式核
- 將低維的輸入空間對映到高緯的特徵空間,但是多項式核函式的引數多,當多項式的階數比較高的時候,核矩陣的元素值將趨於無窮大,計算複雜度會大到無法計算。(d≥1為多項式的次數)
K(x_i,x_j) = (x_i^T,x_j)^d - 高斯(RBF)核函式
- 高斯徑向基函式是一種區域性性強的核函式,可以將一個樣本對映到一個更高維的空間內,該核函式是應用最廣的一個,無論大樣本還是小樣本都有比較好的效能,(相對於多項式核函式引數要少)。
因此大多數情況下在不知道用什麼核函式的時候,優先使用高斯核函式多項式核。
(\sigma>0 為高斯核的寬頻)
K(x_i,x_j) = exp(- \frac{||x_i^T,x_j||^2}{2\sigma^2})
- sigmoid核函式
- 採用sigmoid核函式,支援向量機實現的就是一種多層神經網路。
(tanh為雙曲正切函式,β>0,θ<0)
K(x_i,x_j) = tanh(βx_i^Tx_j+θ) - 核函式選擇依據
-
如果特徵的數量大到和樣本數量差不多,則選用LR或者線性核的SVM;
如果特徵的數量小,樣本的數量正常,則選用SVM+高斯核函式;
如果特徵的數量小,而樣本的數量很大,則需要手工新增一些特徵從而變成第一種情況。
3.3 核矩陣
對於一個二位空間 對映到 三維空間:
P(x,y)=(x^2,\sqrt{2}xy,y^2)
考慮到核函式:
K(v1,v2)=<v1,v2>^2,
即“內積平方” 設二維空間存在:
v1=(x_1,y_1) , v2=(x_2,y_2)
兩點: 可證
三、支援向量機程式碼演示
from sklearn.svm.import SVC
svc = SVC(
C = 1.0,
lernel = 'rbf',
degree = 3,
gamma = 'auto',
coef0 = 0.0,
shrinking = True,
probability = False,
tol = 0.001,
cache_size = 200,
class_weight = None,
verbose = False,
max_iter = -1,
decision_function_shape = None,
random_state = None
)
一些重要的引數:
C --誤差項懲罰引數,C越大,越容易過擬合
kernel --核引數,'linear','poly','rbf','sigmoid'
gamma --當kernel為'poly','rbf','sigmoid'時,預設1/n_feature
四、支援向量機引數優化
parameters = {
'C':[0.001,0.01,0.1,1,10,1000],
'kernel':['linear','poly','rbf','sigmoid']
'gamma':[0.0001,0.001]
}
svm= SVC()
grid_search = GridSearchCV(svm,parameters,scoring = 'accuracy',cv = 5)
grid_search.fit(x,y)
五、支援向量機總結
支援向量機是一個‘超平面分類演算法’
最佳超平面-->支援向量Margin(間隔)最大的超平面
支援向量就是離超平面最近的資料點
資料低維--kernel() -->高維,使其線性分開
SVM 主要引數調優:C,gamma,kernel
SVM只支援數值型變數,分型別變數-->onehot編碼
SVM對缺失值敏感,需提取處理
SVM沒有處理缺失值的策略(決策樹有)。而SVM希望樣本在特徵空間中線性可分,所以特徵空間的好壞對SVM的效能很重要。缺失特徵資料將影響訓練結果的好壞。
相關文章
- 機器學習:支援向量機(SVM)機器學習
- 機器學習——支援向量機SVM(一)機器學習
- 人工智慧-機器學習-支援向量機SVM人工智慧機器學習
- 機器學習基礎專題:支援向量機SVM機器學習
- 支援向量機(SVM)
- 機器學習演算法筆記之5:支援向量機SVM機器學習演算法筆記
- SVM——支援向量機(完整)
- SVM_支援向量機
- 《機器學習_07_01_svm_硬間隔支援向量機與SMO》機器學習
- 機器學習基礎篇:支援向量機(SVM)理論與實踐機器學習
- 機器學習(四):通俗理解支援向量機SVM及程式碼實踐機器學習
- 感知機與支援向量機 (SVM)
- [譯] 支援向量機(SVM)教程
- 對SVM支援向量機(1)
- 【機器學習】支援向量機分類機器學習
- 《機器學習_07_03_svm_核函式與非線性支援向量機》機器學習函式
- 【Python機器學習實戰】感知機和支援向量機學習筆記(三)之SVM的實現Python機器學習筆記
- 支援向量機(Support Vector Machine,SVM)—— 線性SVMMac
- 機器學習之-搞定支援向量機(SVM)【人工智慧工程師--AI轉型必修課】機器學習人工智慧工程師AI
- 機器學習之支援向量機的超平面機器學習
- 【機器學習】支援向量機(個人筆記)機器學習筆記
- 支援向量機(SVM)之硬閾值
- 學習SVM(二) 如何理解支援向量機的最大分類間隔
- 學習SVM(四) 理解SVM中的支援向量(Support Vector)
- 吳恩達機器學習系列17:支援向量機吳恩達機器學習
- 分類演算法-支援向量機 SVM演算法
- 支援向量機(SVM)和python實現(二)Python
- 機器學習之支援向量與間隔機器學習
- 吳恩達機器學習筆記 —— 13 支援向量機吳恩達機器學習筆記
- 機器學習之支援向量機原理和sklearn實踐機器學習
- 《吳恩達機器學習》學習筆記007_支援向量機吳恩達機器學習筆記
- 支援向量機SVM:從數學原理到實際應用
- OpenCV筆記(3)實現支援向量機(SVM)OpenCV筆記
- 演算法金 | 再見,支援向量機 SVM!演算法
- SVM 支援向量機演算法-實戰篇演算法
- SVM 支援向量機演算法-原理篇演算法
- 監督學習之支援向量機
- Python機器學習筆記:SVM(1)——SVM概述Python機器學習筆記