使用scikit-learn的高斯过程回归时如何使用点的经纬度?

Posted

技术标签:

【中文标题】使用scikit-learn的高斯过程回归时如何使用点的经纬度?【英文标题】:How to use the latitude/longitude of points when using scikit-learn's Gaussian Process Regression? 【发布时间】:2019-04-19 09:54:20 【问题描述】:

我正在尝试插入一些来自空气监测站的数据。

几乎每条记录都有一个空气质量值及其纬度、经度。但也有一些记录缺乏价值。 例如,数据是这样的:

116° 42° 10
117° 43° missing
120° 20° 1000

我想使用 scikit-learn 的 GPR (GaussianProcessRegressor) 来插入缺失值。

我知道二维数据可以像这个问题的最后一个答案一样处理 Python - Kriging (Gaussian Process) in scikit_learn

我的问题是:我不应该直接使用纬度和经度来完成这项任务,因为地球是一个球体,所以纬度/经度不是通常的 strong> 平面二维网格。

我想问在使用scikit-learn的GPR时如何定义点之间的距离函数,还是我应该将这些纬度/经度点投影到平面并使用它们?我没有尝试过,因为投影过程中的岁差损失让我很难过:(

感谢任何建议:)

ps。两个纬度/经度点之间的距离可以通过Haversine公式计算,如Calculate distance between two latitude-longitude points? (Haversine formula)

【问题讨论】:

使用此 (***.com/questions/43240915/…) 帖子作为指导,我建议您使用测地线包(例如 geolib)来生成测地线来测量您的“未知”点与附近的一些点之间的距离已知点。然后使用反距离插值来预测未知量的值。 感谢您的方法,但我很抱歉 :( 说我必须使用 GPR 或克里金方法,因为它是必需的。这种方法适用于简单的情况。 【参考方案1】:

Variogram() 构造函数有一个参数 dist_func='euclidean'。您可以尝试用自定义的半正弦函数替换欧几里得。

参见 scipy.spatial.distance.pdist

https://docs.scipy.org/doc/scipy/reference/generated/scipy.spatial.distance.pdist.html

dm = pdist(X, lambda u, v: np.sqrt(((u-v)**2).sum()))

我没试过。

【讨论】:

以上是关于使用scikit-learn的高斯过程回归时如何使用点的经纬度?的主要内容,如果未能解决你的问题,请参考以下文章

scikit-learn 中的多输出高斯过程回归

如何为 scikit-learn 的高斯过程回归指定先验?

如何使用 scikit-learn 进行高斯/多项式回归?

高斯过程 scikit-learn - 异常

使用python在高斯过程回归中训练数据集的数据增强

如何在 Scikit-learn 中使用“狄利克雷过程高斯混合模型”? (n_components?)