算法总结(一)最小二乘拟合

对于拟合,我们已经见的很多了,对于多项式拟合,我们可以用矩阵的范数去解释,并且可以很好的求解,它好求解的原因在于我们默认多项式的系数只有一次,且相互没有关系,这就是多项式

但是很多时候,我们面对的系统远比多项式复杂,那么一个复杂的非线性系统的拟合如何解释

因为不好写公式,我就口述一下

首先我们面对一个公式,有变量,有系数,我们把这个系数看成我们需要拟合的对象,而在拟合过程中,变量和方程结果均是已知的,被拟合的系数称为参数,我们要做的就是让这个参数在取得某个值的时候,它的拟合值与实际值差别最小,衡量这个差别的大小一般用距离,这个距离有多种定义,一般取向量范数来定义,而向量范数又有很多种,所以一般的我们取二范数,我们的目的就是让这个二范数最小,而这就是最小二乘拟合的字面意思,即least square

我们把所求参数作为变量,表示出距离,很好,这已经形成了一个方程,接下来就是去求取这个方程的极值,这就没那么难了,我们高中就学过了,对函数求导=0,就是极值点,走到这一步,就是要分叉的位置了,如果是一个简单的函数,比如原参数是一阶的,很简单,取二范数求导之后仍是一阶,嗯,一次就解出来了,参数就求出来了

复杂的问题在于我们的参数可能很复杂,比如是一个(exp(a)lna)^2这种系数,真的很麻烦,这是只有一个参数,且很复杂的情况,对于求导=0,我们还是在解方程,复杂方程即超越方程的求解,我们也有方法对付,就是迭代求解,这就是迭代的最小二乘法

那么常见的迭代求解的方法有哪些,我们最常用的是牛顿拉弗森迭代,割线法,加速的割线牛顿拉弗森迭代,嗯,我觉得牛顿拉弗森迭代式比较好理解的,但是这上面不知道该怎么写公式,也是自己都可以轻松写代码的,这就解决了只有一个参数的情况

还有复杂的多参数的情况,相对应的,如果都是简单的一阶,我们可以用高斯消元法来求解,高斯消元法很方便,也可以自己写代码

但是如果是高阶的,这就麻烦了,因为这就相当于要求解非线性方程组。即多个参数求偏导=0形成的矩阵。但是好在,先贤也告诉了我们如何求解非线性方程组

常见的方法有赛德尔法和牛顿法,赛德尔迭代法,就是利用雅可比矩阵进行迭代求解,不过要想收敛是需要一定条件的,牛顿迭代也需要用到雅可比矩阵,两者差异不大

不过,并不是所有迭代的方法都可以收敛,需要满足一定的条件,具体情况具体对待

我自己也有一个疑问,那些函数的导数如何用程序写出来,难道要写个微分函数?求大神支援

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值