代码之家  ›  专栏  ›  技术社区  ›  santobedi

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

  •  0
  • santobedi  · 技术社区  · 7 年前

    我想使用GPR从部署的接入点(AP)预测RSS。由于探地雷达也给出了平均RSS及其方差,所以探地雷达在定位和导航系统中可能非常有用。我阅读了GPR相关的出版期刊,并从理论上了解了GPR。现在,我想用真实数据(RSS)实现它。在我的系统中,输入和相应的输出(观察值)是:

    十、 :二维笛卡尔坐标点

    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? Is kringing suitable for high dimensional regression problems?

    预期(预测)值应类似于 Y .我得到的值非常不同。我想预测RSS的试验台的大小是16*16平方米。我想预测每隔一米的RSS。我假设高斯过程预测器在样本代码中使用高斯下降算法进行训练。我想优化超参数(θ:通过使用 Y 十、 )使用Firefly算法。

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

    请帮我提出您的建议和意见。

    非常感谢你。

    1 回复  |  直到 5 年前
        1
  •  1
  •   BradMcDanel    7 年前

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

    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 为清晰起见。安装总成并预测接通后 x_train ,我们看到该模型完美地预测了训练样本,这可能就是您的意思。我不知道你是否写错了小写 x 我称之为 x_test (而不是大写 X 我称之为 x\U列车 )在问题中。如果我们预测 x\U测试 ,如果没有相应的 y_test 价值观所以,这个基本示例正如我所期望的那样工作。

    还显示您正在尝试为创建网格 x\U测试 ,但是当前代码没有这样做。在这里 x1 x2 对于每个位置都是相同的。如果需要网格,请查看 np.meshgrid