3.6 節 支持ベクトルデータ記述法に基づく異常判定
本に載せなかったカラーの等高線図のRコードです (すみませんがコードに関する質問は受け付けておりません)。
支持ベクトルデータ記述法 (Support vector data description; SVDD) はいわゆる1クラス支持ベクトル分類器 (one-class support vector machine) と等価であることが知られています。「SVMによる異常検知」ということです。
まず必要なライブラリーを読み、乱数のシードを決めた上で、乱数でデータを作ります。
library(kernlab)
set.seed(1)
# two-dimensional distribution
x <- rbind(matrix(rnorm(120),ncol=2),matrix(rnorm(120,mean=3),ncol=2))
x <- scale(x)
\(\nu=0.1\) にして、SVDDのモデルを学習します。学習する部分は1行で書けてしまいます。便利です。
rbf <- rbfdot(sigma=0.5)
ocsvm <- ksvm(x,type="one-svc",kernel=rbf,nu=0.1)
支持ベクトル、つまり、分離境界を頑張って支えてくれているベクトルを黒く塗って散布図を作ってみましょう。
colorcode<- rep(0, nrow(x))
colorcode[ocsvm@alphaindex] <-1
plot(x, pch=21, bg=colorcode)
![](data:image/png;base64,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)
これだと味気ないのでカラーの等高線図を作ってみましょう。これは多少面倒です。説明は省きますがまず2つほど関数を定義します。
getR2s.ocsvm <- function(x_selected, ocsvm, knl,CC=1){
idx.onSphere <- which(ocsvm@alpha != CC)
R2s <- rep(-1, length(idx.onSphere))
# Computing R2
XX <- ocsvm@xmatrix
iid <- 1
for(idx in idx.onSphere){
x.onSphere <- ocsvm@xmatrix[idx,]
R2s[iid] <- getR2.ocsvm(x.onSphere, ocsvm, knl,CC)
iid <- iid + 1
}
return(R2s)
}
getR2.ocsvm <- function(x_selected, ocsvm, knl,CC=1){
XX <- ocsvm@xmatrix
Knn <- kernelMatrix(knl,t(x_selected),t(x_selected)) # must be 1 for rbf kernel
Ka <- kernelMult(knl,x=XX,y=XX,z=ocsvm@alpha)
aKa <- ocsvm@alpha %*% Ka
K <- kernelMatrix(knl,x=XX,y=t(x_selected)) # column vector
aK <- ocsvm@alpha %*% K
return(Knn + aKa -2.* aK)
}
可視化の色は、SVDDにおける超球の半径\(R^2\)に関係していますので、その情報を取り出します。
# Select on-sphere samples to check the value of R
R2s <- getR2s.ocsvm(x_selected,ocsvm,rbf)
最後に等高線図を書きます。お使いのPCの能力によっては、数分時間がかかるかもしれません。
# Drawing contor
N1 <- 100
N2 <- 100
x1min <- min(ocsvm@xmatrix[,1])
x1max <- max(ocsvm@xmatrix[,1])
x2min <- min(ocsvm@xmatrix[,2])
x2max <- max(ocsvm@xmatrix[,2])
x1s <- seq(x1min,x1max, length=N1)
x2s <- seq(x2min,x2max, length=N2)
zz <- matrix(0,nr=N2,nc=N1)
for(ind in 1:N1){
for(ind2 in 1:N2){
xin <- c(x1s[ind],x2s[ind2])
zz[ind,ind2] <- getR2.ocsvm(xin,ocsvm,rbf) - mean(R2s)
}}
d <- list(x=x1s,y=x2s,z=zz)
image(d,col = terrain.colors(9))
contour(d,add=T)
points(x,pch=21,bg=colorcode,cex=1.5)
![](data:image/png;base64,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)
LS0tDQp0aXRsZTogIuWFpemWgCDmqZ/morDlrabnv5LjgavjgojjgovnlbDluLjmpJznn6UiDQphdXRob3I6ICLkupXmiYsg5YmbIg0Kb3V0cHV0OiBodG1sX25vdGVib29rDQotLS0NCiMjIDMuNiDnr4Ag5pSv5oyB44OZ44Kv44OI44Or44OH44O844K/6KiY6L+w5rOV44Gr5Z+644Gl44GP55Ww5bi45Yik5a6aDQoNCuacrOOBq+i8ieOBm+OBquOBi+OBo+OBn+OCq+ODqeODvOOBruetiemrmOe3muWbs+OBrlLjgrPjg7zjg4njgafjgZkgKOOBmeOBv+OBvuOBm+OCk+OBjOOCs+ODvOODieOBq+mWouOBmeOCi+izquWVj+OBr+WPl+OBkeS7mOOBkeOBpuOBiuOCiuOBvuOBm+OCkynjgIINCg0K5pSv5oyB44OZ44Kv44OI44Or44OH44O844K/6KiY6L+w5rOVIChTdXBwb3J0IHZlY3RvciBkYXRhIGRlc2NyaXB0aW9uOyBTVkREKSDjga/jgYTjgo/jgobjgosx44Kv44Op44K55pSv5oyB44OZ44Kv44OI44Or5YiG6aGe5ZmoIChvbmUtY2xhc3Mgc3VwcG9ydCB2ZWN0b3IgbWFjaGluZSkg44Go562J5L6h44Gn44GC44KL44GT44Go44GM55+l44KJ44KM44Gm44GE44G+44GZ44CC44CMU1ZN44Gr44KI44KL55Ww5bi45qSc55+l44CN44Go44GE44GG44GT44Go44Gn44GZ44CCDQoNCuOBvuOBmuW/heimgeOBquODqeOCpOODluODqeODquODvOOCkuiqreOBv+OAgeS5seaVsOOBruOCt+ODvOODieOCkuaxuuOCgeOBn+S4iuOBp+OAgeS5seaVsOOBp+ODh+ODvOOCv+OCkuS9nOOCiuOBvuOBmeOAgg0KDQpgYGB7cn0NCmxpYnJhcnkoa2VybmxhYikNCnNldC5zZWVkKDEpDQojIHR3by1kaW1lbnNpb25hbCBkaXN0cmlidXRpb24NCnggPC0gcmJpbmQobWF0cml4KHJub3JtKDEyMCksbmNvbD0yKSxtYXRyaXgocm5vcm0oMTIwLG1lYW49MyksbmNvbD0yKSkNCnggPC0gc2NhbGUoeCkNCmBgYA0KDQokXG51PTAuMSQg44Gr44GX44Gm44CBU1ZEROOBruODouODh+ODq+OCkuWtpue/kuOBl+OBvuOBmeOAguWtpue/kuOBmeOCi+mDqOWIhuOBrzHooYzjgafmm7jjgZHjgabjgZfjgb7jgYTjgb7jgZnjgILkvr/liKnjgafjgZnjgIINCg0KYGBge3J9DQpyYmYgPC0gcmJmZG90KHNpZ21hPTAuNSkNCm9jc3ZtIDwtIGtzdm0oeCx0eXBlPSJvbmUtc3ZjIixrZXJuZWw9cmJmLG51PTAuMSkNCmBgYA0KDQrmlK/mjIHjg5njgq/jg4jjg6vjgIHjgaTjgb7jgorjgIHliIbpm6LlooPnlYzjgpLpoJHlvLXjgaPjgabmlK/jgYjjgabjgY/jgozjgabjgYTjgovjg5njgq/jg4jjg6vjgpLpu5LjgY/loZfjgaPjgabmlaPluIPlm7PjgpLkvZzjgaPjgabjgb/jgb7jgZfjgofjgYbjgIINCg0KYGBge3J9DQpjb2xvcmNvZGU8LSByZXAoMCwgbnJvdyh4KSkNCmNvbG9yY29kZVtvY3N2bUBhbHBoYWluZGV4XSA8LTENCnBsb3QoeCwgcGNoPTIxLCBiZz1jb2xvcmNvZGUpDQpgYGANCuOBk+OCjOOBoOOBqOWRs+awl+OBquOBhOOBruOBp+OCq+ODqeODvOOBruetiemrmOe3muWbs+OCkuS9nOOBo+OBpuOBv+OBvuOBl+OCh+OBhuOAguOBk+OCjOOBr+WkmuWwkemdouWAkuOBp+OBmeOAguiqrOaYjuOBr+ecgeOBjeOBvuOBmeOBjOOBvuOBmu+8kuOBpOOBu+OBqemWouaVsOOCkuWumue+qeOBl+OBvuOBmeOAgg0KDQpgYGB7cn0NCmdldFIycy5vY3N2bSAgPC0gZnVuY3Rpb24oeF9zZWxlY3RlZCwgb2Nzdm0sIGtubCxDQz0xKXsNCiAgDQogIGlkeC5vblNwaGVyZSA8LSB3aGljaChvY3N2bUBhbHBoYSAhPSBDQykNCiAgUjJzIDwtIHJlcCgtMSwgbGVuZ3RoKGlkeC5vblNwaGVyZSkpDQogIA0KICAjIENvbXB1dGluZyBSMg0KICBYWCA8LSBvY3N2bUB4bWF0cml4DQogIGlpZCA8LSAxDQogIGZvcihpZHggaW4gaWR4Lm9uU3BoZXJlKXsNCiAgICB4Lm9uU3BoZXJlIDwtIG9jc3ZtQHhtYXRyaXhbaWR4LF0NCiAgICBSMnNbaWlkXSA8LSBnZXRSMi5vY3N2bSh4Lm9uU3BoZXJlLCBvY3N2bSwga25sLENDKQ0KICAgIGlpZCA8LSBpaWQgKyAxIA0KICB9DQogIHJldHVybihSMnMpDQp9DQpnZXRSMi5vY3N2bSA8LSBmdW5jdGlvbih4X3NlbGVjdGVkLCBvY3N2bSwga25sLENDPTEpew0KICBYWCA8LSBvY3N2bUB4bWF0cml4DQogIEtubiA8LSBrZXJuZWxNYXRyaXgoa25sLHQoeF9zZWxlY3RlZCksdCh4X3NlbGVjdGVkKSkgIyBtdXN0IGJlIDEgZm9yIHJiZiBrZXJuZWwNCiAgS2EgPC0ga2VybmVsTXVsdChrbmwseD1YWCx5PVhYLHo9b2Nzdm1AYWxwaGEpDQogIGFLYSA8LSBvY3N2bUBhbHBoYSAlKiUgS2EgDQoNCiAgSyA8LSBrZXJuZWxNYXRyaXgoa25sLHg9WFgseT10KHhfc2VsZWN0ZWQpKSAjIGNvbHVtbiB2ZWN0b3INCiAgYUsgPC0gb2Nzdm1AYWxwaGEgJSolIEsNCiAgcmV0dXJuKEtubiArIGFLYSAtMi4qIGFLKQ0KfQ0KYGBgDQoNCuWPr+imluWMluOBruiJsuOBr+OAgVNWRETjgavjgYrjgZHjgovotoXnkIPjga7ljYrlvoQkUl4yJOOBq+mWouS/guOBl+OBpuOBhOOBvuOBmeOBruOBp+OAgeOBneOBruaDheWgseOCkuWPluOCiuWHuuOBl+OBvuOBmeOAgg0KDQpgYGB7cn0NCiMgU2VsZWN0IG9uLXNwaGVyZSBzYW1wbGVzIHRvIGNoZWNrIHRoZSB2YWx1ZSBvZiBSDQpSMnMgPC0gZ2V0UjJzLm9jc3ZtKHhfc2VsZWN0ZWQsb2Nzdm0scmJmKQ0KYGBgDQoNCuacgOW+jOOBq+etiemrmOe3muWbs+OCkuabuOOBjeOBvuOBmeOAguOBiuS9v+OBhOOBrlBD44Gu6IO95Yqb44Gr44KI44Gj44Gm44Gv44CB5pWw5YiG5pmC6ZaT44GM44GL44GL44KL44GL44KC44GX44KM44G+44Gb44KT44CCDQoNCmBgYHtyfQ0KIyBEcmF3aW5nIGNvbnRvcg0KTjEgPC0gMTAwDQpOMiA8LSAxMDANCngxbWluIDwtIG1pbihvY3N2bUB4bWF0cml4WywxXSkNCngxbWF4IDwtIG1heChvY3N2bUB4bWF0cml4WywxXSkNCngybWluIDwtIG1pbihvY3N2bUB4bWF0cml4WywyXSkNCngybWF4IDwtIG1heChvY3N2bUB4bWF0cml4WywyXSkNCngxcyA8LSBzZXEoeDFtaW4seDFtYXgsIGxlbmd0aD1OMSkNCngycyA8LSBzZXEoeDJtaW4seDJtYXgsIGxlbmd0aD1OMikNCnp6IDwtIG1hdHJpeCgwLG5yPU4yLG5jPU4xKQ0KZm9yKGluZCBpbiAxOk4xKXsNCiAgZm9yKGluZDIgaW4gMTpOMil7DQogIHhpbiA8LSBjKHgxc1tpbmRdLHgyc1tpbmQyXSkNCiAgenpbaW5kLGluZDJdIDwtIGdldFIyLm9jc3ZtKHhpbixvY3N2bSxyYmYpIC0gbWVhbihSMnMpDQp9fQ0KZCA8LSBsaXN0KHg9eDFzLHk9eDJzLHo9enopDQppbWFnZShkLGNvbCA9IHRlcnJhaW4uY29sb3JzKDkpKQ0KY29udG91cihkLGFkZD1UKQ0KcG9pbnRzKHgscGNoPTIxLGJnPWNvbG9yY29kZSxjZXg9MS41KQ0KYGBgDQoNCg==