来自R package kernlab的gausspr函数挂在线性内核

时间:2017-11-14 06:00:53

标签: r kernlab

我正在试验高斯过程模型,特别是kernlab R包中的实现。我发现当用线性内核切除时,模型拟合会挂起。分析显示它正忙于通过运算符“%*%”进行矩阵乘法。下面给出了一个可重复的例子:

data(iris)
#this doesn't hang
test <- kernlab::gausspr(Species~.,data=iris,type="classification",kernel="rbfdot")
#this hangs with message "Setting default kernel parameters"
test <- kernlab::gausspr(Species~.,data=iris,type="classification",kernel="vanilladot")
#this also hangs
test <- kernlab::gausspr(Species~.,data=iris,type="classification",kernel="polydot", kpar=list(degree=1))
#this doesn't hang
test <- kernlab::gausspr(Species~.,data=iris,type="classification",kernel="polydot", kpar=list(degree=2))

知道这里发生了什么吗?非常感谢!

1 个答案:

答案 0 :(得分:0)

您需要为每种内核类型指定不同的调优超参数kpar默认选项为 kpar = list(sigma = 0.1),仅适用于高斯内核。

每个内核kpar的超参数列表如下:

  • sigma径向基础内核函数的逆内核宽度&#34; rbfdot &#34;和拉普拉斯内核&#34; laplacedot &#34;。

  • degree, scale, offset用于多项式内核&#34; polydot &#34;。

  • scale, offset用于双曲正切核函数&#34; tanhdot &#34;。

  • sigma, order, degree贝塞尔内核&#34; besseldot &#34;。

  • sigma, degree用于ANOVA内核&#34; anovadot &#34;。

如果您想更好地了解原因,请查看第9页的this pdf中的内核函数。

然而对于简单的LINEAR内核来说,事情有点棘手,即 kernel = vanilladot 。没有指定超参数。我试过kpar = NA,但它不起作用。我想出了一种方法来使用具有特殊调整的多项式来获得LINEAR内核结果:

test <- kernlab::gausspr(Species~.,data=iris,type="classification",
                     kernel="polydot", kpar=list(degree =1, scale =1, offset =0))