SVM のアルゴリズムは様々なものが考え出されている。これらのうち、いくつかのアルゴリズムが R のパッケージとして提供されている。いずれも、学習データとしてデータフレーム型(または行列型)のデータを用意する必要がある。
パッケージ | アルゴリズム |
e1071 | libsvm のアルゴリズム(Chang and Lin, 2001)を利用することができる。他に視覚化やパラメーター調整などを行いこともできる。(Dimitriadou et al., 2005) |
kernlab | カーネル法に基づく SVM アルゴリズムを利用できる。そのほかに、libsvm や bsvm (Hsu and Lin, 2002) を改良した柔軟性のある SVM を提供している。 |
klaR | SVMlight アルゴリズムを利用できる。 |
svmpath |
e1071
e1071 は libsvm へのインターフェースを提供している。また、実際に作ったモデルを視覚化することもできる。
library(e1071)
data(iris)
# libsvm でモデル作成
model <- svm(
Species ~ ., data = iris, # irisのSpeciesを他の特徴量で予測
method = "C-classification", # 分類方法
kernel = "linear", # カーネル関数
cost = 2 # Cパラメーター
)
# モデルの確認
model
## Call:
## svm(formula = Species ~ ., data = iris, method = "C-classification",
## kernel = "linear", cost = 2)
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: linear
## cost: 2
## gamma: 0.25
##
## Number of Support Vectors: 24
# 予測用にサンプルデータを5つ作成します
unknown <- data.frame(
Sepal.Length = c(5.1, 5.2, 6.7, 4.5, 7.0),
Sepal.Width = c(3.5, 3.3, 4.1, 3.1, 5.0),
Petal.Length = c(1.1, 1.5, 2.1, 6.7, 4.1),
Petal.Width = c(0.2, 0.1, 0.3, 1.2, 1.4)
)
# 予測結果
predict(model, unknown, decision.values = TRUE)
## 1 2 3 4 5
## setosa setosa setosa virginica versicolor
## attr(,"decision.values")
## setosa/versicolor setosa/virginica versicolor/virginica
## 1 1.8208103 1.47264811 12.167505
## 2 1.5335990 1.34830896 11.547934
## 3 0.7999217 1.15153503 11.701613
## 4 -2.2194464 -1.10219176 -2.061327
## 5 -1.0224676 -0.01898811 5.856400
## Levels: setosa versicolor virginica
交差検定(cross validation)を利用する場合は、cross
引数にデータの分割数を与えることで、簡単に実現可能です。
model <- svm(Species ~ ., data = iris, cross = 5)
# モデルの確認
summary(model)
## Call:
## svm(formula = Species ~ ., data = iris, cross = 5)
##
## Parameters:
## SVM-Type: C-classification
## SVM-Kernel: radial
## cost: 1
## gamma: 0.25
##
## Number of Support Vectors: 51
## ( 8 22 21 )
##
## Number of Classes: 3
##
## Levels:
## setosa versicolor virginica
##
## 5-fold cross-validation on training data:
##
## Total Accuracy: 94.66667
## Single Accuracies:
## 93.33333 93.33333 93.33333 96.66667 96.66667
kernlab
kernlab パッケージを利用した SVM のモデルの生成方法です。データは R に標準搭載されている iris
のデータセットを用います。
kernlab の基本的な使い方
library(kernlab)
data(iris)
# データを確認
head(iris)
# SVMモデル構築
model <- ksvm(
Species ~ ., data = iris, # irisデータのSpeciesを他の特徴量でモデル化
type = "C-bsvc", # 分類方法を指定します
kernel = "rbfdot", # 利用するカーネル関数を指定します
kpar = list(sigma = 0.2), # カーネル関数のパラメーターを指定
C = 5, # Cパラメーター
prob.model = TRUE # 予測時に予測確率を出力するためにTRUEにします
)
# モデルの確認
model
## Support Vector Machine object of class "ksvm"
##
## SV type: C-bsvc (classification)
## parameter : cost C = 5
##
## Gaussian Radial Basis kernel function.
## Hyperparameter : sigma = 0.2
##
## Number of Support Vectors : 35
##
## Objective Function Value : -4.0585 -2.8851 -71.6198
## Training error : 0.013333
## Probability model included.
# 予測用にサンプルデータを5つ作成します
unknown <- data.frame(
Sepal.Length = c(5.1, 5.2, 6.7, 4.5, 7.0),
Sepal.Width = c(3.5, 3.3, 4.1, 3.1, 5.0),
Petal.Length = c(1.1, 1.5, 2.1, 6.7, 4.1),
Petal.Width = c(0.2, 0.1, 0.3, 1.2, 1.4)
)
# 予測結果(decision value)
predict(model, unknown, type = "decision")
## [,1] [,2] [,3]
## [1,] -1.2927447 -1.091186585 -1.46073412
## [2,] -1.1958328 -1.051977445 -1.89962462
## [3,] -0.5993780 -0.612076340 -0.92521246
## [4,] 0.5588753 0.518512789 0.25939620
## [5,] -0.1994391 -0.002662102 -0.01813103
# 予測結果(probabilities)
predict(model, unknown, type = "probabilities")
## setosa versicolor virginica
## [1,] 0.98184361 0.01012550 0.008030891 #1番目のデータはsetosaの可能性が大
## [2,] 0.97716470 0.01381751 0.009017784 #2番目のデータはsetosaの可能性が大
## [3,] 0.85831311 0.09598516 0.045701729 #...
## [4,] 0.07959653 0.32750762 0.592895851
## [5,] 0.44050096 0.24062263 0.318876411
カーネル関数の調整
ksvm
関数にはオリジナルのカーネル関数を入力することができます。以下は、k01
関数を作成し、これを SVM のモデル生成に利用した例です。
# カーネル関数を定義
k01 <- function(x, y) {
return(exp(x) ^ 2 / y)
}
class(k01) <- "kernel"
# SVMモデルの作成
mdoel <- ksvm(Species ~ Sepal.Length, data = iris, kernel = k01)
References
- Estimating the support of a high-dimensional distribution. Neural Computation 2001, 13:1443-71. ACM
- Misc Functions of the Department of Statistics (e1071) TU Wien 2005.
- comparison on methods for multi-class support vector machines IEEE Transactions on Neural Networks 2002, 13:415-25. PDF
- A simple decomposition method for support vector machines Machine Learning 2002, 46:291-314.