-1

高斯过程回归 (GPR) 的标准 scikit-learn 实现中,(内核的)超参数是根据训练集选择的。

是否有一个易于使用的 GPR 实现(在 python 中),其中超参数(内核的)是基于单独的验证集选择的?或者交叉验证也是寻找合适超参数的一个很好的替代方法(经过优化以在多个 train-val 分割上表现良好)。(我更喜欢基于 scikit-learn GPR 的解决方案。)

详细说明:应该找到一组超参数 theta,在以下指标中表现良好:根据训练数据计算后验 GP(给定具有超参数 theta 的先验 GP)。然后评估验证数据相对于后验的负对数似然。对于 theta,这种负对数可能性应该是最小的。

换句话说,我想找到这样的“P [ valData | trainData,theta ]”是最大的。更准确地说,我想找到 theta 使得 sum_i log(P[ valData_i | trainData, theta ] 是最大的,其中 P[ valData_i | trainData, theta ] 是给定训练的验证数据点 valData_i 的高斯边际后验密度-给定具有超参数 theta 的先前 GP 的数据集。

4

1 回答 1

0

我会这样做:首先我会在我的验证集上安装一个带有默认内核的 sklearn GPR;然后我会在我的训练集上安装另一个具有相同超参数的 GPR,但提供之前 GPR 的内核实例作为内核:

X_val = np.random.random((100, 5))
y_val = np.random.random((100,))

X_train = np.random.random((1000, 5))
y_train = np.random.random((1000,))

gpr_val = GaussianProcessRegressor().fit(X_val, y_val)
gpr_train = GaussianProcessRegressor(kernel=gpr_val.kernel_).fit(X_train, y_train)
于 2022-01-19T14:05:58.110 回答