首页 > 解决方案 > 使用 scikit-learn 的 Gaussian Process Regression 时如何使用点的经纬度?

问题描述

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

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

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

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

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

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

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

谢谢任何建议:)

附言。两个纬度/经度点之间的距离可以通过Haversine公式计算,例如计算两个经纬度点之间的距离?(Haversine 公式)

标签: pythonscikit-learngeolocationinterpolation

解决方案


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(((uv)**2).sum()))

我没试过。


推荐阅读