Python pyGPs:用于多维 x 和 z 回归的 IndexError,setData(x,y) 和 predict(z)
Python pyGPs: IndexError for regression with multi-dimensional x and z, setData(x,y) and predict(z)
我正在尝试编写代码以使用 pyGPs 执行回归,其中我的训练数据 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 的维度扩展到二维,如下所示:
我把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
感谢您指出这一点!马里昂
我正在尝试编写代码以使用 pyGPs 执行回归,其中我的训练数据 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 的维度扩展到二维,如下所示:
我把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
感谢您指出这一点!马里昂