Numpy.linalg模块的lstsq()进行线性回归拟合(数学建模)

2023-11-10

  1. 建模中经常使用线性最小二乘法,实际上就是求超定线性方程组(未知数少,方程个数多)的最小二乘解,前面已经使用pinv()求超定线性方程组的最小二乘解.下面再举两个求最小二乘解的例子,并使用numpy.linalg模块的lstsq()函数 求解.

  2. 先要明确这个函数的原义是用来求超定线性方程组的:
    例如下面的方程组:


在这里插入图片描述

系数矩阵的第一列相当于给定了x的观测值 X=[0,1,2,3].transpose

右边的结果矩阵相当于给定了y的观测值 Y=[-1,0.2,0.9,2.1].transpose

然后使用两个观测值来拟合经验函数 y=mx+c

系数矩阵的第二列存在的意义有点类似于机器学习中的偏置θ0,用于和C相乘,注意这是必要的,在只给定观测值的情况下,我们也常常需要np.ones_like(X的长度来构建有这一“无效列”的矩阵.

  1. **lstsq(a,b,rcond=“warn”)**函数的参数详解(下面的矩阵都是array_like(类数组对象)):
    1. a是一个M行N列的系数矩阵,前面说过需要构造np.ones_like(M)
    2. b是一个(M,)或者(M,K),如果b是一个M行K列的二维矩阵,函数会逐个计算每一列的最小二乘法
    3. rcond这个参数是可选的,是用于奇异矩阵的处理的,感兴趣的可以自行查看源码,官方推荐我们一般用 rcond=None

返回值:以下提到的所有矩阵都是ndarray, NumPy 最重要的一个特点是其 N 维数组对象 ndarray,它是一系列同类型数据的集合,以 0 下标为开始进行集合中元素的索引):

  1. x : {(N,), (N, K)} ndarray (我们所要的结果,如果前面的b是二维的,那么这里也会有k列的a和b结果)

  2. residuals : {(1,), (K,), (0,)} ndarray

  3. rank: int

  4. a 的奇异值

    返回值重点关注返回集合中的x就行,所以我们一般的用法是lstsq()[0]

    官方的使用栗子

        Examples
        --------
        Fit a line, ``y = mx + c``, through some noisy data-points:
    
        >>> x = np.array([0, 1, 2, 3])
        >>> y = np.array([-1, 0.2, 0.9, 2.1])
    
        By examining the coefficients, we see that the line should have a
        gradient of roughly 1 and cut the y-axis at, more or less, -1.
    
        We can rewrite the line equation as ``y = Ap``, where ``A = [[x 1]]``
        and ``p = [[m], [c]]``.  Now use `lstsq` to solve for `p`:
    
        >>> A = np.vstack([x, np.ones(len(x))]).T
        >>> A
        array([[ 0.,  1.],
               [ 1.,  1.],
               [ 2.,  1.],
               [ 3.,  1.]])
    
        >>> m, c = np.linalg.lstsq(A, y, rcond=None)[0]
        >>> print(m, c)
        1.0 -0.95
    
        Plot the data along with the fitted line:
    
        >>> import matplotlib.pyplot as plt
        >>> plt.plot(x, y, 'o', label='Original data', markersize=10)
        >>> plt.plot(x, m*x + c, 'r', label='Fitted line')
        >>> plt.legend()
        >>> plt.show()
    
    1. 下面举个栗子:
      给定一组实验数据

      0 27.
      1 26.8
      2 26.5
      3 26.3
      4 26.1
      5 25.7
      6 25.3
      24.8

      我们来进行一元线性拟合 y=at+b

      import numpy as np
      import numpy.linalg as LA
      import matplotlib.pyplot as plt
      t=np.arange(8)
      y=np.array([27.0,26.8,26.5,26.3,26.1,25.7,25.3,24.8])
      A=np.c_[t, np.ones_like(t)]
      print(np.ones_like(t))
      ab=LA.lstsq(A,y,rcond=None)[0]
      print(ab);
      plt.rc('font',size=16)
      plt.plot(t,y,'o',label='Original data',markersize=5)
      plt.plot(t,A.dot(ab),'r',label="Fitted line")
      plt.legend();
      plt.show();
      

在这里插入图片描述

      **感兴趣的可以自己运行试试看**
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Numpy.linalg模块的lstsq()进行线性回归拟合(数学建模) 的相关文章

  • InterfaceError:连接已关闭(使用 django + celery + Scrapy)

    当我在 Celery 任务中使用 Scrapy 解析函数 有时可能需要 10 分钟 时 我得到了这个信息 我用 姜戈 1 6 5 django celery 3 1 16 芹菜 3 1 16 psycopg2 2 5 5 我也使用了psyc
  • 使用 openCV 对图像中的子图像进行通用检测

    免责声明 我是计算机视觉菜鸟 我看过很多关于如何在较大图像中查找特定子图像的堆栈溢出帖子 我的用例有点不同 因为我不希望它是具体的 而且我不确定如何做到这一点 如果可能的话 但我感觉应该如此 我有大量图像数据集 有时 其中一些图像是数据集的
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 如何打印没有类型的defaultdict变量?

    在下面的代码中 from collections import defaultdict confusion proba dict defaultdict float for i in xrange 10 confusion proba di
  • 更改自动插入 tkinter 小部件的文本颜色

    我有一个文本框小部件 其中插入了三条消息 一条是开始消息 一条是结束消息 一条是在 单位 被摧毁时发出警报的消息 我希望开始和结束消息是黑色的 但被毁坏的消息 参见我在代码中评论的位置 插入小部件时颜色为红色 我不太确定如何去做这件事 我看
  • Python 多处理示例不起作用

    我正在尝试学习如何使用multiprocessing但我无法让它发挥作用 这是代码文档 http docs python org 2 library multiprocessing html from multiprocessing imp
  • 如何等到 Excel 计算公式后再继续 win32com

    我有一个 win32com Python 脚本 它将多个 Excel 文件合并到电子表格中并将其另存为 PDF 现在的工作原理是输出几乎都是 NAME 因为文件是在计算 Excel 文件内容之前输出的 这可能需要一分钟 如何强制工作簿计算值
  • 打破嵌套循环[重复]

    这个问题在这里已经有答案了 有没有比抛出异常更简单的方法来打破嵌套循环 在Perl https en wikipedia org wiki Perl 您可以为每个循环指定标签 并且至少继续一个外循环 for x in range 10 fo
  • __del__ 真的是析构函数吗?

    我主要用 C 做事情 其中 析构函数方法实际上是为了销毁所获取的资源 最近我开始使用python 这真的很有趣而且很棒 我开始了解到它有像java一样的GC 因此 没有过分强调对象所有权 构造和销毁 据我所知 init 方法对我来说在 py
  • 运行多个 scrapy 蜘蛛的正确方法

    我只是尝试使用在同一进程中运行多个蜘蛛新的 scrapy 文档 http doc scrapy org en 1 0 topics practices html但我得到 AttributeError CrawlerProcess objec
  • 使用 Pycharm 在 Windows 下启动应用程序时出现 UnicodeDecodeError

    问题是当我尝试启动应用程序 app py 时 我收到以下错误 UnicodeDecodeError utf 8 编解码器无法解码位置 5 中的字节 0xb3 起始字节无效 整个文件app py coding utf 8 from flask
  • Python:字符串不会转换为浮点数[重复]

    这个问题在这里已经有答案了 我几个小时前写了这个程序 while True print What would you like me to double line raw input gt if line done break else f
  • 使用 OpenPyXL 迭代工作表和单元格,并使用包含的字符串更新单元格[重复]

    这个问题在这里已经有答案了 我想使用 OpenPyXL 来搜索工作簿 但我遇到了一些问题 希望有人可以帮助解决 以下是一些障碍 待办事项 我的工作表和单元格数量未知 我想搜索工作簿并将工作表名称放入数组中 我想循环遍历每个数组项并搜索包含特
  • 通过数据框与函数进行交互

    如果我有这样的日期框架 氮 EG 00 04 NEG 04 08 NEG 08 12 NEG 12 16 NEG 16 20 NEG 20 24 datum von 2017 10 12 21 69 15 36 0 87 1 42 0 76
  • 从 pygame 获取 numpy 数组

    我想通过 python 访问我的网络摄像头 不幸的是 由于网络摄像头的原因 openCV 无法工作 Pygame camera 使用以下代码就像魅力一样 from pygame import camera display camera in
  • Nuitka 未使用 nuitka --recurse-all hello.py [错误] 编译 exe

    我正在尝试通过 nuitka 创建一个简单的 exe 这样我就可以在我的笔记本电脑上运行它 而无需安装 Python 我在 Windows 10 上并使用 Anaconda Python 3 我输入 nuitka recurse all h
  • 从 Python 中的类元信息对 __init__ 函数进行类型提示

    我想做的是复制什么SQLAlchemy确实 以其DeclarativeMeta班级 有了这段代码 from sqlalchemy import Column Integer String from sqlalchemy ext declar
  • 使用基于正则表达式的部分匹配来选择 Pandas 数据帧的子数据帧

    我有一个 Pandas 数据框 它有两列 一列 进程参数 列 包含字符串 另一列 值 列 包含相应的浮点值 我需要过滤出部分匹配列 过程参数 中的一组键的子数据帧 并提取与这些键匹配的数据帧的两列 df pd DataFrame Proce
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • Pandas 与 Numpy 数据帧

    看这几行代码 df2 df copy df2 1 df 1 df 1 values 1 df2 ix 0 0 我们的教练说我们需要使用 values属性来访问底层的 numpy 数组 否则我们的代码将无法工作 我知道 pandas Data

随机推荐

  • linux list 类型,Redis数据类型之List类型

    List类型及操作 List是一个链表结构 主要功能是push pop 获取一个范围的所有值等等 操作中key理解为链表名字 Redis的list类型其实就是一个每个子元素都是string类型的双向链表 我们可以通过push pop操作从链
  • java中HashSet的使用详解

    http jingyan baidu com article 48206aead61355216bd6b34a html 一 添加方法 1 add value 方法 可以向set中添加一个元素 注意 set中不能存储重复的元素 可以存储nu
  • C# VS2012操作word文档 (二).插入表格图片

    在上一篇文章 C VS2012创建word文档 一 中我们讲述了如何使用VS2012引用COM中Miscrosoft Word 14 0 Object Library实现创建文档 而这篇文章将讲述如何添加表格和图片 因为我在C 联系数据库做
  • 用c语言编写的经典程序,c语言入门的经典程序

    c语言入门的经典程序 对于C语言的初学者来说 有哪些经典程序需要学习的那么 下面小编为大家带来了c语言入门的经典程序 欢迎大家阅读 c语言入门的经典程序 1 输出 9 9 口诀 共 9 行 9 列 i 控制行 j 控制列 include s
  • 从0开始学Python(2)

    前言 还在被优先级搞得焦头烂额吗 还在为python中众多运算符傻傻分不清楚而困惑吗 在这里将会对python中的运算符进行深度刨析 为你解惑 这里是目录 前言 还在被优先级搞得焦头烂额吗 还在为python中众多运算符傻傻分不清楚而困惑吗
  • show profile和全局查询日志

    文章目录 1 show profile 2 全局查询日志 1 show profile show profile是MySQL提供可以用来分析当前会话中语句执行的资源消耗情况 可以用于SQL的调优的测量 默认情况下 参数处于关闭状态 并保存最
  • java.io.FileNotFoundException异常的问题

    这个异常抛出的两种情况 1 拒绝访问 2 系统找不到指定的路径 在构造一个File对象时 指定的文件路径是什么都可以 就算不存在也能够构造File对象 但是现在你要对文件进行输入和输出操作的时候 也就是InputStream和OutputS
  • 论用C语言写一个PE解释器(3)

    论用C语言写一个PE解释器 3 前情提要 在上一篇文章里 我们提到了PE解释器的基本执行流程 但是还有很多细节的部分没有提到 而我们现在就来完善这些细节 一 关于解释文件用的指针 可能在上篇文章中 有读者会有疑问 可不可以用FILE文件指针
  • java中交换机的作用_在Java交换机中声明和初始化变量

    问题 我有一个关于Java交换机的疯狂问题 int key 2 switch key case 1 int value 1 break case 2 value 2 System out println value break defaul
  • 简单实用Python程序

    描述 此为遍历一个文件夹里面的所有 py文件并将文件名输出到txt文件 import os import os path import re rootdir D dpkt master dpkt fileTest open r D file
  • Nhibernate使用HQL返回自定义类型

    摘要 使用HQL返回自定义类型的结果集 前提 已经定义好Customer类及其Nhibernate映射文件xml 表结构及数据 自定义类 Mapping文件 条件查询 Criteria Query public IList
  • Python进阶-----高阶函数zip() 函数

    目录 前言 zip 函数简介 运作过程 应用实例 1 有序序列结合 2 无序序列结合 3 长度不统一的情况 前言 家人们 看到标题应该都不陌生了吧 我们都知道压缩包文件的后缀就是zip的 当然还有rar等类型 在Python中也有这么一个函
  • remote: Support for password authentication was removed on August 13, 2021. Please use a personal ac

    一 问题描述 访问了全球最大的同性交友网站 又刚好去更新提交代码 又或你创建了一个新的仓库送给自己 又刚好想把这个仓库送给 push github 你就刚好会遇到这个问题 remote Support for password authen
  • Web菜鸟入门教程 - Springboot接入认证授权模块

    网络安全的重要性不言而喻 如今早已不是以前随便弄个http请求就能爬到数据的时代 而作为一个架构师 网络安全必须在产品开发之初就考虑好 因为在产品开发的后期 一方面是客户增多 压力变大 可供利用的时间也会变少 另一方面 随着时间的推移 项目
  • 归并排序的思想

    归并排序是一种基于分治思想的经典排序算法 它将待排序的数组分成两个部分 然后递归地对这两个部分进行排序 最后再将排序好的两个部分归并成一个有序的数组 具体实现过程如下 1 将待排序数组不断二分 直到只剩下一个元素 此时该元素就是有序的 2
  • C语言基础(十二)- 数据结构概览

    相关术语 数据 类 数据对象 集合 数据元素 类对象 数据项 属性 什么是数据结构 概念 相互之间存在一种或多种特定关系的数据元素 类对象 的集合 数据结构包括 数据的逻辑结构 数学形式 集合结构 线性结构 1 1 树形结构 1 n 图形结
  • ORA-28009:connection as SYS should be as SYSDBA OR SYSOPER

    1 美图 1 背景 Navicate链接ORACLE报错 ORA 28009 connection as SYS should be as SYSDBA OR SYSOPER 直接链接报错 ORA 28009 connection as S
  • elasticsearch启动报错解决 问题集分析

    elasticsearch解决启动报错问题集 ps 别问我为什么知道这么多报错 我就是从安装到启动 一步一步按着下面报错顺序踩坑的 气死了 希望能帮到入门的你 1 内存报错 报错信息 Java HotSpot TM 64 Bit Serve
  • Hadoop实战实例

    分享一下我老师大神的人工智能教程 零基础 通俗易懂 http blog csdn net jiangjunshow 也欢迎大家转载本篇文章 分享知识 造福人民 实现我们中华民族伟大复兴 Hadoop实战实例 Hadoop是Google Ma
  • Numpy.linalg模块的lstsq()进行线性回归拟合(数学建模)

    建模中经常使用线性最小二乘法 实际上就是求超定线性方程组 未知数少 方程个数多 的最小二乘解 前面已经使用pinv 求超定线性方程组的最小二乘解 下面再举两个求最小二乘解的例子 并使用numpy linalg模块的lstsq 函数 求解 先