圆拟合算法学习【1】最小二乘法数据拟合

圆拟合算法学习【1】最小二乘法数据拟合

学过统计学的朋友们应该知道最小二乘法至关重要的地位,目前我的研究方面要对数据进行拟合,具体任务是在平面坐标系中拟合出圆心位置和半径来,首当其冲的想到了这一种方法,因此便把所学内容整理出来和大家分享。

1. 什么是最小二乘?
1805年最小二乘法便被提出,让我们来看看这两百多年前的成果吧。其实该方法用语言表达或者公式表达都很容易理解:
在这里插入图片描述
yi是我们得到的样本组,对于后者可以说是我们拟合的试验品,那么E便是样本和拟合的误差,机器学习中将此描述为损失函数,最小二乘法的思想便是将误差无限缩小使其逼近0。说到底也就是定义了一种判断的法则。
看到这估计会有疑问,这个拟合值是我们一个个试出来的吗?没错,的确是一个个试出来的,但如果我们能规定试的大致方向,最后趋向于收敛到无穷小岂不美哉?目前主流的一些算法,如判断变化大小即求导寻求最佳解(求导后求极值,可以自行推算一下,相当容易),或者说用梯度下降法得到收敛的最优解。下面我简要说明代数法的求解过程:
在这里插入图片描述
这个是一组坐标样本,我们希望以下面的形式拟合出一条直线:
在这里插入图片描述
那么可以得到我们的损失函数为:
在这里插入图片描述
可以看到未知量只有损失函数中的两个参数,我们想要做的便是将这个损失函数的值最小。以两个未知参数作为自变量分别求导:

在这里插入图片描述
在这里插入图片描述
两个方程有两个未知参量因此只有一组解:
圆拟合算法学习【1】最小二乘法数据拟合_第1张图片
到这便完成了该函数的拟合,这也是最基本的最小二乘法拟合的原理。当然大多数时候我们需要进行的矩阵求解,当然原理也近似,写出损失函数在相应求导即可,过程会稍微复杂一些。当然我们也可以看出来对于矩阵中,如果样本量大于特征数的话,例如我举的这个例子如果位置参量多于能求解的函数的话,那么会造成无解。
2. 最小二乘圆拟合的应用
对于圆拟合也是近似的原理,首先建立圆的拟合方程:
在这里插入图片描述
可以化简为:
在这里插入图片描述
我们将通过此方程进行上述的求导运算,后续求得abc后可以自行返回求得圆心和半径,首先要知道样本点到拟合圆心的距离的平方与半径平常的差为:
在这里插入图片描述
我们称此为平方差,进行求导运算需要分别对abc进行求导:
圆拟合算法学习【1】最小二乘法数据拟合_第2张图片
该方程可以看到三个参数三个方程,因此有唯一解,我们用以下参数表示:
圆拟合算法学习【1】最小二乘法数据拟合_第3张图片
那么最终的解为:
圆拟合算法学习【1】最小二乘法数据拟合_第4张图片
我们再换算后得到:
圆拟合算法学习【1】最小二乘法数据拟合_第5张图片
具体的编程也不是很复杂只是量比较大需要仔细敲。
圆拟合算法学习【1】最小二乘法数据拟合_第6张图片
这是自己敲的程序做的圆心拟合,最后输出的结果还不错。相关代码可以私聊我。

3. matlab常用的一些最小二乘函数?
matlab关于最小二乘的相关函数主要包括polyfit、 lsqcurvefit 、lsqnonlin、nlinfit、 regress、 meshgrid 等,可以通过doc或者help函数查看相关原理。由于自己的代码便可获得不错的结果,那么此部分的相关结果不再展示。
关于圆拟合的方案还有很多例如代数逼近法、正交距离回归法以及LM迭代等,日后如果会接触的话我会继续写相关博客,大家一起进步!

参考文献
1.半小时学习最小二乘法
2.最小二乘法小结
3.最小二乘法拟合圆 拟合球 公式推导及matlab实现

你可能感兴趣的:(算法)