使用 GPy 多输出共区域化预测

最近我遇到了一个问题,我认为多输出高斯过程(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)  

在上面的例子中,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)

到目前为止,一切看起来都正常,现在我想预测值。问题是似乎无法预测值。据我所知,你可以通过在 Y_metadata 参数中指定输入索引来预测单个输出。由于我有4个输入,我设置了一个我想预测的数组如下:

x_pred = np.array([3,2,2,4])

然后,我想我必须分别预测 x_pred 数组中的每个值,如 共区域化回归模型(向量值回归) 中所示:

Y_metadata1 = {'output_index': np.array([[0]])}y1_pred = m.predict(np.array(x[0]).reshape(1,-1),Y_metadata=Y_metadata1)

问题是我一直收到以下错误:

IndexError: index 1 is out of bounds for axis 1 with size 1

关于如何克服这个问题有任何建议吗,或者我的实现有什么错误吗?

错误跟踪:

Traceback (most recent call last):  File "<ipython-input-9-edb25bc29817>", line 36, in <module>    y1_pred = m.predict(np.array(x[0]).reshape(1,-1),Y_metadata=Y_metadata1)  File "c:\users\johndoe\desktop\modules\sheffieldml-gpy-v1.9.9-0-g92f2e87\sheffieldml-gpy-92f2e87\GPy\core\gp.py", line 335, in predict    mean, var = self._raw_predict(Xnew, full_cov=full_cov, kern=kern)  File "c:\users\johndoe\desktop\modules\sheffieldml-gpy-v1.9.9-0-g92f2e87\sheffieldml-gpy-92f2e87\GPy\core\gp.py", line 292, in _raw_predict    mu, var = self.posterior._raw_predict(kern=self.kern if kern is None else kern, Xnew=Xnew, pred_var=self._predictive_variable, full_cov=full_cov)  File "c:\users\johndoe\desktop\modules\sheffieldml-gpy-v1.9.9-0-g92f2e87\sheffieldml-gpy-92f2e87\GPy\inference\latent_function_inference\posterior.py", line 276, in _raw_predict    Kx = kern.K(pred_var, Xnew)  File "c:\users\johndoe\desktop\modules\sheffieldml-gpy-v1.9.9-0-g92f2e87\sheffieldml-gpy-92f2e87\GPy\kern\src\kernel_slice_operations.py", line 109, in wrap    with _Slice_wrap(self, X, X2) as s:  File "c:\users\johndoe\desktop\modules\sheffieldml-gpy-v1.9.9-0-g92f2e87\sheffieldml-gpy-92f2e87\GPy\kern\src\kernel_slice_operations.py", line 65, in __init__    self.X2 = self.k._slice_X(X2) if X2 is not None else X2  File "<decorator-gen-140>", line 2, in _slice_X  File "C:\Users\johndoe\AppData\Roaming\Python\Python37\site-packages\paramz\caching.py", line 283, in g    return cacher(*args, **kw)  File "C:\Users\johndoe\AppData\Roaming\Python\Python37\site-packages\paramz\caching.py", line 172, in __call__    return self.operation(*args, **kw)  File "c:\users\johndoe\desktop\modules\sheffieldml-gpy-v1.9.9-0-g92f2e87\sheffieldml-gpy-92f2e87\GPy\kern\src\kern.py", line 117, in _slice_X    return X[:, self._all_dims_active]IndexError: index 1 is out of bounds for axis 1 with size 1

回答:

问题

你定义了尺寸为 (-1, 4) 的 X 和尺寸为 (-1, 1) 的 Y,但你给模型预测的 X_pred 尺寸是 (1, 1)(x_pred 的第一个元素重塑为 (1, 1))。

解决方案

将 x_pred 提供给模型进行预测(输入尺寸为 (-1, 4))。

Y_metadata1 = {'output_index': np.array([[0]])}y1_pred = m.predict(np.array(x_pred).reshape(1,-1), Y_metadata=Y_metadata1)

自己动手

在将你的代码一起执行之前,尝试分别运行并轻松调试它们,然后你可以使你的代码简洁明了。下面是你的问题的调试代码示例

Y_metadata1 = {'output_index': np.array([[0]])}a = np.array(x_pred[0]).reshape(1,-1)print(a.shape)y1_pred = m.predict(a,Y_metadata=Y_metadata1)

输出是 (1,1) 和错误,这使得明显错误来自输入维度。

阅读错误信息也有帮助,你的错误信息指出,在 kern.K(pred_var, Xnew) 中有问题,所以错误可能来自核函数,然后它指出是来自 X[:, self._all_dims_active],所以错误可能来自 X 的维度。然后通过对 x 维度进行一些实验,你就会明白原因了。

希望七天后这对你有帮助!

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注