我想在R中使用Ksvm的用户自定义内核函数.所以,我尝试制作一个vanilladot内核并与"killalab"中的"vanilladot"进行比较.
我按如下方式编写内核.
#
###vanilla kernel with class "kernel"
#
kfunction.k <- function(){
k <- function (x,y){crossprod(x,y)}
class(k) <- "kernel"
k}
l<-0.1 ; C<-1/(2*l)
###use kfunction.k
tmp<-ksvm(x,factor(y),scaled=FALSE, type = "C-svc", kernel=kfunction.k(), C = C)
alpha(tmp)[[1]]
ind<-alphaindex(tmp)[[1]]
x.s<-x[ind,] ; y.s<-y[ind]
w.class.k<-t(alpha(tmp)[[1]]*y.s)%*%x.s
w.class.k
Run Code Online (Sandbox Code Playgroud)
我认为这个操作的结果是以下的结果.但它不是.
#
###use "vanilladot"
#
l<-0.1 ; C<-1/(2*l)
tmp1<-ksvm(x,factor(y),scaled=FALSE, type = "C-svc", kernel="vanilladot", C = C)
alpha(tmp1)[[1]]
ind1<-alphaindex(tmp1)[[1]]
x.s<-x[ind1,] ; y.s<-y[ind1]
w.tmp1<-t(alpha(tmp1)[[1]]*y.s)%*%x.s
w.tmp1
Run Code Online (Sandbox Code Playgroud)
我想也许这个问题与内核类有关.当类设置为"kernel"时,会出现此问题.但是当class设置为"vanillakernel"时,使用用户定义内核的ksvm的结果与使用Kernlab中内置的"vanilladot"的ksvm的结果相同.
#
###vanilla kernel with class "vanillakernel"
#
kfunction.v.k <- function(){
k <- function (x,y){crossprod(x,y)}
class(k) <- …
Run Code Online (Sandbox Code Playgroud)