3

我正在查看用于高斯过程回归gausspr的包中的 R 函数。kernlab该过程由核函数的超参数和数据中的噪声定义。我在可以指定的文档中看到

var:初始噪声方差,(仅用于回归)(默认值:0.001)

但我看不到在回归运行后如何访问估计值。例如,考虑我有一些观察到的点,并想预测 y 给出的位置的值X

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

4

1 回答 1

3

我可能忽略了一些东西,但我不认为初始噪声方差var“适合”任何东西。我不认为它是一个参数(尽管我同意使用“初始”这个词会让你不这么认为)。

噪声方差只是添加到训练点的相关矩阵的对角线上,如本页关于其他一些软件的描述。查看函数定义,看起来这正是它正在做的事情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只是被放进去,没有任何改变。

于 2012-11-29T00:57:04.900 回答