前言
本文講解如何使用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是綜合指標最好的分類器,但是有它的局限之處,那就是容易過擬合。因此降維工作一定要做好。