

【最小二乘估计】scipy.optimize.leastsq
source link: https://www.guofei.site/2017/06/06/scipyleastsq.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

【最小二乘估计】scipy.optimize.leastsq
2017年06月06日Author: Guofei
文章归类: 5-6-最优化 ,文章编号: 7301
版权声明:本文作者是郭飞。转载随意,但需要标明原文链接,并通知本人
原文链接:https://www.guofei.site/2017/06/06/scipyleastsq.html
常见的曲线拟合
趋势模型里写了趋势模型中常用的10种曲线
这里是曲线拟合种常用的曲线
- Polynomial Models
y=∑i=1npixiy=∑i=1npixi - Exponential Models
y=aebx,y=aebx+cedxy=aebx,y=aebx+cedx - Fourier Series y=a+∑i=1naicos(nwx)+bisin(nwx)y=a+∑i=1naicos(nwx)+bisin(nwx)
- Gaussian Models
y=∑i=1naiexp(−(x−bici)2)y=∑i=1naiexp(−(x−bici)2) - Power Series
y=axb,y=a+bxcy=axb,y=a+bxc - Rational Polynomials
y=∑i=1npixi∑i=1nqixiy=∑i=1npixi∑i=1nqixi - Sum of Sines Models y=a+∑i=1naisin(nwx)y=a+∑i=1naisin(nwx)
- Weibull Distributions
y=abxb−1e−axby=abxb−1e−axb
widely used in reliability and life (failure rate) data analysis
leastsq
最小二乘估计原理是这样的:
y=f(x,θ)+εy=f(x,θ)+ε,
其中εε独立同分布。
θ=argmin∑(yi−f(xi,θ))2θ=argmin∑(yi−f(xi,θ))2
非线性最小二乘法中,SST=SSR+SSE不再成立,但仍然可以定义R_squared=1-SSE/SST
leastsq可以用来做最小二乘估计,可以在线性拟合和非线性拟合中使用。
线性拟合案例
step1:生成模拟的源数据
import numpy as np
from scipy.optimize import leastsq
# 生成模拟数据
X=np.linspace(10,40,1000)
Y=0.8*X+2.1+np.random.normal(loc=0,scale=1,size=[1,1000])[0]
step2:定义残差并寻优
def residuals(p):
k,b=p
return Y-(k*X+b)
r=leastsq(residuals,[1,0])#[1,0]为初始值
k,b=r[0]
k,b
step3:计算误差
def S(k,b):
error=np.zeros(k.shape)
for x,y in zip(X,Y):
error+=(y-(k*x+b))**2
return error
S(k,b)
综合案例
step1:定义几个目标函数,准备一一检验其拟合效果
import numpy as np
def test_func1(x,p):
a,b=p
return a*x+b
def test_func2(x,p):
A,k,theta=p#这是一个编程技巧,虽然冗余了一行,但是可读性极大提高
return A*np.sin(2*np.pi*k*x+theta)
def test_func3(x,p):
a,b,c=p
return a*x**2+b*x+c
step2:定义目标函数和残差函数
p_true=[0.4,-2,0.9]#真实值
# 目标函数
def obj_func(x,p):
return test_func3(x,p)
# 残差
def residuals(p,y,x):
return y-obj_func(x,p)
step3:生成模拟数据
X=np.linspace(0,10,1000)
y=obj_func(X,p_true)+np.random.randn(len(X))
step4:拟合
from scipy.optimize import leastsq
p_prior=np.ones_like(p_true)# 先验的估计,真实数据分析流程中,先预估一个接近的值。这里为了测试效果,先验设定为1
plsq=leastsq(residuals,p_prior,args=(y,X))
print(p_true)
print(plsq)
step5:画图
import matplotlib.pyplot as plt
plt.plot(X,y)
plt.plot(X,obj_func(X,plsq[0]))
plt.show()
下面这3个目标函数拟合效果的展示:
您的支持将鼓励我继续创作!
Recommend
-
72
一. 信息推断我们经常会遇到一类问题:我们需要根据观察到的某个或多个现象推测出现象背后的原因或根源。例如古人的`一叶落知天下秋’,就是看到落叶而推测出落叶背后的原因(秋天到了)。 在实际中,也会碰到很多这样的例子。你去菜市场挑西瓜...
-
47
一幅封面插画偶然间我看到下图中的插画(下图) 一下子想起很多事情, 记得有次需要求解某个椭圆前后位置的旋转角, 已知了椭球边上点的坐标,于是我就想: 我用最小二乘不就可以得到椭圆的长轴了吗, 然后再由最小二乘拟…
-
40
PaperWeekly ...
-
49
算法为王系列文章,涵盖了计算机算法,数据挖掘(机器学习)算法,统计算法,金融算法等的多种跨学科算法组合。在大数据时代的背景下,算法已经成为了金字塔顶的明星。一个好的算法可以创造一个伟大帝国,就像Google。 算法为王的...
-
9
用偏最小二乘求解结构方程模型基本属于鬼扯 谢益辉 / 2008-09-04 这篇日志的数学理论参见朱利平和刘莉 2005 年的一篇论文《线性结构方程参数估计的一种简单方法》,载于《应用概率统计》。 偏最小二乘法(Partial Least Sq...
-
6
主成分回归与偏最小二乘回归 谢益辉 / 2008-09-26 我一直都觉得主成分回归(Principle Component Regression,PCR)是很奇怪的方法,原因是主成分分析仅仅与自变量有关,为什么用自变量自身的协方差结构做出来的成分(Principle Co...
-
7
新闻动态 COS 每周精选: 最小二乘从娃娃抓起 关键词:
-
11
假设我们有一组观测值: y0―=[y01...y0i...y0m]∈Rm 观测值之间相互独立。 我们想从中估算出一组未知参数: x―=[x1...xi...xn]∈Rn(n≤m for redundancy) 最小二乘估计(Least Squares Estimation)
-
3
LS Approximation(Least-squares)Question: 给定N个点.希望得到能近似出点处的值。误差函数为。那么得到最小化问题:取自,d维空间上为total degree为m的多项式空间,则可以写作:
-
5
旭穹の陋室非线性最小二乘 [1]: GetStart发表于2022-07-13|更新于...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK