1. 程式人生 > >在R中使用支援向量機(SVM)進行資料探勘(上)

在R中使用支援向量機(SVM)進行資料探勘(上)

在R中,可以使用e1071軟體包所提供的各種函式來完成基於支援向量機的資料分析與挖掘任務。請在使用相關函式之前,安裝並正確引用e1071包。該包中最重要的一個函式就是用來建立支援向量機模型的svm()函式。我們將結合後面的例子來演示它的用法。

下面這個例子中的資料來源於1936年費希爾發表的一篇重要論文。彼時他收集了三種鳶尾花(分別標記為setosa、versicolor和virginica)的花萼和花瓣資料。包括花萼的長度和寬度,以及花瓣的長度和寬度。我們將根據這四個特徵來建立支援向量機模型從而實現對三種鳶尾花的分類判別任務。
有關資料可以從datasets軟體包中的iris資料集裡獲取,下面我們演示性地列出了前5行資料。成功載入資料後,易見其中共包含了150個樣本(被標記為setosa、versicolor和virginica的樣本各50個),以及四個樣本特徵,分別是Sepal.Length、Sepal.Width、Petal.Length和Petal.Width。


在正式建模之前,我們也可以通過一個圖型來初步判定一下資料的分佈情況,為此在R中使用如下程式碼來繪製(僅選擇Petal.Length和Petal.Width這兩個特徵時)資料的劃分情況。

> library(lattice)
> xyplot(Petal.Length ~ Petal.Width, data = iris, groups = Species,
+ auto.key=list(corner=c(1,0)))

上述程式碼的執行結果如圖14-13所示,從中不難發現,標記為setosa的鳶尾花可以很容易地被劃分出來。但僅使用Petal.Length和Petal.Width這兩個特徵時,versicolor和virginica之間尚不是線性可分的。


函式svm()在建立支援向量機分類模型時有兩種方式。第一種是根據既定公式建立模型,此時的函式使用格式為

svm(formula, data= NULL, subset, na.action = na.omit , scale= TRUE)

其中,formula代表的是函式模型的形式,data代表的是在模型中包含的有變數的一組可選格式資料。引數na.action用於指定當樣本資料中存在無效的空資料時系統應該進行的處理。預設值na.omit表明程式會忽略那些資料缺失的樣本。另外一個可選的賦值是na.fail,它指示系統在遇到空資料時給出一條錯誤資訊。引數scale為一個邏輯向量,指定特徵資料是否需要標準化(預設標準化為均值0,方差1)。索引向量subset用於指定那些將被來訓練模型的取樣資料。
例如,我們已經知道,僅使用Petal.Length和Petal.Width這兩個特徵時標記為setosa和的鳶尾花versicolor是線性可分的,所以可以用下面的程式碼來構建SVM模型。


然後我們可以使用下面的程式碼來對模型進行圖形化展示,其執行結果如圖14-14所示。

> plot(model1, subdata, Petal.Length ~ Petal.Width)



在使用第一種格式建立模型時,若使用資料中的全部特徵變數作為模型特徵變數時,可以簡要地使用“Species~.”中的“.”代替全部的特徵變數。例如下面的程式碼就利用了全部四種特徵來對三種鳶尾花進行分類。

> model2 <- svm(Species ~ ., data = iris)

若要顯示模型的構建情況,使用summary()函式是一個不錯的選擇。來看下面這段示例程式碼及其輸出結果。

通過summary函式可以得到關於模型的相關資訊。其中,SVM-Type專案說明本模型的類別為C分類器模型;SVM-Kernel專案說明本模型所使用的核函式為高斯內積函式且核函式中引數gamma的取值為0.25;cost專案說明本模型確定的約束違反成本為l。而且我們還可以看到,模型找到了51個支援向量:第一類包含有8個支援向量,第二類包含有22個支援向量,第三類包含21個支援向量。最後一行說明模型中的三個類別分別為setosa、versicolor和virginica。

由於原文較長,我拆成兩個部分,本文為上篇。

學習更多機器學習演算法原理並瞭解在R中如何實現機器學習的技術,你還可以參考我的《R語言實戰:機器學習與資料分析》(電子工業出版社出版)一書。