我是 GPR 的新手。如果您就以下问题向我提出一些建议,我将不胜感激:
我们可以在稀疏高斯过程中使用 Matern52 内核吗?
选择伪输入(Z)的最佳方法是什么?随机抽样是否合理?
我想提一下,当我使用Matern52内核时,以下错误会停止优化过程。我的代码:
k1 = gpflow.kernels.Matern52(input_dim=X_train.shape[1], ARD=True)
m = gpflow.models.SGPR(X_train, Y_train, kern=k1, Z=X_train[:50, :].copy())
InvalidArgumentError(参见上面的回溯):输入矩阵不可逆。 [[节点:gradients_25 / SGPR-31ceaea6-412 / Cholesky_grad / MatrixTriangularSolve = MatrixTriangularSolve [T = DT_DOUBLE,adjoint = false,lower = true,_device =“/ job:localhost / replica:0 / task:0 / device:CPU: 0“](SGPR-31ceaea6-412 / Cholesky,SGPR-31ceaea6-412 / eye_1 / MatrixDiag)]
任何帮助将不胜感激,谢谢。
答案 0 :(得分:1)
您是否对一小部分数据进行了试验,也许可以在此处发布? Matern52没有理由不起作用。随机采样诱导点应该是一个合理的初始化,尤其是在更高维度中。但是,如果最终得到一些彼此非常接近的归纳点,则可能会遇到问题(这会使K_ {zz} = cov(f(Z),f(Z))矩阵的条件差,这将解释为什么Cholesky失败)。如果尚未对X_train进行混洗,则可能要使用Z=X_train[np.random.permutation(len(X_train))[:50]
来获得混洗的索引。添加白噪声内核kern = k1 + gpflow.kernels.White()...