使用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的高斯过程回归时如何使用点的经纬度?的主要内容,如果未能解决你的问题,请参考以下文章