我正在查看gausspr
包中用于高斯过程回归的R函数kernlab
。该过程由内核函数的超参数和数据中的噪声定义。我在文档中看到我可以指定
var:初始噪声方差,(仅用于回归)(默认值:0.001)
但是我没有看到在回归运行后如何访问估计的值。例如,考虑我有一些观察点,并希望预测X
给出的位置的y值:
obs <- data.frame(x = c(-4, -3, -1, 0, 2),
y = c(-2, 0, 1, 2, -1))
X <- seq(-5,5,len=50)
我可以使用kernlab::gausspr
这样做:
gp <- gausspr(obs$x, obs$y, kernel="rbfdot", scaled=FALSE, var=.09)
Ef <- predict(gp, X)
我可以得到内核超参数的估计值:
gp@kernelf@kpar
但我不知道如何返回噪声参数var
的估计值?
答案 0 :(得分:3)
我可能会忽视某些事情,但我认为最初的噪音差异var
并不适合任何事情;我不认为这是一个参数(虽然我同意使用“初始”这个词让你不这么认为)。
噪声方差仅添加到训练点的相关矩阵的对角线上,如this page中关于某些其他软件所述。通过查看函数定义,它看起来就像它在kernlab
中所做的一样:
# The only relevant line where 'var' is used
alpha(ret) <- solve(K + diag(rep(var, length = m))) %*% y
如果您想通过噪声方差得到误差(或任何拟合度),您可以执行以下操作:
error.fun<-function(x) error(gausspr(obs$x, obs$y, kernel="rbfdot", scaled=FALSE, var=x))
noises<-seq(0.1,1,by=0.1)
y<-sapply(noises,error.fun)
plot(noises,y,type='l')
根据我的判断,内置的交叉验证不会以任何方式“适合”var
。交叉验证中唯一相关的行是:
cret <- gausspr(x[cind, ], y[cind], type = type(ret),
scaled = FALSE, kernel = kernel, var = var,
tol = tol, cross = 0, fit = FALSE)
你可以看到var
只是放入而没有任何变化。