我想使用GPR来预测部署的接入点(AP)的RSS。由于GPR也给出了平均RSS及其方差,因此GPR在定位和导航系统中非常有用。我阅读了GPR相关的已发表的期刊,并获得了理论上的见解。现在,我想用真实数据(RSS)实现它。在我的系统中,输入和相应的输出(观察)是:
X :2D笛卡尔坐标点
y :相应坐标处的RSS(-dBm)数组
在线搜索后,我发现我可以使用sklearn软件(使用python)。我安装了 sklearn 并成功测试了示例代码。示例python脚本适用于1D GPR。由于我的输入集是2D坐标,我想修改示例代码。我发现其他人也尝试过这样做,例如:How to correctly use scikit-learn's Gaussian Process for a 2D-inputs, 1D-output regression?,How to make a 2D Gaussian Process Using GPML (Matlab) for regression?和Is kringing suitable for high dimensional regression problems?。
预期(预测)值应与 y 类似。我得到的价值是非常不同的。我想要预测RSS的测试台的大小是16 * 16平方米。我想预测每隔一米的RSS。我假设高斯过程预测器在样本代码中使用高斯体系算法进行训练。我想用Firefly算法优化超参数(theta:使用 y 和 X 进行训练)。
为了使用我自己的数据(2D输入),我想编辑哪一行代码?同样,我如何实现Firefly算法(我已经使用pip安装了firefly算法)?
请帮助我提出您的建议和意见。
非常感谢你。
答案 0 :(得分:1)
我已经简化了一些代码来说明潜在的问题:
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。