gpt4 book ai didi

r - 如何在 R 中使用 ksvm 执行新颖性检测?

转载 作者:行者123 更新时间:2023-12-01 05:27:52 26 4
gpt4 key购买 nike

我正在尝试使用 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")

enter image description here

上图是我得到的结果。蓝色轨迹是预测,它清楚地显示了一个持续为 0 的时期。但它在时间或宽度上与黑色轨迹中的异常值不匹配。有100个点(黑线)幅度较大,我在蓝色中得到的输出与黑线不匹配。

我究竟做错了什么?

最佳答案

这是你做错了什么:

xxTest <- matrix(c(x1,x2), nrow=1000, ncol=2, byrow=TRUE)

这应该是
xxTest <- matrix(c(x1,x2), nrow=1000, ncol=2, byrow=F )

或更好
xxTest <- cbind( x1, x2 )

或者干脆
p <- predict( classifier, cbind( x1, x2 ), type= "response" )

结果(我对 x2 使用了灰色):

enter image description here

说明:通过指定 byrow=T ,您首先使用 x1 的元素填充前 500 行(或者,第 1 列和第 2 列),然后使用 x2 填充 xxTest 的其余 500 行。 .由于奇点在 x2 中约为 500 - 600,因此它出现在 xxTest 的两列中。在 (500+500)/2 - (500+600)/2 左右,即 750-800,这是您可以看到的。

关于r - 如何在 R 中使用 ksvm 执行新颖性检测?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12932106/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com