LoginSignup
9
8

More than 5 years have passed since last update.

【#R言語】One Class SVM(1クラス サポートベクターマシン)を使った外れ値検出 #統計学 #機械学習

Last updated at Posted at 2014-05-27

R言語を使ってOne Class SVM(1クラス サポートベクターマシン)を使った外れ値検出を行う手順を自分用のメモとしてまとめました。

手順 1: サンプルデータ UKgas を読み込みます

R> data("UKgas")
R> UKgas

手順 2: 関数 str() を使って、時系列データ UKgas の構造を確認します

R> str(UKgas)
Time-Series [1:108] from 1960 to 1987: 160.1 129.7 84.8 120.1 160.1 ...

→ 1960年から1987年までのデータが格納された時系列データであることを確かめます。

手順 3: ライブラリ kernlab を読み込みます

R> library("kernlab")

手順 4: 関数 as.numeric() と関数 data.frame() を使って、時系列データ UKgas を数値ベクトルデータに変換、 class 列を追加し、データフレームを作成します

R> ukgas.data <- data.frame(as.numeric(UKgas), class=1)
R> ukgas.data

手順 5: 関数 str() を使って、作成したデータフレーム ukgas.data の構造を確認します

R> str(ukgas.data)
'data.frame':   108 obs. of  2 variables:
 $ as.numeric.UKgas.: num  160.1 129.7 84.8 120.1 160.1 ...
 $ class            : num  1 1 1 1 1 1 1 1 1 1 ...

→ 1列目に as.numeric.UKgas(ガスの消費量)、2列目に class(値は全て"1")が格納された data.frame 型オブジェクトであることを確かめます。

手順 6: 関数 ksvm() を使って、SVMオブジェクトを作成します

R> ukgas.data.svm <- ksvm(x=class~., data=ukgas.data, type="one-svc", kernel="vanilladot")
R> ukgas.data.svm
※ kernel: vanilladot(線形カーネル)、polidot(多項式カーネル)、rbfkernel(RBFカーネル)等から選択。

手順 7: 関数 predict() を使って、外れ値を検出します

R> ukgas.data.outlier <- predict(ukgas.data.svm)
R> ukgas.data.outlier

手順 8: 関数 ifelse() を使って、TRUE,FALSEの値をそれぞれ2,1に置換します

R> cluster <- ifelse(ukgas.data.outlier==TRUE, 2, 1)
R> cluster

手順 9: 関数 rm() を使って、不要なオブジェクト ukgas.data.outlier を削除します

R> rm(ukgas.data.outlier)

手順 10: 関数 data.frame() を使って、元データと外れ値の検出結果をマージします

R> ukgas.data <- data.frame(ukgas.data, cluster)
R> ukgas.data

手順 11: 関数 str() を使って、作成したデータフレーム ukgas.data の構造を確認します

R> str(ukgas.data)
'data.frame':   108 obs. of  3 variables:
 $ as.numeric.UKgas.: num  160.1 129.7 84.8 120.1 160.1 ...
 $ class            : num  1 1 1 1 1 1 1 1 1 1 ...
 $ cluster          : num  1 1 1 1 1 1 1 1 1 1 ...

→ 3列目に cluster が追加されたことを確かめます。

手順 12: 関数 plot() を使って、散布図を作成します

R> plot(ukgas.data[,1], type="o", col=ukgas.data$cluster)

以上

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8