草庐IT

numpy.linalg.lstsq()详解以及用法示例

三度的冰可乐 2023-08-15 原文

详解

将最小二乘解返回到线性矩阵方程。

计算近似求解方程的向量x。
该方程可能未确定、良好或过度确定(即,线性独立行数可以小于、等于或大于其线性独立列数)。
如果a是平方且为全秩,则x(但对于舍入误差)是等式的"精确"解。否则,x最小化欧几里得 2 范数 。
如果有多个最小化解,则返回具有最小 2 范数的解。

参数
a:(M, N) array_like
"系数"矩阵。

b:{(M,), (M, K)} array_like
纵坐标或"因变量"值。如果b是二维的,则为b的每个K列计算最小二乘解。

rcond:float, 可选
小奇异值的截止比。出于秩确定的目的,如果奇异值小于rcond乘以的最大奇异值,则将其视为零。

在1.14.0版中更改:如果未设置,则给出未来警告。以前的默认值将使用机器精度作为rcond参数,新的默认值将使用机器精度时间max(M, N)。要使警告静音并使用新的默认值,请使用 ,若要继续使用旧行为,请使用 。
-1rcond=Nonercond=-1

返回
x:{(N,), (N, K)} ndarray
最小二乘解。如果b是二维的,则解位于x的K列中。

残差:{(1,), (K,), (0,)} ndarray
残差平方和:中每列的欧几里得 2 范数平方。如果a的秩< N 或 M <= N,则这是一个空数组。如果b是一维的,则这是一个 (1,) 形状数组。否则,形状为 (K,)。b - a @ x

秩:int
矩阵的秩a.

s:(min(M, N),) ndarray
的奇异值。

用法示例

首先定义x,y

x = np.array([0, 1, 2, 3])
y = np.array([-1, 0.2, 0.9, 2.1])

我们可以理解为4个点的x,y坐标已经给出,目标就是找到一条能最拟合这4个点的线
那么可以首先假设这条线是

y = kx + b

x有 x1, x2, x3, x4
同样的,y也有 y1, y2, y3, y4
那么我就可以看作是矩阵的相乘,也就是

可以看到左边第二列增加了一列1,是为了矩阵相乘正确表示y = kx + b
所以有以下代码

A = np.vstack([x,np.ones(len(x))]).T

np.vstack() 表示vertical stack,即上下堆叠,也即是把[x1, x2, x3, x4] 与 [1, 1, 1, 1]上下堆叠在一起形成系数矩阵A。
打印A

将A,y代入到np.linalg.lstsq()并打印

s=np.linalg.lstsq(A, y, rcond=None)
s

结果如下:

接下来分析输出,lstsq的输出包括四部分:回归系数、残差平方和、自变量X的秩、X的奇异值。
只需要回归系数即k和b
所以只需要取输出结果的第一个元素s[0]

k,b = np.linalg.lstsq(A, y, rcond=None)[0]
k,b

结果如下:

总结
形如np.linalg.lstsq(a, b, rcond=‘warn’)

lstsq的输入包括三个参数,a为自变量X,b为因变量Y,rcond用来处理回归中的异常值,一般不用。

lstsq的输出包括四部分:回归系数、残差平方和、自变量X的秩、X的奇异值。一般只需要回归系数就可以了。

参考
numpy.linalg.lstsq
numpy.linalg.lstsq这个是什么意思
np.linalg.lstsq(a, b, rcond=‘warn’)

有关numpy.linalg.lstsq()详解以及用法示例的更多相关文章

  1. ruby - 什么是填充的 Base64 编码字符串以及如何在 ruby​​ 中生成它们? - 2

    我正在使用的第三方API的文档状态:"[O]urAPIonlyacceptspaddedBase64encodedstrings."什么是“填充的Base64编码字符串”以及如何在Ruby中生成它们。下面的代码是我第一次尝试创建转换为Base64的JSON格式数据。xa=Base64.encode64(a.to_json) 最佳答案 他们说的padding其实就是Base64本身的一部分。它是末尾的“=”和“==”。Base64将3个字节的数据包编码为4个编码字符。所以如果你的输入数据有长度n和n%3=1=>"=="末尾用于填充n%

  2. 【鸿蒙应用开发系列】- 获取系统设备信息以及版本API兼容调用方式 - 2

    在应用开发中,有时候我们需要获取系统的设备信息,用于数据上报和行为分析。那在鸿蒙系统中,我们应该怎么去获取设备的系统信息呢,比如说获取手机的系统版本号、手机的制造商、手机型号等数据。1、获取方式这里分为两种情况,一种是设备信息的获取,一种是系统信息的获取。1.1、获取设备信息获取设备信息,鸿蒙的SDK包为我们提供了DeviceInfo类,通过该类的一些静态方法,可以获取设备信息,DeviceInfo类的包路径为:ohos.system.DeviceInfo.具体的方法如下:ModifierandTypeMethodDescriptionstatic StringgetAbiList​()Obt

  3. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  4. 阿里云国际版免费试用:如何注册以及注意事项 - 2

    作为新的阿里云用户,您可以50免费试用多种优惠,价值高达1,700美元(或8,500美元)。这将让您了解和体验阿里云平台上提供的一系列产品和服务。如果您以个人身份注册免费试用,您将获得价值1,700美元的优惠。但是,如果您是注册公司,您可以选择企业免费试用,提交基本信息通过企业实名注册验证,即可开始价值$8,500的免费试用!本教程介绍了如何设置您的帐户并使用您的免费试用版。​关于免费试用在我们开始此试用之前,您还必须遵守以下条款和条件才能访问您的免费试用:只有在一年内创建的账户才有资格获得阿里云免费试用。通过此免费试用优惠,用户可以免费试用免费试用活动页面上列出的每种产品一次。如果您有多个帐

  5. Ruby-vips 图像处理库。有什么好的使用示例吗? - 2

    我对图像处理完全陌生。我对JPEG内部是什么以及它是如何工作一无所知。我想知道,是否可以在某处找到执行以下简单操作的ruby​​代码:打开jpeg文件。遍历每个像素并将其颜色设置为fx绿色。将结果写入另一个文件。我对如何使用ruby​​-vips库实现这一点特别感兴趣https://github.com/ender672/ruby-vips我的目标-学习如何使用ruby​​-vips执行基本的图像处理操作(Gamma校正、亮度、色调……)任何指向比“helloworld”更复杂的工作示例的链接——比如ruby​​-vips的github页面上的链接,我们将不胜感激!如果有ruby​​-

  6. arrays - 如何在下面的示例中将两个值数组分组为 n 个值数组? - 2

    我已经有很多两个值数组,例如下面的例子ary=[[1,2],[2,3],[1,3],[4,5],[5,6],[4,7],[7,8],[4,8]]我想把它们分组到[1,2,3],[4,5],[5,6],[4,7,8]因为意思是1和2有关系,2和3有关系,1和3有关系,所以1,2,3都有关系我如何通过ruby​​库或任何算法来做到这一点? 最佳答案 这是基本Bron–Kerboschalgorithm的Ruby实现:classGraphdefinitialize(edges)@edges=edgesenddeffind_maximum_

  7. ruby - Google-api-ruby-client 翻译 API 示例 - 2

    很高兴看到google代码:google-api-ruby-client项目,因为这对我来说意味着Ruby人员可以使用GoogleAPI-s来完善代码。虽然我现在很困惑,因为给出的唯一示例使用Buzz,并且根据我的实验,Google翻译(v2)api的行为必须与google-api-ruby-client中的Buzz完全不同。.我对“Explorer”演示示例很感兴趣——但据我所知,它并不是一个探索器。它所做的只是调用一个Buzz服务,然后浏览它已经知道的关于Buzz服务的事情。对我来说,Explorer应该让您“发现”所公开的服务和方法/功能,而不一定已经知道它们。我很想听听使用这个

  8. ruby - ruby 中的同一个程序如何接受来自用户的输入以及命令行参数 - 2

    我的ruby​​脚本从命令行参数获取某些输入。它检查是否缺少任何命令行参数,然后提示用户输入。但是我无法使用gets从用户那里获得输入。示例代码:test.rbname=""ARGV.eachdo|a|ifa.include?('-n')name=aputs"Argument:#{a}"endendifname==""puts"entername:"name=getsputsnameend运行脚本:rubytest.rbraghav-k错误结果:test.rb:6:in`gets':Nosuchfileordirectory-raghav-k(Errno::ENOENT)fromtes

  9. ruby - 有人可以解释一下在 Ruby 中注入(inject)的真实、通俗易懂的用法吗? - 2

    我正在学习Ruby,遇到了inject。我正处于理解它的风口浪尖,但当我是那种需要真实世界的例子来学习一些东西的人时。我遇到的最常见的例子是人们使用inject来添加一个(1..10)范围的总和,我不太关心这个。这是一个任意的例子。在实际程序中我会用它做什么?我正在学习,所以我可以继续使用Rails,但我不必有一个以Web为中心的示例。我只需要一些我可以全神贯注的目标。谢谢大家。 最佳答案 inject有时可以通过它的“其他”名称reduce更好地理解。它是一个对Enumerable进行操作(迭代一次)并返回单个值的函数。它有许多有

  10. ruby - 是否有 SproutCore 或 Cappuccino 的现场演示/示例应用程序 - 2

    在他们的网站上找不到任何内容。我主要只是想看看哪个值得一试(当然是RIA)。谢谢 最佳答案 SproutCoredemos 关于ruby-是否有SproutCore或Cappuccino的现场演示/示例应用程序,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/1419788/

随机推荐