问题标签 [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 回答
2530 浏览

ruby - 用于进行线性或非线性最小二乘逼近的 Ruby 库?

是否有一个 Ruby 库允许我对一组数据进行线性或非线性最小二乘逼近。

我想做的是以下几点:

  • 给定一系列 [x,y] 数据点
  • 针对该数据生成线性或非线性最小二乘近似
  • 该库不必弄清楚它是否需要进行线性或非线性近似。库的调用者应该知道他们需要什么类型的回归

我不想尝试移植一些 C/C++/Java 库来获得这个功能,所以我希望有一些现有的 Ruby 库可以使用。

0 投票
2 回答
4476 浏览

algorithm - 如何在响应矩阵的每一列上计算最小但快速的线性回归?

我想在不使用 "lm"的情况下计算 R 中的普通最小二乘 ( OLS ) 估计值,这有几个原因。首先,考虑到数据大小在我的情况下是一个问题,“lm”还计算了很多我不需要的东西(例如拟合值)。其次,我希望能够在 R 中自己实现 OLS,然后再用另一种语言(例如,在 C 中使用 GSL)。

你可能知道,模型是:Y=Xb+E;与 E ~ N(0, sigma^2)。如下详述,b 是具有 2 个参数的向量,均值 (b0) 和另一个系数 (b1)。最后,对于我将要做的每个线性回归,我想要 b1(效应大小)的估计值、它的标准误差、sigma^2(残差)和 R^2(确定系数)的估计值。

这是我的数据。我有 N 个样本(例如个人,N~=100)。对于每个样本,我有 Y 个输出(响应变量,Y~=10^3)和 X 个点(解释变量,X~=10^6)。我想分别处理 Y 输出,即。我想启动 Y 线性回归:一个用于输出 1,一个用于输出 2,等等。此外,我想使用解释变量一个 y 一个:对于输出 1,我想在第 1 点回归,然后在第 2 点回归,然后......最后在X点上。(我希望它很清楚......!)

这是我的R 代码,用于检查“lm”的速度与通过矩阵代数计算 OLS 估计我自己的速度。

首先,我模拟虚拟数据:

这是我自己在下面使用的函数:

这是我使用内置“lm”的代码:

这是我的自定义 OLS 代码:

当我使用上面给出的值运行此示例时,我得到:

(当然,当增加 N、X 和 Y 时,情况会变得更糟。)

当然,“lm”具有“自动”分别拟合响应矩阵的每一列(y~xi)的好特性,而我必须使用“应用”Y 次(对于每个 yi~xi)。但这是我的代码变慢的唯一原因吗?你们当中有人知道如何改进吗?

(对不起,这么长的问题,但我真的试图提供一个最小但全面的例子。)

0 投票
3 回答
24762 浏览

r - 加权最小二乘估计函数

R是否具有加权最小二乘函数?具体来说,我正在寻找计算截距和斜率的东西。

数据集

  1. 1 3 5 7 9 11 14 17 19 25 29
  2. 17 31 19 27 31 62 58 35 29 21 18
  3. 102153 104123 96564 125565 132255 115454 114555 132255 129564 126455 124578

因变量是数据集 3,数据集 1 和 2 是自变量。

0 投票
4 回答
17345 浏览

c - C 的非线性最小二乘优化库

我正在寻找一个 C 语言库,它将优化目标函数(最好是 Levenberg-Marquardt 算法),并将支持框约束、线性不等式约束和非线性不等式约束。

我已经尝试了几个库,但它们都没有为我的应用程序使用必要的约束类型:

  • GNU GSL(根本不支持约束)
  • cMPFIT(仅支持框约束)
  • levmar(根本不支持非线性约束)

我目前正在探索NLopt,但我不确定是否可以使用提供的任何算法实现最小二乘法。

我很难相信在这个问题中没有一个库支持所有约束,所以我想我在谷歌搜索时犯了一个错误。

我最近发现我可以从 C 调用 Matlab 函数。虽然这很容易解决问题,但我不想从 C 调用 Matlab 函数。根据我的经验,这并不快。

任何帮助将不胜感激。

0 投票
2 回答
1773 浏览

math - 最小二乘法不能按预期工作,或者是吗?

我试图通过最小二乘法来提高三边测量的准确性。对于初始估计,我得到聚类点的平均值。然后增加这个值,直到到下一个估计的距离足够小。使用此公式计算增量值,

公式

我的问题是,为什么大多数时候最终的答案与它应该是相当重要的?最初的估计甚至更好,虽然不是那么准确。我在这里想念什么吗?

编辑

公式如here所述。希望这张图能更好的解释

最小二乘法

看到最后一点甚至在交叉区域之外。

0 投票
2 回答
6152 浏览

matlab - 求解超定约束系统

我有n实数变量(不知道,不在乎),我们称它们为X[n]. 我也有m >> n他们之间的关系,我们称他们R[m]为 ,形式为:

X[i] = alpha*X[j],alpha是一个非零正实数,i并且j是不同的,但该(i, j)对不一定是唯一的(即具有不同 alpha 因子的相同变量之间可能存在两种关系)

我正在尝试做的是找到一组alpha参数,以某种最小二乘的方式解决超定系统。理想的解决方案是最小化每个方程参数与其选择值之间的差异平方和,但我对以下近似值感到满意:

如果我将 m 个方程转换为 n 个未知数的超定系统,任何基于伪逆的数值求解器都会给我一个明显的解(全为零)。所以我目前所做的是在混合中添加另一个方程x[0] = 1(实际上任何常数都可以)并使用 Moore-Penrose 伪逆以最小二乘法求解生成的系统。虽然这试图最小化 的总和(x[0] - 1)^2和 的平方和x[i] - alpha*x[j],但我发现它是我的问题的一个很好且数值稳定的近似值。这是一个例子:

在八度:

a这会产生, b, c:的值,[0.99383; 0.51235; 0.19136] 这给了我以下(合理的)关系:

所以现在我需要在 C/C++/Java 中实现这个,我有以下问题:

有没有更快的方法来解决我的问题,或者我在生成超定系统和计算伪逆方面是否走在正确的轨道上?

m我目前的解决方案需要一个奇异值分解和三个矩阵乘法,考虑到可能是 5000 甚至 10000有点多。是否有更快的方法来计算伪逆(实际上,我只需要它的第一列,而不是给定矩阵的稀疏性(每行恰好包含两个非零值,其中一个始终为一个,另一个始终为负)

您建议为此使用哪些数学库?LAPACK好吗?

我也对任何其他建议持开放态度,只要它们在数值上稳定且渐近快速(比如说k*n^2,哪里k可以很大)。

0 投票
1 回答
290 浏览

r - R脚本-以下的最小二乘解决方案

可能重复:
查找两个线性拟合在 R 中相交的位置

给定图表上的一些点(通常只有大约 6 或 7 个点),我需要找到一个最合适的解决方案,其中解决方案包括以下内容:

  1. 两条直线
  2. 线必须相交
  3. 交点(x 点)必须位于我指定的两个值之间(例如 xLow 和 xHigh)

我将如何使用 nls (或更好的东西?)来做到这一点?

如果有多个最佳拟合,那么它们中的任何一个都可以。基本上,两条线形成一个V。

0 投票
1 回答
852 浏览

r - R 脚本 - nls 函数

谁能给我一个很好的解释参数“算法”在R中的nls函数中的作用?

另外,公式是如何工作的?我知道它使用了 tilda,但我真的找不到它的实际解释。

另外,起始值有多重要?我是否需要尝试多个起始值,或者我仍然可以保证无论我使用什么起始值,nls 都会找到正确的参数?

0 投票
2 回答
928 浏览

r - R 脚本 - NLS 不工作

我有 5 个 (x,y) 数据点,我正在尝试找到一个最佳拟合解决方案,该解决方案由两条相交于一点 (x0,y0) 的线组成,并且遵循以下等式:

具体来说,我要求交集必须出现在 x=2 和 x=3 之间。看一下代码:

因此,您可以看到那里列出的数据点。然后,我通过我的 nls 运行它,获取我的参数m1, m2, x0, y0(斜率和交点)。

但是,看看解决方案: 在此处输入图像描述

显然,红线(应该仅基于前 2 点)不是前 2 点的最佳拟合线。这与蓝线(第二次拟合)相同,它应该取决于最后 3 点)。这里有什么问题?

0 投票
9 回答
22255 浏览

math - 将椭球拟合到 3D 数据点

我有一大组 3D 数据点,我想将其拟合到椭圆体中。

我的数学很差,所以我无法在没有任何数学库的情况下实现最小二乘法。

有谁知道或有一段代码可以将椭球拟合到我可以直接插入我的项目的数据中?最好用 C 语言,但从 C++、Java、C#、python 等转换对我来说应该没问题。

编辑:只要能够找到中心也将是一个巨大的帮助。请注意,这些点的间距不均匀,因此取平均值不会导致中心。