我最近遇到一个问题,我认为多输出 GP 可能是一个不错的选择。我目前正在对我的数据应用单输出 GP,随着维度的增加,我的结果变得越来越糟。我尝试过使用 SKlearn 进行多输出,并且能够在更高维度上获得更好的结果,但是我相信 GPy 对于此类任务来说更完整,并且我可以更好地控制模型。对于单输出 GP,我将内核设置如下:
kernel = GPy.kern.RBF(input_dim=4, variance=1.0, lengthscale=1.0, ARD = True)
m = GPy.models.GPRegression(X, Y_single_output, kernel = kernel, normalizer = True)
m.optimize_restarts(num_restarts=10)
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,X 的大小为 (20,4),Y 的大小为 (20,1)。
我从多输出高斯过程简介中获得的多输出实现 我根据示例准备数据,将 X_mult_output 设置为大小 (80,2) - 第二列是输入索引 - 并重新排列 Y至 (80,1)。
kernel = GPy.kern.RBF(1,lengthscale=1, ARD = True)**GPy.kern.Coregionalize(input_dim=1,output_dim=4, rank=1)
m = GPy.models.GPRegression(X_mult_output,Y_mult_output, kernel = kernel, normalizer = True)
Run Code Online (Sandbox Code Playgroud)
好吧,到目前为止一切似乎都有效,现在我想预测这些值。问题是我似乎无法预测这些值。据我了解,您可以通过在 Y_metadata 参数上指定输入索引来预测单个输出。由于我有 4 个输入,因此我设置了一个要预测的数组,如下所示:
x_pred = np.array([3,2,2,4])
Run Code Online (Sandbox Code Playgroud)
然后,我想我必须分别对 x_pred 数组中的每个值进行预测,如共区域回归模型(向量值回归)中所示:
Y_metadata1 = {'output_index': np.array([[0]])}
y1_pred = …Run Code Online (Sandbox Code Playgroud) python regression machine-learning non-linear-regression gpy