前言
当得到10个及以上的以经纬度为坐标的点时 我们往往需要得到其中心点 但大多数算法都是很暴力的直接求算数平均 效果不佳 所以想到了梯度下降法 但是它的难点也是显而易见的 怎么规划步长
算法的核心思想 得到的中心点是与各个点之间的距离和是最小的。
提示 以下是本篇文章正文内容 下面案例可供参考
一、梯度下降法是什么
具体的 请参考这里 作者水平有限 就不多说了
梯度下降算法原理讲解——机器学习_Arrow and Bullet-CSDN博客_梯度下降法
二、使用步骤
1.欧式距离函数
代码函数头如下 示例 由于特殊原因 我不能直接给出源代码 指针用的太垃圾了 容易误导比别人
不过 你们可以参考一下python的源码梯度下降-5463. 服务中心的最佳位置_yangzijiangtou-CSDN博客_服务中心的最佳位置
我的只有步长发生了变化 变成了0.01
double GetSum(double x,double y,double *q[2],int len) //该函数求 x,y 与各个坐标的欧氏距离之和 q[2]存储的就是经纬度坐标 len表示一共有多少个这样的坐标
2.求导函数
double* GetDeri(double x,double y,double *q[2],int len) //参数含义与上同3.梯度下降函数
double* GetMinDistSum(double *q[2],int len) //参数含义与上同 //这里需要说明 要注意浮点数精度的问题 step不断除2 会从0.000001-》0.000000 这时候step 不是0 如果要退出程序 记得和10e-7比较。 //python中求绝对值是abs(),C语言对于浮点数是fabs(),注意哦。三.经纬度数据
[(120.022991,42.332668),(117,40.527075),(120.820795,39.084449),(118.470878,38.303049), (112.5,37.490659),(117.0,37.780937),(110.157332,36.967925),(112.5,36.019736), (114.842668,36.967925),(112.5,39.907371),(112.5,35.255533),(113.779452,36.546141), (115.86597,37.360651),(113.748282,38.376738),(115.150882,39.331714)]
说明 该数据由硕士学问论文中计算得出 下图是该论文封面
总结
以上就是今天要讲的内容 本文仅仅简单介绍了梯度下降法的使用 读者可以对比者python版的 自行写出程序



