Python调用最小二乘法

这篇具有很好参考价值的文章主要介绍了Python调用最小二乘法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

所谓线性最小二乘法,可以理解为是解方程的延续,区别在于,当未知量远小于方程数的时候,将得到一个无解的问题。最小二乘法的实质,是保证误差最小的情况下对未知数进行赋值。

最小二乘法是非常经典的算法,而且这个名字我们在高中的时候就已经接触了,属于极其常用的算法。此前曾经写过线性最小二乘法的原理,并用Python实现:最小二乘法及其Python实现;以及scipy中非线性最小二乘法的调用方式:非线性最小二乘法;还有稀疏矩阵的最小二乘法:稀疏矩阵最小二乘法。

下面讲对numpy和scipy中实现的线性最小二乘法进行说明,并比较二者的速度。

numpy实现

numpy中便实现了最小二乘法,即lstsq(a,b)用于求解类似于a@x=b中的x,其中,a M × N M\times N M×N的矩阵;则当b M M M行的向量时,刚好相当于求解线性方程组。对于 A x = b Ax=b Ax=b这样的方程组,如果 A A A是满秩仿真,那么可以表示为 x = A − 1 b x=A^{-1}b x=A1b,否则可以表示为 x = ( A T A ) − 1 A T b x=(A^{T}A)^{-1}A^{T}b x=(ATA)1ATb

b M × K M\times K M×K的矩阵时,则对每一列,都会计算一组x

其返回值共有4个,分别是拟合得到的x、拟合误差、矩阵a的秩、以及矩阵a的单值形式。

import numpy as np
np.random.seed(42)
M = np.random.rand(4,4)
x = np.arange(4)
y = M@x
xhat = np.linalg.lstsq(M,y)
print(xhat[0])
#[0. 1. 2. 3.]

scipy封装

scipy.linalg同样提供了最小二乘法函数,函数名同样是lstsq,其参数列表为

lstsq(a, b, cond=None, overwrite_a=False, overwrite_b=False, check_finite=True, lapack_driver=None)

其中a, b A x = b Ax=b Ax=b,二者均提供可覆写开关,设为True可以节省运行时间,此外,函数也支持有限性检查,这是linalg中许多函数都具备的选项。其返回值与numpy中的最小二乘函数相同。

cond为浮点型参数,表示奇异值阈值,当奇异值小于cond时将舍弃。

lapack_driver为字符串选项,表示选用何种LAPACK中的算法引擎,可选**‘gelsd’**, ‘gelsy’, ‘gelss’

import scipy.linalg as sl
xhat1 = sl.lstsq(M, y)
print(xhat1[0])
# [0. 1. 2. 3.]

速度对比

最后,对着两组最小二乘函数做一个速度上的对比

from timeit import timeit
N = 100
A = np.random.rand(N,N)
b = np.arange(N)

timeit(lambda:np.linalg.lstsq(A, b), number=10)
# 0.015487500000745058
timeit(lambda:sl.lstsq(A, b), number=10)
# 0.011151800004881807

这一次,二者并没有拉开太大的差距,即使将矩阵维度放大到500,二者也是半斤八两。文章来源地址https://www.toymoban.com/news/detail-427456.html

N = 500
A = np.random.rand(N,N)
b = np.arange(N)

timeit(lambda:np.linalg.lstsq(A, b), number=10)
0.389679799991427
timeit(lambda:sl.lstsq(A, b), number=10)
0.35642060000100173

到了这里,关于Python调用最小二乘法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • chatgpt赋能python:Python如何拟合直线:使用最小二乘法

    在数据分析和机器学习领域,拟合一个最佳的直线是很常见和有用的。Python中有很多库可以拟合直线,但最小二乘法是其中最常用的一种方法。在本文中,我们将介绍最小二乘法的原理和如何在Python中实现。 最小二乘法是一种常用的回归分析方法,目的是找到一条直线来拟合

    2024年02月08日
    浏览(44)
  • Python实现递归最小二乘法回归模型(RecursiveLS算法)项目实战

    说明:这是一个机器学习实战项目(附带 数据+代码+文档+视频讲解 ),如需 数据+代码+文档+视频讲解 可以直接到文章最后获取。 RLS主要是在误差平方和最小的原则基础上, 提出一种解析的拟合模型参数的迭代递推公式;可以实现在新的样本数据到来时, 利用新的样本数据以及

    2024年01月16日
    浏览(46)
  • 线性代数Python计算:线性方程组的最小二乘解

    给定ℝ上无解线性方程组 A x = b boldsymbol{Ax}=boldsymbol{b} Ax = b ,构造 A T A boldsymbol{A}^text{T}boldsymbol{A} A T A 及 A T b boldsymbol{A}^text{T}boldsymbol{b} A T b ,然后调用博文《线性方程组的通解》定义的mySolve函数,解方程组 A T A x = A T b boldsymbol{A}^text{T}boldsymbol{Ax}=boldsymbol{A}^text{T

    2023年04月08日
    浏览(49)
  • 矩阵最小二乘法问题求解

    超定方程组是指方程个数大于未知量个数的方程组。对于方程组 A x = b Ax=b A x = b , A A A 为n×m矩阵,如果R列满秩,且nm。则方程组没有精确解,此时称方程组为超定方程组。 在实验数据处理和曲线拟合问题中,求解超定方程组非常普遍。比较常用的方法是 最小二乘法 。 如果

    2024年02月05日
    浏览(29)
  • 最小二乘法的矩阵表达

    1 前期准备 为了方便表述,我们先做一些很简单的定义: 假设有一多项式函数: f ( x 1 , x 2 , ⋯   , x m ) = ∑ i = 1 m a i x i f( x_1,x_2,cdots ,x_m) =sum_{i=1}^m{a_ix_i} f ( x 1 ​ , x 2 ​ , ⋯ , x m ​ ) = i = 1 ∑ m ​ a i ​ x i ​ 我们将函数中的自变量都提取出来组成一个列向量 x x x : x

    2023年04月20日
    浏览(37)
  • 拟合算法之最小二乘法

    与插值问题不同,在拟合问题中不需要曲线一定经过给定的点。拟合问题的目标是追求一个函数(曲线),使得该曲线在某种准测下与所有的数据点最为接近,即曲线拟合最好(最小化损失函数)。 插值算法中,得到的多项式f(x)要经过所有的样本点。但是如果样本点太多,

    2024年02月04日
    浏览(42)
  • 最小二乘法公式

    最小二乘法我不需要理解他的本质,只需要会使用这个公式即可: 最小二乘法是求解拟合直线的。注意!!是直线 设直线的方程为 y=bx+a 则以上公式就是用一堆二维平面上的点,来求拟合的直线 其中   为求和符号     如 的意思是   求xi的平方的和    为期望,即平均值

    2024年02月11日
    浏览(38)
  • 最小二乘法工程实践

    最小二乘法是一种在误差估计、不确定度、系统辨识及预测、预报等数据处理诸多学科领域得到广泛应用的数学工具 。最小二乘法是一种机器学习算法。 关于其原理的介绍以及公式推导有很多优质资料,比如我学习最小二乘法时的两个视频课程。本文不再介绍原理,而是介

    2024年02月03日
    浏览(33)
  • 一文理清最小二乘法估计

    1.1 原理与推导 最小二乘法最早是高斯在预估星体轨道时提出来的,后来成为了估计理论的奠基石。考虑如下CAR模型: 其中:    参数估计的任务就是根据输入和输出,估计出a1,a2,----,ana,b1,b2,...,bnb这na+nb+1个参数。 将1-1式改成差分方程形式:  对于L组输入{y(k),u(k),k=1,2,...,L},

    2024年02月09日
    浏览(34)
  • 利用最小二乘法求解相机投影矩阵

    1、相机成像几何模型的建立 为了得到三维空间物体表面某点的几何位置与其所在二维平面图像中对应点之间的相关关系,需要建立相机成像的几何模型。 为了建立几何模型,首先需要构建几个重要的坐标系: 世界坐标系(World Coordinate):在环境中建立的三维坐标系,用来

    2024年02月05日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包