支持向量機(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 模型,並輸出在每個參數組合上的表現