python最小二乘法
㈠ 怎么用python将图像边界用最小二乘法拟合成曲线
本文实例讲述了Python基于最小二乘法实现曲线拟合。分享给大家供大家参考,具体如下:
这里不手动实现最小二乘,调用scipy库中实现好的相关优化函数。
考虑如下的含有4个参数的函数式:
希望本文所述对大家Python程序设计有所帮助。
㈡ Python中如何使用最小二乘法
##最小二乘法
importnumpyasnp##科学计算库
importscipyassp##在numpy基础上实现的部分算法库
importmatplotlib.pyplotasplt##绘图库
fromscipy.optimizeimportleastsq##引入最小二乘法算法
'''
设置样本数据,真实数据需要在这里处理
'''
##样本数据(Xi,Yi),需要转换成数组(列表)形式
Xi=np.array([6.19,2.51,7.29,7.01,5.7,2.66,3.98,2.5,9.1,4.2])
Yi=np.array([5.25,2.83,6.41,6.71,5.1,4.23,5.05,1.98,10.5,6.3])
'''
设定拟合函数和偏差函数
函数的形状确定过程:
1.先画样本图像
2.根据样本图像大致形状确定函数形式(直线、抛物线、正弦余弦等)
'''
##需要拟合的函数func:指定函数的形状
deffunc(p,x):
k,b=p
returnk*x+b
##偏差函数:x,y都是列表:这里的x,y更上面的Xi,Yi中是一一对应的
deferror(p,x,y):
returnfunc(p,x)-y
'''
主要部分:附带部分说明
1.leastsq函数的返回值tuple,第一个元素是求解结果,第二个是求解的代价值(个人理解)
2.官网的原话(第二个值):
3.实例:Para=>(array([0.61349535,1.79409255]),3)
4.返回值元组中第一个值的数量跟需要求解的参数的数量一致
'''
#k,b的初始值,可以任意设定,经过几次试验,发现p0的值会影响cost的值:Para[1]
p0=[1,20]
#把error函数中除了p0以外的参数打包到args中(使用要求)
Para=leastsq(error,p0,args=(Xi,Yi))
#读取结果
k,b=Para[0]
print("k=",k,"b=",b)
print("cost:"+str(Para[1]))
print("求解的拟合直线为:")
print("y="+str(round(k,2))+"x+"+str(round(b,2)))
'''
绘图,看拟合效果.
matplotlib默认不支持中文,label设置中文的话需要另行设置
如果报错,改成英文就可以
'''
#画样本点
plt.figure(figsize=(8,6))##指定图像比例:8:6
plt.scatter(Xi,Yi,color="green",label="样本数据",linewidth=2)
#画拟合直线
x=np.linspace(0,12,100)##在0-15直接画100个连续点
y=k*x+b##函数式
plt.plot(x,y,color="red",label="拟合直线",linewidth=2)
plt.legend(loc='lowerright')#绘制图例
plt.show()
㈢ Python数据分析要学什么数学
因为不知道所学的数学知识到底有什么用。对于IT公司的研发人员来说,他们在进入大数据相关岗位前,总是觉得要先学点数学,但是茫茫的数学世界,哪里才是数据技术的尽头?一谈到数据技术,很多人首先想到的是数学,大概是因为数字在数学体系中稳固的位置吧,这也是理所当然的。本文对数据技术的数学基础这个问题进行一些探讨。(推荐学习:Python视频教程)
我们知道数学的三大分支,即代数、几何与分析,每个分支随着研究的发展延伸出来很多小分支。在这个数学体系中,与大数据技术有密切关系的数学基础主要有以下几类。(关于这些数学方法在大数据技术中的应用参见《互联网大数据处理技术与应用》一书, 2017,清华大学出版社)
(1)概率论与数理统计
这部分与大数据技术开发的关系非常密切,条件概率、独立性等基本概念、随机变量及其分布、多维随机变量及其分布、方差分析及回归分析、随机过程(特别是Markov)、参数估计、Bayes理论等在大数据建模、挖掘中就很重要。大数据具有天然的高维特征,在高维空间中进行数据模型的设计分析就需要一定的多维随机变量及其分布方面的基础。Bayes定理更是分类器构建的基础之一。除了这些这些基础知识外,条件随机场CRF、隐Markov模型、n-gram等在大数据分析中可用于对词汇、文本的分析,可以用于构建预测分类模型。
当然以概率论为基础的信息论在大数据分析中也有一定作用,比如信息增益、互信息等用于特征分析的方法都是信息论里面的概念。
(2)线性代数
这部分的数学知识与数据技术开发的关系也很密切,矩阵、转置、秩 分块矩阵、向量、正交矩阵、向量空间、特征值与特征向量等在大数据建模、分析中也是常用的技术手段。
在互联网大数据中,许多应用场景的分析对象都可以抽象成为矩阵表示,大量Web页面及其关系、微博用户及其关系、文本集中文本与词汇的关系等等都可以用矩阵表示。比如对于Web页面及其关系用矩阵表示时,矩阵元素就代表了页面a与另一个页面b的关系,这种关系可以是指向关系,1表示a和b之间有超链接,0表示a,b之间没有超链接。着名的PageRank算法就是基于这种矩阵进行页面重要性的量化,并证明其收敛性。
以矩阵为基础的各种运算,如矩阵分解则是分析对象特征提取的途径,因为矩阵代表了某种变换或映射,因此分解后得到的矩阵就代表了分析对象在新空间中的一些新特征。所以,奇异值分解SVD、PCA、NMF、MF等在大数据分析中的应用是很广泛的。
(3)最优化方法
模型学习训练是很多分析挖掘模型用于求解参数的途径,基本问题是:给定一个函数f:A→R,寻找一个元素a0∈A,使得对于所有A中的a,f(a0)≤f(a)(最小化);或者f(a0)≥f(a)(最大化)。优化方法取决于函数的形式,从目前看,最优化方法通常是基于微分、导数的方法,例如梯度下降、爬山法、最小二乘法、共轭分布法等。
(4)离散数学
离散数学的重要性就不言而喻了,它是所有计算机科学分支的基础,自然也是数据技术的重要基础。这里就不展开了。
最后,需要提的是,很多人认为自己数学不好,数据技术开发应用也做不好,其实不然。要想清楚自己在大数据开发应用中充当什么角色。参考以下的大数据技术研究应用的切入点,上述数学知识主要体现在数据挖掘与模型层上,这些数学知识和方法就需要掌握了。
当然其他层次上,使用这些数学方法对于改进算法也是非常有意义的,例如在数据获取层,可以利用概率模型估计爬虫采集页面的价值,从而能做出更好的判断。在大数据计算与存储层,利用矩阵分块计算实现并行计算。
更多Python相关技术文章,请访问Python教程栏目进行学习!以上就是小编分享的关于Python数据分析要学什么数学的详细内容希望对大家有所帮助,更多有关python教程请关注环球青藤其它相关文章!
㈣ 如何用python作空间自回归模型
基本形式
线性模型(linear model)就是试图通过属性的线性组合来进行预测的函数,基本形式如下:
f(x)=wTx+b
许多非线性模型可在线性模型的基础上通过引入层结构或者高维映射(比如核方法)来解决。线性模型有很好的解释性。
线性回归
线性回归要求均方误差最小:
(w∗,b∗)=argmin∑i=1m(f(xi)−yi)2
均方误差有很好的几何意义,它对应了常用的欧式距离(Euclidean distance)。基于均方误差最小化来进行模型求解称为最小二乘法(least square method),线性回归中,最小二乘发就是试图找到一条直线,使得所有样本到直线的欧式距离之和最小。
我们把上式写成矩阵的形式:
w∗=argmin(y−Xw)T(y−Xw)
这里我们把b融合到w中,X中最后再加一列1。为了求最小值,我们对w求导并令其为0:
2XT(Xw−y)=0
当XTX为满秩矩阵(full-rank matrix)时是可逆的。此时:
w=(XTX)−1XTy
令xi=(xi,1),可以得到线性回归模型:
f(xi)=xTi(XTX)−1XTy
㈤ 如何用python实现含有虚拟自变量的回归
参考资料:
DataRobot | Ordinary Least Squares in Python
DataRoboe | Multiple Regression using Statsmodels
AnalyticsVidhya | 7 Types of Regression Techniques you should know!
㈥ 如何应用最小二乘法进行实验曲线拟合
打开Excel,先将数据绘成线性图,然后在图表中添加趋势线,然后勾选:显示公式,就可以拟合出数据的公式了。
㈦ python 有没有最小二乘法回归包
线性回归可以让X 的平均数和Y的平均数落在一条直线上。换句话说,用最小二乘法可以让数据中尽可量多的点落在同一条直线上。详情参照高中数学教科书。
㈧ Python怎么做最优化
一、概观
scipy中的optimize子包中提供了常用的最优化算法函数实现。我们可以直接调用这些函数完成我们的优化问题。optimize中函数最典型的特点就是能够从函数名称上看出是使用了什么算法。下面optimize包中函数的概览:
1.非线性最优化
fmin -- 简单Nelder-Mead算法
fmin_powell -- 改进型Powell法
fmin_bfgs -- 拟Newton法
fmin_cg -- 非线性共轭梯度法
fmin_ncg -- 线性搜索Newton共轭梯度法
leastsq -- 最小二乘
2.有约束的多元函数问题
fmin_l_bfgs_b ---使用L-BFGS-B算法
fmin_tnc ---梯度信息
fmin_cobyla ---线性逼近
fmin_slsqp ---序列最小二乘法
nnls ---解|| Ax - b ||_2 for x>=0
3.全局优化
anneal ---模拟退火算法
brute --强力法
4.标量函数
fminbound
brent
golden
bracket
5.拟合
curve_fit-- 使用非线性最小二乘法拟合
6.标量函数求根
brentq ---classic Brent (1973)
brenth ---A variation on the classic Brent(1980)ridder ---Ridder是提出这个算法的人名
bisect ---二分法
newton ---牛顿法
fixed_point
7.多维函数求根
fsolve ---通用
broyden1 ---Broyden’s first Jacobian approximation.
broyden2 ---Broyden’s second Jacobian approximationnewton_krylov ---Krylov approximation for inverse Jacobiananderson ---extended Anderson mixing
excitingmixing ---tuned diagonal Jacobian approximationlinearmixing ---scalar Jacobian approximationdiagbroyden ---diagonal Broyden Jacobian approximation8.实用函数
line_search ---找到满足强Wolfe的alpha值
check_grad ---通过和前向有限差分逼近比较检查梯度函数的正确性二、实战非线性最优化
fmin完整的调用形式是:
fmin(func, x0, args=(), xtol=0.0001, ftol=0.0001, maxiter=None, maxfun=None, full_output=0, disp=1, retall=0, callback=None)不过我们最常使用的就是前两个参数。一个描述优化问题的函数以及初值。后面的那些参数我们也很容易理解。如果您能用到,请自己研究。下面研究一个最简单的问题,来感受这个函数的使用方法:f(x)=x**2-4*x+8,我们知道,这个函数的最小值是4,在x=2的时候取到。
from scipy.optimize import fmin #引入优化包def myfunc(x):
return x**2-4*x+8 #定义函数
x0 = [1.3] #猜一个初值
xopt = fmin(myfunc, x0) #求解
print xopt #打印结果
运行之后,给出的结果是:
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 16
Function evaluations: 32
[ 2.00001953]
程序准确的计算得出了最小值,不过最小值点并不是严格的2,这应该是由二进制机器编码误差造成的。
除了fmin_ncg必须提供梯度信息外,其他几个函数的调用大同小异,完全类似。我们不妨做一个对比:
from scipy.optimize import fmin,fmin_powell,fmin_bfgs,fmin_cgdef myfunc(x):
return x**2-4*x+8
x0 = [1.3]
xopt1 = fmin(myfunc, x0)
print xopt1
print
xopt2 = fmin_powell(myfunc, x0)
print xopt2
print
xopt3 = fmin_bfgs(myfunc, x0)
print xopt3
print
xopt4 = fmin_cg(myfunc,x0)
print xopt4
给出的结果是:
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 16
Function evaluations: 32
[ 2.00001953]
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 53
1.99999999997
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 12
Gradient evaluations: 4
[ 2.00000001]
Optimization terminated successfully.
Current function value: 4.000000
Iterations: 2
Function evaluations: 15
Gradient evaluations: 5
[ 2.]
我们可以根据给出的消息直观的判断算法的执行情况。每一种算法数学上的问题,请自己看书学习。个人感觉,如果不是纯研究数学的工作,没必要搞清楚那些推导以及定理云云。不过,必须了解每一种算法的优劣以及能力所及。在使用的时候,不妨多种算法都使用一下,看看效果分别如何,同时,还可以互相印证算法失效的问题。
在from scipy.optimize import fmin之后,就可以使用help(fmin)来查看fmin的帮助信息了。帮助信息中没有例子,但是给出了每一个参数的含义说明,这是调用函数时候的最有价值参考。
有源码研究癖好的,或者当你需要改进这些已经实现的算法的时候,可能需要查看optimize中的每种算法的源代码。在这里:https:/ / github. com/scipy/scipy/blob/master/scipy/optimize/optimize.py聪明的你肯定发现了,顺着这个链接往上一级、再往上一级,你会找到scipy的几乎所有源码!