好久没有写Blog了,最近都没有啥好写的。 今天我研究了一下scipy里面的那个最小二乘法的函数的用法,一开始,没弄懂那个函数是怎么调用了,只知道敲进示例程序能用,自己写的程序却报错,后来搜索了一下,看了看别人的代码,搞明白了一点。
首先介绍一下最小二乘法的一个原理吧。最小二乘法是一种数学优化方法,通过最小化误差的平方和寻找最佳的匹配函数。一般常用于曲线的拟合,我最早接触到最小二乘法也是在高中的数学课上用来拟合一次函数曲线。
最小二乘法的基本公式如下: (来自百度百科)
假设一组数据的分布呈线性,我们就可以用一个函数$y=k\times x +b$ 去拟合它,那么那两个系数 k和b怎么求呢?
直接给出公式解: (参考维基百科)
和
其中为t值的算术平均值,也可以解得如下形式:
###示例程序 我用python根据以上算法写了一个简单的一次函数最小二乘法拟合的程序:
##使用scipy提供的最小二乘法函数
以上的方法理解起来也比较容易,不过如果需要拟合的函数不是一次函数,就比较麻烦了。python的科学计算包scipy的里面提供了一个函数,可以求出任意的想要拟合的函数的参数。那就是scipy.optimize包里面的leastsq函数。 函数原型是:
leastsq(func, x0, args=(), Dfun=None, full_output=0, col_deriv=0, ftol=1.49012e-08, xtol=1.49012e-08, gtol=0.0, maxfev=0, epsfcn=0.0, factor=100, diag=None, warning=True)
一般我们只要指定前三个参数就可以了。
func 是我们自己定义的一个计算误差的函数,
x0 是计算的初始参数值
args 是指定func的其他参数
下面用一个示例程序来解释他的用法,同样也是使用上面的求一次函数的拟合参数
看到这里,你应该也能很好的使用scipy提供的leastsq函数做最小二乘法的拟合了吧? 如果你遇到什么问题,或者是我的文中有什么错误,欢迎在文后的评论中指出,谢谢!
本站采用 知识共享署名-非商业性使用-相同方式共享3.0 中国大陆许可协议 进行许可,转载请注明出处。
推荐使用 chrome 浏览器浏览本站。