我正在试验高斯过程模型,特别是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))
知道这里发生了什么吗?非常感谢!
答案 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))