问题标签 [least-squares]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
4916 浏览

python - 使用非常大或非常小的数字时 scipy.optimize.fmin_slsqp 的问题

只有在使用非常大或非常小的数字时,是否有人遇到过 fmin_slsqp(或 scipy.optimize 中的其他任何内容)的问题?

我正在编写一些python代码来获取灰度图像和蒙版,生成直方图,然后将多个高斯拟合到直方图。为了开发代码,我使用了一个小示例图像,经过一些工作,代码运行良好。但是,当我首先对直方图进行归一化,生成 bin 值 <<1,或者当我对巨大的图像进行直方图,生成数十万个 bin 值时,fmin_slsqp() 开始偶尔失败。它仅在大约 5 次迭代后退出,通常只返回我给出的初始猜测的略微修改版本,并返回退出模式 8,这意味着“线搜索的正方向导数”。如果我在开始时检查 bin 计数的大小并将它们缩放到 ~100-1000 的附近,fmin_slsqp() 将照常工作。我只是在返回结果之前取消缩放。

我环顾四周,发现人们在谈论 epsilon 值,它基本上是用于逼近导数的 dx,但调整并没有帮助。除此之外,我还没有发现任何有用的东西。任何想法将不胜感激。提前致谢。

詹姆士

0 投票
8 回答
71587 浏览

c - C中快速高效的最小二乘拟合算法?

我正在尝试实现线性最小二乘拟合到 2 个数据数组:时间与幅度。到目前为止,我知道的唯一技术是测试 (y = m*x+b) 中所有可能的 m 和 b 点,然后找出最适合我的数据的组合,以便它具有最小的错误。但是,我认为迭代如此多的组合有时是无用的,因为它会测试所有内容。有什么技术可以加快我不知道的过程吗?谢谢。

0 投票
2 回答
10678 浏览

python - 卡方 numpy.polyfit (numpy)

有人可以解释如何使用 numpy.polyfit 获得 Chi^2/doF 吗?

0 投票
1 回答
1502 浏览

matlab - 在 MATLAB 中的 fsolve 每次迭代之间运行一个函数

我正在使用fsolve最小化 MATLAB 中的能量函数。我正在使用的算法将网格拟合到嘈杂的格子数据,并以网格到每个数据点的距离为代价。

目标函数用平方误差项来表示,以允许使用Gauss-Newton 算法。但是,该程序恢复为 Levenberg-Marquardt:

我意识到这可能是因为虽然成本有平方误差,但目标(成本)函数中有一个阶段选择离每个数据点最近的网格中心,从而使算法非平方。

我想要做的是分别执行最近网格中心的分配更新,以评估成本函数的雅可比行列式。我相信这将允许使用 Gauss-Newton,并显着提高算法的速度。

目前,我相信有这样的事情发生:

我想发生的事情是:

有没有办法在不分离整个算法的情况下将这样的函数插入到迭代中fsolve?即使我手动编辑 fsolve,Gauss-Newton 算法的性质是否允许我添加这个额外的步骤?

谢谢

0 投票
3 回答
6663 浏览

python - 最小平方的置信区间适合 scipy python

如何计算python中最小二乘拟合(scipy.optimize.leastsq)的置信区间?

0 投票
2 回答
1047 浏览

matlab - MATLAB:运行以前版本的函数

编辑:

谢谢@yoda 和@morispaa。你是对的,@morispaa 的解决方案有效,即我对转换系数的处理,它基于对Z跨越的空间的假设,以及Z向量的顺序“方向”,如果我更新Q的列的符号,使得R的对角线具有正元素。

有关我正在进行的转换的更多详细信息,您可以阅读内容;下面的Z = 采样的 Zernike 多项式,众所周知,它在离散情况(我们的情况)上既不正交也不完整。

关于@morispaa 提出的解决方案为何有效的直觉。我很想听听您对此的意见:

我的直觉是,以某种方式在R中强制执行真正的非负对角线会呈现一个基Q ,它与Z中的向量更好地“对齐” (正如我之前所说,它是非单一的),因此下面的选项 1 和 2,即使它们代表不同的变换,输出系数也可能在相似的空间中。

更具体地说,我认为Z “几乎”是单一的,也许这会导致QR分解返回一个足够接近Z的基础?只有这样,我才能想象我对转换系数的处理(基于对Z中向量的具体情况的假设)在Q的对角线完全为正时起作用,但在它具有负条目时不起作用。你怎么看?

背景

我的机器上安装了 MATLAB R2011aR2010b

R2010bR2011a的更改之一会影响(请参阅此处qr()有关此特定更改的发行说明)的实施。

我的项目中的一个重要部分qr()用于估计直接和逆变换的正交基。我的代码将此转换应用于输入信号,处理转换后的系数并返回处理后的信号。换句话说,在R2011aqr()所做的更改使处理此变换的系数的块停止工作(逆变换不会返回已处理信号的预期逆变换)。

不知何故,现在返回的Qqr()矩阵与旧版本不同,这会阻止对变换系数的处理正常工作。

第一个问题

鉴于上述情况,是否可以告诉R2011aqr()R2010b使用?

第二个问题

我使用QQ'来计算直接和逆变换;您可以在此处查看更多详细信息。更具体地说,我使用y = Q * xx = Q' * y分别计算直接和逆变换。计算直接变换的另一种方法是使用最小二乘法。换句话说,我们有两个选择:

选项 1:使用 QR 分解的直接和逆变换:

选项 2:通过最小二乘拟合进行直接和逆变换

我们的变量是:

R2011a中,上面的选项 1停止工作(它在R2010b中工作)。我真的很喜欢使用直接和逆变换的想法qr()(它比为每个新向量计算最小二乘要快得多)。如果我想在qr()我的项目中使用新的,有人知道如何使用新的Q使我的转换再次工作吗?

0 投票
2 回答
7079 浏览

python - python中稀疏矩阵的伪逆

我正在处理来自神经影像学的数据,由于数据量很大,我想为我的代码使用稀疏矩阵(scipy.sparse.lil_matrix 或 csr_matrix)。

特别是,我需要计算矩阵的伪逆来解决最小二乘问题。我找到了 sparse.lsqr 方法,但效率不高。有没有一种方法来计算 Moore-Penrose 的伪逆(对应于正常矩阵的 pinv)。

我的矩阵 A 的大小约为 600'000x2000,在矩阵的每一行中,我将有 0 到 4 个非零值。矩阵 A 大小由体素 x 纤维束(白质纤维束)给出,我们预计一个体素中最多有 4 个束交叉。在大多数白质体素中,我们预计至少有 1 个区域,但我会说大约 20% 的线条可能是零。

向量 b 不应该是稀疏的,实际上 b 包含每个体素的度量,通常不为零。

我需要最小化错误,但向量 x 上也有一些条件。当我在较小的矩阵上尝试模型时,我从不需要约束系统以满足这些条件(通常为 0

这有什么帮助吗?有没有办法避免取 A 的伪逆?

谢谢

6 月 1 日更新: 再次感谢您的帮助。我无法真正向您展示有关我的数据的任何信息,因为 python 中的代码给我带来了一些问题。但是,为了了解如何选择一个好的 k,我尝试在 Matlab 中创建一个测试函数。

代码如下:

你知道 k 与 F 的大小相比应该是多少吗?我已经拿了250(超过1000),结果并不理想(等待时间可以接受,但不短)。现在我也可以将结果与已知解决方案进行比较,但一般来说如何选择 k 呢?我还附上了我得到的 250 个单个值的图,并将它们的平方归一化。我不知道如何更好地在 matlab 中做一个 screeplot。我现在正在处理更大的 k,看看值是否会突然变小。

再次感谢,詹妮弗

该图像显示了计算的 250。 我不确切知道如何在 Matlab 中创建碎石图。 平方归一化单个值

0 投票
1 回答
1101 浏览

matlab - MATLAB 的 lsqnonlin 中用户定义的雅可比行列式

当使用 MATLAB 的lsqnonlin函数时,我试图给出一个用户定义的雅可比矩阵,如文档中所述。

lsqnonlin 中使用的目标函数的输出应该是一个未平方值的向量,当平方和求和时,它会给出能量。但是,雅可比应该是平方值还是非平方值的偏导数?

0 投票
4 回答
1994 浏览

python - numpy:用更多观察值更新最小二乘的代码

我正在寻找一种numpy基于 - 的普通最小二乘法实现,它允许通过更多观察来更新拟合。类似于应用统计算法 AS 274或 R's 的东西biglm

如果做不到这一点,使用新行更新 QR 分解的例程也会很有趣。

任何指针?

0 投票
2 回答
9104 浏览

java - 多重回归

为了组合同一个变量的 3 个不同的估计量,我需要在 Java 中实现一个多元回归方法(因此有 3 个自变量和 1 个因变量)。我正在寻找一种简单的方法(就像多元回归方法一样简单)。从我所做的搜索来看,我认为最小二乘法可能应该是一种适当的方法,但我想知道您是否建议任何其他方法。此外,我无法找到有关在多变量上下文中实现最小二乘法的任何好的文档,所以如果您能指出我可以使用的任何好的信息/来源,我将不胜感激。