问题标签 [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.
matlab - Least squares circle fitting using MATLAB Optimization Toolbox
I am trying to implement least squares circle fitting following this paper (sorry I can't publish it). The paper states, that we could fit a circle, by calculating the geometric error as the euclidean distance (Xi'') between a specific point (Xi) and the corresponding point on the circle (Xi'). We have three parametres: Xc (a vector of coordinates the center of circle), and R (radius).
I came up with the following MATLAB code (note that I am trying to fit circles, not spheres as it is indicated on the images):
The fitting however is not too good: if I start with the good parameter vector the algorithm terminates at the first step (so there is a local minima where it should be), but if I perturb the starting point (with a noiseless circle) the fitting stops with very large errors. I am sure that I've overlooked something in my implementation.
matlab - 如何计算两条不同大小的曲线(矩阵)的残差?
我有一条通过数值计算的理论曲线和一条实验曲线(最好说是大量的实验点)。我需要计算这两条曲线之间的残差,以检查使用最小二乘法建模的准确性。这些矩阵(曲线)大小不同。MATLAB中是否有任何函数可以计算两个不同大小的矩阵的残差?
r - R中非线性最小二乘内的样条
考虑 R 中的非线性最小二乘模型,例如以下形式):
(我真正的问题有几个变量,外部函数不是逻辑的,而是涉及更多;这个更简单,但我认为如果我能做到这一点,我的案例应该几乎立即跟进)
我想用(比如说)自然三次样条代替术语“alpha + beta * x”。
这是一些代码,用于在逻辑中创建一些具有非线性函数的示例数据:
不需要围绕它的逻辑,如果我在 lm 中,我可以很容易地用样条项替换线性项;所以一个线性模型是这样的:
然后变成
生成拟合值很简单,借助 rms 包(例如)获取预测值似乎很简单。
确实,用基于 lm 的样条拟合来拟合原始数据并不算太糟糕,但我在逻辑函数中需要它是有原因的(或者更确切地说,是我的问题中的等价物)。
nls 的问题是我需要为所有参数提供名称(我很高兴将它们称为 (b1, ..., b5) 用于一个样条拟合(并且说 c1, ... , c6 用于另一个变量- 我需要能够制作几个)。
是否有一种相当简洁的方法可以为 nls 生成相应的公式,以便我可以用样条曲线替换非线性函数中的线性项?
我能想到的唯一方法是有点笨拙和笨拙,并且如果不编写一大堆代码就不能很好地概括。
(编辑澄清)对于这个小问题,我当然可以手工完成 - 为ns生成的矩阵中每个变量的内积写一个表达式, 乘以参数向量。但是然后我必须为每个其他变量中的每个样条再次逐项编写整个内容,并且每次我更改任何样条中的 df 时,如果我想使用 cs 而不是 ns,则再次编写。然后当我想尝试做一些预测(/插值)时,我们会遇到一系列全新的问题需要处理。我需要一遍又一遍地继续这样做,并且可能需要大量的结和多个变量,以便在分析后进行分析 - 我想知道是否有比写出每个单独的术语更简洁、更简单的方法,无需编写大量代码。我可以看到一种相当牛逼的方法来做到这一点,这需要相当多的代码才能正确,但是作为 R,我怀疑有一种更简洁的方法(或者更可能是 3 或 4 种更简洁的方法) ' 只是在躲避我。因此问题。
我以为我过去曾看到有人以相当不错的方式做这样的事情,但是对于我的生活,我现在找不到它;我已经尝试了很多次才能找到它。
[更具体地说,我通常希望能够尝试拟合每个变量中的几个不同样条曲线中的任何一个 - 尝试几种可能性 - 以查看我是否可以找到一个简单的模型,但仍然是一个适合的模型足以达到目的(噪音真的很低;拟合中的一些偏差可以达到很好的平滑结果,但只能达到一定程度)。它比任何接近推理的方法都更“找到一个好的、可解释的但足够的拟合函数”,而数据挖掘对于这个问题来说并不是一个真正的问题。]
或者,如果这在 gnm 或 ASSIST 或其他软件包之一中会更容易,那将是有用的知识,但是关于如何使用它们处理上述玩具问题的一些指示会有所帮助。
algorithm - 加权最小二乘 - 将平面拟合到 3D 点集
我正在使用最小二乘法将平面拟合到 3D 点集。我已经有算法可以做到这一点,但我想修改它以使用加权最小二乘。这意味着我对每个点都有一个权重(权重越大,飞机应该越接近该点)。
当前算法(无权重)如下所示:
计算总和:
比制作矩阵:
比解决 Ax = B 和解决方案的 3 个分量是拟合平原的系数...
那么,您能帮我修改一下如何使用权重吗?谢谢!
python - Python中的约束最小二乘估计
我正在尝试使用 Scipy 执行约束最小二乘估计,以使所有系数都在范围内(0,1)
并求和1
(此功能在 Matlab 的LSQLIN
函数中实现)。
有没有人有使用 Python/Scipy 设置此计算的提示。我相信我应该使用scipy.optimize.fmin_slsqp()
,但不完全确定应该传递给它的参数。[1]
非常感谢您的帮助,尼克
[1] 文档中的一个示例在fmin_slsqp
没有引用文本的情况下对我来说有点难以解析——而且我是使用 Scipy 的新手。
python - scipy最小二乘法中的正交回归拟合
scipy lib 中的 leastsq 方法适合某些数据的曲线。这种方法意味着在这个数据中 Y 值取决于一些 X 参数。并计算曲线与 Y 轴数据点之间的最小距离 (dy)
但是如果我需要计算两个轴(dy 和 dx)的最小距离怎么办?
有没有一些方法可以实现这个计算?
以下是使用单轴计算时的代码示例:
我最近尝试了 scipy.odr 库,它只为线性函数返回正确的结果。对于像 y=a*x^b 这样的其他函数,它会返回错误的结果。这就是我使用它的方式:
这会返回错误的结果,这是不希望的,并且在某些输入数据中甚至不接近真实。可能是,有一些特殊的使用方法,我做错了什么?
python - weave.inline 与 scipy.optimize.leastsq 不兼容?
我正在尝试加快使用 scipy.optimize 中的“leastsq”函数的函数最小化例程。也就是说,我正在执行以下操作:
errfn 是返回残差的函数;Dfun 返回雅可比矩阵;p0 是初始参数猜测。在纯 numpy 中,这是有效的。现在,例如,如果我更改 myfn(或 Dfun)以使用 weave.inline 合并 C 代码,则 weave.inline 编译器会中断。当我自己调用该函数时,它会返回正确的值;只有在被最小平方函数调用的上下文中,编译器才会中断。有什么想法吗?以下是我使用 weave.inline 的方式:
c++ - 卡尔曼,最小二乘,或
为了帮助人们理解我的问题是我在问什么,我选择完全改写它。我希望这能解决问题。
我正在以 1 秒的速度收集 GPS 数据(纬度/经度)。了解这些数据可能不是 100% 准确,并且偶尔有一个(1 个或多个)数据点偏离标准,为了确定相当准确的路线,去除异常点的最合适方法是什么?车辆的速度?这辆车可以以每小时 0-60 英里的速度行驶,通常是直线,但也容易突然转弯(加权值?)。
对于造成的混乱,以及未能理解已经提出的建议,我深表歉意。
python - 当初始条件作为参数传递时,使用 python 最小平方拟合 ODE 会产生强制转换错误
我有一组数据,我正在尝试使用 scipy 的 minimumsq 函数拟合 ODE 模型。我的 ODE 有参数beta
and gamma
,所以它看起来像这样:
这个想法是找到beta
和gamma
使我的 ODE 系统的数值积分最接近数据。如果我知道初始条件中的所有点,我可以使用 leastsq 很好地做到这一点y0
。
现在,我正在尝试做同样的事情,但现在将其中一个条目y0
作为额外参数传递。这是 Python 和我停止通信的地方......我做了一个函数,所以现在我传递给 leastsq 的参数的第一个条目是我的变量 R 的初始条件。我收到以下消息:
这是我的代码。对于这个例子来说,它需要做的更复杂一些,因为实际上我想用 7 个参数拟合另一个 ode,并且想一次拟合多个数据集。但我想在这里发布一些更简单的东西......任何帮助都将非常感激!非常感谢你!
math - 使用普通最小二乘法 (OLS)
我有等式A * x = b
A的大小是矩阵大小 nxm,x是 mx 1,b是 nx 1。A 的行数多于列数 (n < m)。
我的未知数是A,因为 n != m,A没有逆。我知道的是两个向量x和b。基本上,我想找到使 ( A * x - b ) 接近于零的A。
最小二乘似乎合适,但我不确定如何进行,因为它似乎不符合我的教科书或维基百科条目;通常矩阵A是已知的。如果 OLS 不合适,那会是什么?奇异值分解?再次,请指点,我的线性代数生锈了。
希望能够实现这个(python/C)。指向良好可读代码的指针?