e1071

Author

データサイエンス関連基礎調査WG

Published

August 1, 2025

パッケージの概要

Rのパッケージe1071は、サポートベクトルマシン(Support Vector Machines)やカーネル法に関連する機械学習アルゴリズムやツールを提供するパッケージです。サポートベクトルマシンを実装するためのsvm()関数は、サポートベクトルマシンに特化したC++ライブラリであるlibsvmの機能を利用しています。

本コード活用例では、iris(アイリスの花の種類ごとに測定された花弁などの長さ・幅のデータ)を用いて、サポートベクトルマシンを実装します。

library(e1071)
data(iris)
attach(iris)

サポートベクトルマシンの実装例

e1071パッケージでサポートベクトルマシンを実装する際は、svm関数を利用します。

以下のコードで、iris(アヤメの花ごとの種類、花弁などの長さ・幅のデータ)のSpecies(種類)を目的変数、Species以外を説明変数として、サポートベクトルマシンを作成し、print(model)で、モデルのParametersなどを出力します。

x <- subset(iris, select = -Species)
y <- Species
model <- svm(x, y)
print(model)

Call:
svm.default(x = x, y = y)


Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  radial 
       cost:  1 

Number of Support Vectors:  51

print(model)の出力結果のうち、Parametersに記載されている「SVM-Type」は、サポートベクトルマシンの種類を示しており、「SVM-Kernel」はカーネル関数の種類を示しています。

svm関数で利用可能なサポートベクトルマシンの種類およびカーネル関数の種類は以下の通りです。詳細については、リンク先を参照してください。

なお、e1071パッケージで利用可能なカーネル関数は下表の4種類のみです。kernlabパッケージでは、カーネル関数を自作するなど、e1071パッケージよりも柔軟にカーネル関数を設定可能です。

https://cran.r-project.org/web/packages/e1071/vignettes/svmdoc.pdf

<サポートベクトルマシンの種類>

区分 種類 パラメータ
分類 C-classification cost
分類 nu-classification nu
分類 one-classification nu
回帰 eps-regression cost, epsilon
回帰 nu-regression cost, nu

<カーネル関数の種類>

種類 パラメータ
linear なし
polynomial gamma, degree, coef0
radial gamma
sigmoid coef0

テストデータと訓練データの分割

本項では、irisをテストデータと訓練データに分割し、訓練データを用いて、先ほどと同じようにサポートベクトルマシンを作成します。

print(model)の出力結果の通り、サポートベクトルマシンの種類は”C-classification”,カーネル関数は”radial”です。

index<-1:nrow(iris)
N<-trunc(length(index)/3)
testindex<-sample(index, N)
testset<-iris[testindex,]
trainset<-iris[-testindex,]
x <- subset(trainset, select = -Species)
y <- trainset$Species
model <- svm(x, y)
print(model)

Call:
svm.default(x = x, y = y)


Parameters:
   SVM-Type:  C-classification 
 SVM-Kernel:  radial 
       cost:  1 

Number of Support Vectors:  40

結果の確認

テストデータを対象に、モデルによって予測した結果と正解データを比較すると、ほとんどのデータで品種を正しく予測していることが確認できます。

svm.pred <- predict(model, testset[, -5])
table(pred = svm.pred, true = testset[, 5] )
            true
pred         setosa versicolor virginica
  setosa         20          0         0
  versicolor      0         10         2
  virginica       0          2        16

パラメータのチューニング

最後に、パラメータのチューニングに利用するtune関数を紹介します。先ほど作成したmodelでチューニング可能なパラメータは”cost”(サポートベクトルマシン”C-classification”のパラメータ)と”gamma”(カーネル関数”radial”のパラメータ)の2つです。

以下のコードでは、rangesで指定したパラメータの組み合わせを対象にモデルのチューニングを行います。

svm.tune <- tune(svm, Species~., data = iris,
            ranges = list(gamma = 2^(-6:2), cost = 2^(2:10)),
            tunecontrol = tune.control(sampling = "fix")
)

summary関数を利用することで、最も良いパフォーマンスとなったパラメータの組み合わせや、パラメータの各組み合わせのパフォーマンスを確認することができます。

summary(svm.tune)

Parameter tuning of 'svm':

- sampling method: fixed training/validation set 

- best parameters:
 gamma cost
     1    4

- best performance: 0.02 

- Detailed performance results:
      gamma cost error dispersion
1  0.015625    4  0.04         NA
2  0.031250    4  0.06         NA
3  0.062500    4  0.06         NA
4  0.125000    4  0.04         NA
5  0.250000    4  0.06         NA
6  0.500000    4  0.04         NA
7  1.000000    4  0.02         NA
8  2.000000    4  0.06         NA
9  4.000000    4  0.08         NA
10 0.015625    8  0.06         NA
11 0.031250    8  0.06         NA
12 0.062500    8  0.06         NA
13 0.125000    8  0.06         NA
14 0.250000    8  0.06         NA
15 0.500000    8  0.04         NA
16 1.000000    8  0.02         NA
17 2.000000    8  0.06         NA
18 4.000000    8  0.08         NA
19 0.015625   16  0.06         NA
20 0.031250   16  0.04         NA
21 0.062500   16  0.06         NA
22 0.125000   16  0.04         NA
23 0.250000   16  0.04         NA
24 0.500000   16  0.06         NA
25 1.000000   16  0.04         NA
26 2.000000   16  0.06         NA
27 4.000000   16  0.08         NA
28 0.015625   32  0.06         NA
29 0.031250   32  0.06         NA
30 0.062500   32  0.04         NA
31 0.125000   32  0.04         NA
32 0.250000   32  0.06         NA
33 0.500000   32  0.04         NA
34 1.000000   32  0.04         NA
35 2.000000   32  0.06         NA
36 4.000000   32  0.08         NA
37 0.015625   64  0.06         NA
38 0.031250   64  0.04         NA
39 0.062500   64  0.04         NA
40 0.125000   64  0.04         NA
41 0.250000   64  0.06         NA
42 0.500000   64  0.04         NA
43 1.000000   64  0.04         NA
44 2.000000   64  0.06         NA
45 4.000000   64  0.08         NA
46 0.015625  128  0.04         NA
47 0.031250  128  0.04         NA
48 0.062500  128  0.04         NA
49 0.125000  128  0.06         NA
50 0.250000  128  0.06         NA
51 0.500000  128  0.04         NA
52 1.000000  128  0.04         NA
53 2.000000  128  0.06         NA
54 4.000000  128  0.08         NA
55 0.015625  256  0.04         NA
56 0.031250  256  0.04         NA
57 0.062500  256  0.04         NA
58 0.125000  256  0.06         NA
59 0.250000  256  0.06         NA
60 0.500000  256  0.04         NA
61 1.000000  256  0.04         NA
62 2.000000  256  0.06         NA
63 4.000000  256  0.08         NA
64 0.015625  512  0.02         NA
65 0.031250  512  0.04         NA
66 0.062500  512  0.04         NA
67 0.125000  512  0.06         NA
68 0.250000  512  0.06         NA
69 0.500000  512  0.04         NA
70 1.000000  512  0.04         NA
71 2.000000  512  0.06         NA
72 4.000000  512  0.08         NA
73 0.015625 1024  0.04         NA
74 0.031250 1024  0.04         NA
75 0.062500 1024  0.04         NA
76 0.125000 1024  0.06         NA
77 0.250000 1024  0.06         NA
78 0.500000 1024  0.04         NA
79 1.000000 1024  0.04         NA
80 2.000000 1024  0.06         NA
81 4.000000 1024  0.08         NA