我正在尝试编写代码以使用pyGP进行回归,其中我的训练数据x(和测试数据z)是多维的。所以训练示例为x:(0.2,0.5)和y:(0.7)。
我首先从演示“ demo_GPR_FITC.py”中试用了一些代码,其中x和z是一维的:

demoData = np.load('regression_data.npz')

x = demoData['x']            # training data
y = demoData['y']            # training target
z = demoData['xstar']        # test data
# Start from a new model
model = pyGPs.GPR_FITC()

model.setData(x, y)
#model.optimize()
model.predict(z)
model.plot()


这行得通,所以我尝试运行演示,将x和z的维数扩展为2维,如下所示:

我将x转换为x2,以便当x的元素为0.2时,x2的元素为[0.2,0.2]。

因此x的形状为(20L,1L),x2的形状为(20L,2L)。
我对测试数据z做了同样的事情,并试图设置数据并进行预测。这是我使用的代码:

demoData = np.load('regression_data.npz')
x = demoData['x'] # training data
y = demoData['y'] # training target
z = demoData['xstar'] # test data
# Start from a new model
model = pyGPs.GPR_FITC()

x2 = []
for i in range (len(x)):
    x2.append([x[i][0], x[i][0]])
x2 = np.asarray(x2)

z2 = []
for i in range (len(z)):
    z2.append([z[i][0], z[i][0]])
z2 = np.asarray(z2)

model.setData(x2, y)
#model.optimize()
model.predict(z2)
model.plot()


通过使用多维x和z运行上面的代码,我得到以下错误:

Traceback (most recent call last):

  File "<ipython-input-176-8b27178cc782>", line 22, in <module>
    model.predict(z2)

  File "C:\Program Files\WinPython-64bit-2.7.10.2\python-2.7.10.amd64\lib\site-packages\pyGPs\Core\gp.py", line 395, in predict
    Ks  = covfunc.getCovMatrix(x=x[nz,:], z=xs[id,:], mode='cross')   # cross-covariances

IndexError: index 20 is out of bounds for axis 0 with size 20


现在我的问题是是否需要以其他方式制作x2和z2?
还是演示中的代码不适合多维x和z,如果可以,我还有其他方法可以使用吗?

预先谢谢你!

最佳答案

这是一个索引错误。现在已修复。请从github获取pyGP或将其添加到gp.py中:

if isinstance(covfunc, FITCOfKernel):
    Ks = covfunc.getCovMatrix(x=x, z=xs[id,:], mode='cross')   #   cross-covariances
    Ks = Ks[nz,:]
else:
    Ks  = covfunc.getCovMatrix(x=x[nz,:], z=xs[id,:], mode='cross')   # cross-covariances


感谢您指出了这一点!马里恩

08-24 22:31