我正在尝试使用 R 中的 kernlab 库(ksvm 函数)来实现新颖性检测器。这是我正在尝试做的一个简单示例:
# Training data
xxTrain <- matrix(rnorm(2000), nrow=1000, ncol=2, byrow=TRUE)
y <- rep(1,1000)
classifier <- ksvm(xxTrain, y, type="one-svc", kernel="rbfdot", kpar="automatic")
# Test data
x1 <- rnorm(1000)
scale <- c(rep(1,500), rep(10,100), rep(1,400))
x2 <- rnorm(1000)*scale
xxTest <- matrix(c(x1,x2), nrow=1000, ncol=2, byrow=TRUE)
# Prediction
p <- predict(classifier, xxTest, type="response")
# Visualization
plot(x2, type='l')
lines(x1, col="red")
points(5*as.integer(p), type='l', col="blue")
上图是我得到的结果。蓝色迹线是预测,它清楚地显示了一个始终为 0 的周期。但它与黑色迹线中的异常值在时间或宽度上不匹配。有100个幅度较大的点(黑线),我得到的蓝色输出与黑线不匹配。
我究竟做错了什么?