我正在尝试编写代码,使用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'] # 训练数据y = demoData['y'] # 训练目标z = demoData['xstar'] # 测试数据# 从一个新模型开始 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'] # 训练数据y = demoData['y'] # 训练目标z = demoData['xstar'] # 测试数据# 从一个新模型开始 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-covariancesIndexError: index 20 is out of bounds for axis 0 with size 20
现在我的问题是,我是否需要以其他方式创建x2和z2?或者演示中的代码不适合多维的x和z,如果是这样,是否有其他方法可以用于此目的?
提前感谢!
回答:
这是一个索引错误。现在已经修复。请从github获取pyGPs,或者在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
感谢指出这个问题!Marion