python - 使用 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 公式)
解决方案
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()))
我没试过。
推荐阅读
- r - R中是否有代码可以更改ggboxplot中的x轴?
- python - 如何解决 TypeError:“NoneType”类型的对象没有 len()
- python - 使用 QTableView 和 QSelectionModel 选择日历样式
- html - 尝试使用 css 隐藏弹出窗口
- python - wget 不是内部或外部命令、可运行程序或批处理文件
- mongodb - MongoDB 触发器重新驱动
- swift - 使用工具栏向上移动工具栏
- python - 难以理解“分配前引用的局部变量”
- .net-core - 如何使用 brew 分发 .NET Core 控制台应用程序
- ruby-on-rails - 使用 rails generate 创建一个控制器会导致一个奇怪的错误