利用高斯过程回归(GPR)预测无线电信号强度(RSS)

2024-06-07 11:48:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用GPR从一个已部署的接入点(AP)预测RSS。由于探地雷达也给出了平均RSS及其方差,因此它在定位导航系统中有着非常重要的作用。我阅读了与探地雷达相关的出版期刊,并对其有了理论上的见解。现在,我想用real data(RSS)来实现它。在我的系统中,输入和相应的输出(观察)是:

X:二维笛卡尔坐标点

y:对应坐标处的RSS(-dBm)数组

在网上搜索之后,我发现我可以使用sklearn软件(使用python)。我安装了sklearn,并成功地测试了示例代码。示例python脚本用于1D GPR。因为我的输入集是二维坐标,所以我想修改示例代码。我发现其他人也尝试过这样做,例如: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?,和{a4}。在

预期(预测)值应类似于y。我得到的价值很不一样。我要预测RSS的测试台的大小是16*16平方米. 我想预测每一米的RSS。我假设高斯过程预测器在样本代码中使用高斯下降算法进行训练。我想用萤火虫算法优化超参数(θ:使用yX训练)。在

为了使用我自己的数据(2D输入),我应该编辑哪一行代码?类似地,我如何实现萤火虫算法(我已经用pip安装了萤火虫算法)?在

请帮我提些建议和意见。在

非常感谢。在


Tags: to代码算法示例for系统gaussiansklearn
1条回答
网友
1楼 · 发布于 2024-06-07 11:48:32

为了说明潜在问题,我对代码进行了一些简化:

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)

The expected (predicted) values should be similar to y.

为了清楚起见,我将y重命名为y_train。在对GP进行拟合并对x_train进行预测之后,我们看到模型完美地预测了训练样本,这可能就是您的意思。我不确定你在问题中是否写错了小写x,我称之为x_test(而不是大写的X,我称之为x_train)。如果我们对x_test进行预测,没有相应的y_test值,我们就无法真正知道预测有多好。所以,这个基本的例子和我预期的一样。在

您似乎还试图为x_test创建一个网格,但是当前的代码没有这样做。在这里,x1和{}对于每个位置总是相同的。如果需要网格,请查看np.meshgrid。在

相关问题 更多 >

    热门问题