【问题标题】:gausspr function from R package kernlab hangs on linear kernelR包kernlab中的gausspr函数挂在线性内核上
【发布时间】:2017-11-14 06:00:53
【问题描述】:

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

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

【问题讨论】:

  • 更新:问题可追溯到alphagwhile 循环求解,其中gradnorm 在6 个循环后在0.01 和0.02 之间振荡,而不是消失到零...跨度>

标签: r kernlab


【解决方案1】:

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

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

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

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

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

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

  • sigma, degree 用于方差分析内核“anovadot”。

如果您想更好地理解原因,请查看this 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))

【讨论】:

    猜你喜欢
    • 2013-06-08
    • 2012-05-14
    • 2012-07-22
    • 2012-11-02
    • 2012-08-18
    • 2014-11-28
    • 1970-01-01
    • 1970-01-01
    • 2022-08-24
    相关资源
    最近更新 更多