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 個のポイント (黒い線) があり、青で得られる出力は黒い線と一致しません。
私は何を間違っていますか?