相关疑难解决方法(0)

(在R中)为什么使用用户定义的线性内核的ksvm的结果与使用"vanilladot"的ksvm的结果不同?

我想在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)

r machine-learning svm

5
推荐指数
1
解决办法
1716
查看次数

标签 统计

machine-learning ×1

r ×1

svm ×1