1

我正在试验高斯过程模型,特别是在 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))

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

4

1 回答 1

1

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

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

  • sigma径向基核函数“ rbfdot ”和拉普拉斯核“ laplacedot ”的逆核宽度。

  • degree, scale, offset对于多项式内核“ polydot ”。

  • scale, offset对于双曲正切核函数“ tanhdot ”。

  • sigma, order, degree对于贝塞尔内核“ besseldot ”。

  • sigma, degree对于 ANOVA 内核“ anovadot ”。

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

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

test <- kernlab::gausspr(Species~.,data=iris,type="classification",
                     kernel="polydot", kpar=list(degree =1, scale =1, offset =0))
于 2018-03-15T02:00:04.577 回答