我正在重写RBF内核函数:
install.packages("kernlab")
library(kernlab)
rbf <- function(x, y) {
gamma<-0.5
exp(-0.5*norm((as.matrix(x)-as.matrix(y)),"f"))
}
class(rbf) <- "kernel"
我正在使用的数据(10个观察值,3个变量,第4列是目标):
data<-matrix(1:40,nrow=10,ncol=4)
train<-data[1:(0.6*nrow(data)), ]
test<-data[((0.6*nrow(data))+1):nrow(data), ]
使用ksvm和预测使用自定义内核函数进行建模:
k_rbf <- ksvm(train[,ncol(train)]~.,data=train,C=0.1,type="eps-svr",epsilon=0.01,kernel=rbf)
ksvm_rbf<-predict(k_rbf, test)
到目前为止,该函数运行良好,但我想进一步设计自定义rbf内核添加相似性函数。通常,我们有如下RBF内核:
增加了我设计的季节性的RBF内核如下所示:其中x_i和x_j是分别代表时间戳t_i和t_j的时间序列的两个对象, S 是季节性时间段
所以,添加一个包含每行索引的新列:
t<-1:nrow(data)
data_t<-cbind(t,data)
train_t<-data_t[1:(0.6*nrow(data_t)), ]
test_t<-data_t[((0.6*nrow(data_t))+1):nrow(data_t), ]
在我构建的内核中添加相似性部分:
sea_rbf <- function(x, y) {
gamma<-0.5
S<-3
n_x<-x[1] # row ID of X
n_y<-y[1] # row ID of y
x<-x[2:4]
y<-y[2:4]
d<-abs((n_x-n_y)%% S)
sea<-min(d,S-d)
value <-exp(-0.5*norm((as.matrix(x)-as.matrix(y)),"f"))*exp(-sea^2)
return (value )}
class(sea_rbf) <- "kernel"
k_rbf_t <- ksvm(train_t[,ncol(train_t)]~.,data=train_t,C=0.1,type="eps-svr",epsilon=0.01,kernel=sea_rbf)
ksvm_rbf_t<-predict(k_rbf_t, test_t)
在训练和预测期间没有错误,但是当我运行debug()来查看进程详细信息时,这不是我所期望的!例如,&#34; n_x&lt; -x 1&#34;的代码函数中的函数从未从原始数据中获取行ID :(。
我对使用ksvm函数的内核函数用法有一个错误的理解:(((
欢迎任何帮助!
非常感谢!!!