第八篇:支持向量機 (Support Vector Machine)


前言

       本文講解如何使用R語言中e1071包中的SVM函數進行分類操作,並以一個關於鳶尾花分類的實例演示具體分類步驟。

分析總體流程

1. 載入並了解數據集;
2. 對數據集進行訓練並生成模型;
3. 在此模型之上調用測試數據集進行分類測試;
4. 查看分類結果;
5. 進行各種參數的調試並重復2-4直至分類的結果讓人滿意為止。

參數調整策略

       綜合來說,主要有以下四個方面需要調整:

1. 選擇合適的核函數;
2. 調整誤分點容忍度參數cost;
3. 調整各核函數的參數;
4. 調整各樣本的權重。

       其中,對於特征比較多的情況一般用非線性核,比如高斯核。高斯核的特點是參數多,需要不斷調試參數才能理想的效果。而線性核沒什么參數可設置,一般適用於特征比較少的情況。

       關於各核函數的參數,則一般是通過試探法來確定。最好可以將不同樣本權重模型,不同核函數參數下的分類准確率做成一張可視化報表,以便於方案確定。

       關於3的選擇,一般可以通過MDS的可視化圖,看有哪幾個分類是糾纏不清的,然后就加大這兩個分類的樣本權重。

鳶尾花分類分析 - 使用支持向量機(SVM)

       1. 安裝SVM分析所需包:e1071

       2. 載入並了解數據集:

       

       可以看出,這個數據集比較理想化,避免了繁瑣的數據預處理過程,非常適合作為案例講解。

       3. 建立SVM模型:

       

       這個模型變量相當於是訓練庫,下面查看該模型的信息:

       

       其中,SVM類型是C-classification,核函數是高斯核,cost是誤分點容忍度參數,gamma是核函數參數。他們的具體含義請參考函數手冊。

       4. 利用該模型進行預測

       

       5. 查看預測效果:

       

       可見,有兩個類型似乎混淆了。那怎么辦?還有,如果變量多,我如何觀察出哪幾個變量糾纏不清呢?下面先來解決這個問題。

       6. 使用MDS技術查看各變量分類情況

       MDS技術可以根據所有樣本之間的距離,根據各個變量之間距離不變的設定,將維度降低到兩維。一般來說,它是用來分析整體分類的一個態勢的:

1 plot(cmdscale(dist(iris[,-5])), col = c("blue", "green", "orange")[as.integer(iris[,5])], pch = c("o", "+")[1:150 %in% model$index+1])
2 legend(2, -0.7, c("setosa", "versicolor", "virginica"), col = c("blue", "green", "orange"), lty = 1)

       顯示效果如下:

       

       顯然,后兩個分類有點混淆。

       7. 調整各樣本權重系數:

       

       由上圖可知,這樣的模型產生了更好的分類效果。

小結

       1. 本例中的場景比較簡單,故未做復雜的參數調整。在實際項目中往往需要對方方面面都進行調整。

       2. 雖然SVM在做了標准化后效果更好,但是不用手動標准化。因為SVM函數會自動進行標准化。

       3. 對於維度比較少的情況,直接用線性核就好了。

       4. SVM是綜合指標最好的分類器,但是有它的局限之處,那就是容易過擬合。因此降維工作一定要做好。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM