我想使用GPR从部署的访问点(AP)预测RSS。由于探地雷达也给出了平均RSS及其方差,因此,探地雷达在定位导航系统中具有重要的应用价值。我阅读了与探地雷达相关的期刊,并从中获得了理论上的洞察力。现在,我想用真正的数据(RSS)来实现它。在我的系统中,输入和相应的输出(观察)是:
X:二维笛卡尔坐标点
y:对应坐标的RSS (-dBm)数组
在网上搜索之后,我发现我可以使用雪橇软件(使用python)。我安装了sklearn并成功地测试了示例代码。示例python脚本用于一维GPR。因为我的输入集是2D坐标,所以我想修改示例代码。我发现其他人也尝试过这样做,例如:如何正确使用科学知识-学习的高斯过程的2D-输入,一维输出回归?、如何利用GPML (Matlab)实现二维高斯过程的回归?和是否适用于高维回归问题?。
预期(预测)值应该类似于y。我得到的价值是非常不同的。我想预测RSS的测试床的大小是16*16 sq.meters。我想预测每隔一米的RSS。我假设高斯过程预测器是在样本代码中使用高斯体面算法训练的。我想用萤火虫算法优化超参数(θ:使用y和X训练)。
为了使用我自己的数据(2D输入),我应该在哪一行代码中进行编辑?类似地,我如何实现萤火虫算法(我已经使用pip安装了萤火虫算法)?
请帮助我提出您的友好建议和意见。
非常感谢。
发布于 2018-04-17 05:11:07
我对代码进行了一些简化,以说明潜在的问题:
import numpy as np
from sklearn.gaussian_process import GaussianProcessRegressor
x_train = np.array([[0,0],[2,0],[4,0],[6,0],[8,0],[10,0],[12,0],[14,0],[16,0],[0,2],
[2,2],[4,2],[6,2],[8,2],[10,2],[12,2],[14,2],[16,2]])
y_train = np.array([-54,-60,-62,-64,-66,-68,-70,-72,-74,-60,-62,-64,-66,
-68,-70,-72,-74,-76])
# This is a test set?
x1min = 0
x1max = 16
x2min = 0
x2max = 16
x1 = np.linspace(x1min, x1max)
x2 = np.linspace(x2min, x2max)
x_test =(np.array([x1, x2])).T
gp = GaussianProcessRegressor()
gp.fit(x_train, y_train)
# predict on training data
y_pred_train = gp.predict(x_train)
print('Avg MSE: ', ((y_train - y_pred_train)**2).mean()) # MSE is 0
# predict on test (?) data
y_pred_test = gp.predict(x_test)
# it is unclear how good this result without y_test (e.g., held out labeled test samples)预期(预测)值应该类似于y。
这里,为了清晰起见,我将y重命名为y_train。在对GP进行拟合并在x_train上进行预测后,我们发现模型很好地预测了训练样本,这可能就是你的意思。我不确定你是否在问题中错误地写了小写x,我称之为x_test (而不是大写X,我称之为x_train)。如果我们在x_test上进行预测,如果没有相应的y_test值,我们就无法真正知道预测有多好。所以,这个基本的例子就像我所期望的那样起作用了。
您还试图为x_test创建一个网格,但是当前的代码并没有这样做。在这里,x1和x2对于每个位置总是相同的。如果您想要一个网格,请查看np.meshgrid。
https://stackoverflow.com/questions/49852494
复制相似问题