支持向量機

支持向量機(SVM)是用於分類和迴歸有監督學習模型。 流行緣由數組

a、他們可輸出較準確的預測結果函數

b、模型基於較優雅的數學理論學習

  • 概念

SVM旨在在多維空間中找到一個能將所有樣本單元分紅兩類的最優平面,這一平面應使兩類中距離最近的點的間距(margin)儘量大,在間距邊界上的點被稱爲支持向量(suppor vector,它們決定間距),分割的超平面位於間距的中間。spa

對於一個 N 維空間(即 N 個變量)來講,最優超平面(即線性決策面,linear decision surface)爲 N-1 維。當變量數爲 2 時,曲面是一條直線,當變量數爲3時,曲面是一個平面,當變量數爲 10 時,曲面就是一個九維的超平面code

 

SVM可經過 R中的 kernlab 包的 ksvm() 函數和 e1071包中的 svm() 函數實現,ksvm() 功能強大,但 svm() 相對簡單orm

使用 svm() 對乳腺癌數據創建模型ci

> library(e1071)  
> set.seed(1234)
> fit.svm <- svm(class~., data=df.train)
> fit.svm

Call:
svm(formula = class ~ ., data = df.train)

Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  radial 
       cost:  1 
      gamma:  0.1111111 

Number of Support Vectors:  76

> svm.pred <- predict(fit.svm, na.omit(df.validate))  #SVM在預測新樣本單元是不容許有缺失值出現
> svm.perf <- table(na.omit(df.validate)$class, 
+                   svm.pred, dnn=c("Actual", "Predicted"))
> svm.perf
           Predicted
Actual      benign malignant
  benign       116         4
  malignant      3        77

因爲方差較大的預測變量一般對 SVM的生成影響更大, svm() 函數默認在生成模型前對每一個變量標準化,使其均值爲 0,標準差爲1,數學

 

  • 選擇調和參數

svm() 函數默認經過 徑向基函數(Radial Basis Funciton,RBF)將樣本單元投射到高維空間。通常來講 RBF 是一個比較好的選擇,由於它是一種非線性投影,能夠應對類別標籤與預測變量間的非線性關係it

在用帶 RBF 核的 SVM 擬合樣本時,兩個參數可能影響最終結果:gmama和成本costio

 

gamma:

a、是核函數的參數、控制分割超平面的形狀

b、可將gamma看作控制訓練的樣本「到達範圍」的參數,即gamma越大意味着訓練樣本到達範圍越廣,越小則意味着到達範圍越窄

c、gamma越大,一般致使支持的向量越多,gamma必須大於0

 

cost:

a、成本參數表明犯錯的成本

b、一個較大的成本意味着模型對偏差的懲罰更大,從而將生成一個更復雜的分類邊界,對應的訓練集中的偏差也會更小,但也意味着可能存在過擬合問題,即對新的樣本單元的預測偏差可能很大。

c、較小的成本意味着分類邊界更平滑,但可能會致使欠擬合

d、與gamma同樣,成本參數也恆爲正

 

svm() 函數默認設置 gamma 爲預測變量個數的倒數,成本參數爲1。不過 gamma 與成本參數的不一樣組合可能生成更有效的模型。在建模時,咱們能夠嘗試變更參數值創建不一樣的模型,但利用 格點搜索法可能更有效。能夠經過 tune.svm() 對每一個參數設置一個候選範圍,tune.svm() 函數對每個參數組合生成一個 SVM 模型,並輸出在每個參數組合上的表現

相關文章
相關標籤/搜索