利用机器学习算法,高效分析地图数据中位置的距离关系

利用机器学习算法中sklean库中KNN、高效分析地图位置点的关系。其中KNN模块中主要使用ball-tree数据结构模型,提高运算效率完成各类距离关系分析。k-近邻算法的核心思想是未标记样本的类别,由距离其最近的k个邻居投票决定。一、计算经纬度间的距离1、计算任意两个点的距离2、计算numpy数组的距离。二、计算距离m内个所有的点。三、查找n个最近的点...
摘要由CSDN通过智能技术生成


利用机器学习算法中sklean库中KNN、高效分析地图位置点的关系。其中KNN模块中主要使用ball-tree数据结构模型,提高运算效率完成各类距离关系分析。k-近邻算法的核心思想是未标记样本的类别,由距离其最近的k个邻居投票决定。

一、计算经纬度间的距离

经纬度计算有测地距离、大圆距离和欧几里得距离,其中测地距离使用地球椭圆模型,大圆距离使用地球未圆形模型、欧几里得直接计算两点间直线距离,精度依次降低但是(随着计算复杂度降低)运算速度依次增加。Geopy可以用 geodesic distance 或 great-circle distance ,默认测地线距离作为函数

geopy.distance.distance
geodesic distance 地表两点之间的最短路径的距离。 有许多类型的椭球体模型,哪一个模型最精确取决于你的点在地球上的位置。默认值是WGS-84椭球体,它是全局最精确的。geopy还包括 distance.ELLIPSOIDS 字典: model major (km) minor (km) flattening ELLIPSOIDS = {‘WGS-84’: (6378.137, 6356.7523142, 1 / 298.257223563), ‘GRS-80’: (6378.137, 6356.7523141, 1 / 298.257222101), ‘Airy (1830)’: (6377.563396, 6356.256909, 1 / 299.3249646), ‘Intl 1924’: (6378.388, 6356.911946, 1 / 297.0), ‘Clarke (1880)’: (6378.249145, 6356.51486955, 1 / 293.465), ‘GRS-67’: (6378.1600, 6356.774719, 1 / 298.25), }

大圆距离( great_circle )使用地球的球形模型,使用国际大地测量学和地球物理学联合会定义的平均地球半径,(2)a + b) /3=6371.0087714150598公里,约6371.009公里(WGS-84),误差高达0.5%。半径值存储在 distance.EARTH_RADIUS ,因此可以对其进行自定义(但是,它应该始终以公里为单位)。

欧几里得距离 使用scipy通过numpy可以高效计算欧几里得距离。

from scipy.spatial.distance import cdist
    lonlat1=data_lonlat_1[['lat_1','lon_1']]
    lonlat2=data_lonlat_2[['lat_2','lon_2']]
    distance=cdist(lonlat1,lonlat2,metric='euclidean')

1、计算任意两个点的距离

利用Geopy库计算测地距离,地球模型使用默认值WGS-84椭球体。语句d=distance.distance(old, new).m 的m(代表米)可以改为km。

def dis_N(xlon,xlat,ylon,ylat):
    old=(xlat,xlon)
    new=(ylat,ylon)
    d=distance.distance(old, new).m
    s=round(float(d),2)
    return s

2、计算numpy数组的距离。

注意事项:

1、Geopy库的经纬度输入先lat后lon,为了适配数据源中最常见的 经度—纬度 数据结构调整了输入元组中的顺序为 old=(o[1],o[0])。

2、为了适配机器学习中常用的numpy数据,通过以下数据转化数据格式

data_jwd=data[[“经度”,“纬度”]]
#转为numpy 数组
data_p = data_jwd.values
距离函数

def disN(o,n):
    # Geopy库先lat后lon
    old=(o[1],o[0])
    new=(n[1],n[0])
    d=distance.distance(old, new).m
    s=round(float(d),2)
    return s

二、计算距离m内个所有的点。

代码如下

import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import NearestNeighbors
from geopy import distance
pd.options.mode.chained_assignment = None
plt.rcParams['font.sans-serif'] = ['SimHei']
plt.rcParams['axes.unicode_minus'] = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

风暴之零

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值