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