问题标签 [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.
python - 使用 Python 拟合模拟和实验数据点
我编写了一些代码来执行蒙特卡罗模拟并产生信号强度与时间的曲线。这种曲线的形状取决于各种参数,我的合作者希望通过我正在模拟的实验的“真实版本”来确定其中两个参数。
我们已经准备好将她的实验数据与我的模拟曲线进行比较,但现在我被卡住了,因为我还不能进行任何拟合(到目前为止,我已经用模拟噪声数据替换了实验数据进行测试)。我尝试使用scipy.optimize.leastsq
,它以代码 2 退出(根据文档,这意味着拟合成功),但它大多只是简单地返回值(不完全相同,但接近)我输入作为初始猜测,无论如何接近或远离真实值。如果它确实报告了不同的值,那么得到的曲线仍然与真实曲线有很大不同。
另一个观察结果是infodict['nfev']
总是包含
在使用我的模拟噪声数据时,我玩弄了两个参数的真实值处于相同数量级(因为我认为使用的步长可能只会对其中一个产生明显影响),数量级非常不同,并且我改变了步长(参数epsfcn
),但无济于事。
有谁知道我可能做错了什么,或者我可以使用什么拟合函数来代替leastsq
?如果是这样:提前非常感谢!
编辑
正如 Russ 所建议的,我现在将提供有关如何执行模拟的一些细节:我们正在研究与大分子结合的小分子。这发生的概率取决于它们的相互亲和力(亲和力是要从实验数据中提取的值之一)。一旦发生结合,我们还模拟复合体再次分解需要多长时间(解离时间常数是我们感兴趣的第二个参数)。还有许多其他参数,但它们仅在计算预期信号强度时才变得相关,因此它们与实际模拟无关。
我们从给定数量的小分子开始,每个小分子的状态都被模拟了多个时间步长。在每个时间步,我们使用亲和力值来确定该分子是否与大分子结合,以防它未结合。如果它已经绑定,我们使用解离时间常数和它已经绑定的时间量来确定它是否在此步骤中解离。
在这两种情况下,参数(亲和力、解离时间常数)都用于计算概率,然后将其与随机数(0 到 1 之间)进行比较,在此比较中,它取决于小分子的状态(结合/未绑定)的变化。
编辑 2
没有明确定义的函数可以确定所得曲线的形状,即使该形状明显可重现,但每个单独的数据点都存在随机性。因此,我现在尝试使用optimize.fmin
而不是leastsq
,但它不会收敛,并且在执行最大迭代次数后简单地退出。
编辑 3
正如 Andrea 所建议的,我已经上传了一个示例图。我真的不认为提供样本数据会有很大帮助,它只是每个 x 值(时间)的一个 y 值(信号强度)......
python - 将弧的 3d 点拟合到圆(Python 中的回归)
我对python比较陌生。我的问题如下
我在形成二维弧的任意平面上有一组嘈杂的数据点(x,y,z)。我想要一个通过这些点的最佳拟合圆并返回:中心 (x,y,z)、半径和残差。
如何在 python 中使用 scipy 解决这个问题。我可以使用迭代方法解决这个问题并为其编写整个代码。但是,有没有办法在 python 中使用 minimumsq 来最好地拟合一个圆?然后找到中心和半径?
谢谢奥维斯
c# - Levenberg-Marquardt 算法的 C# 实现
我正在寻找用于非线性最小二乘拟合的Levenberg–Marquardt 算法的 C# 实现。
r - 在 R 的 nnls 中实现额外的约束
我正在将R 接口用于非负线性最小二乘算法的 Lawson-Hanson NNLS||A x - b||^2
实现,该算法在向量 x ≥ 0 的所有元素的约束下求解。这工作正常,但我想添加进一步的约束。我感兴趣的是:
还要最小化 x 的“能量”:
||A x - b||^2 + m*||x||^2
最小化“x 导数中的能量”
||A x - b||^2 + m ||H x||^2
,其中 H 是恒等式和第一个非对角线上为 -1 的矩阵的总和最一般地,最小化
||A x - b||^2 + m ||H x - f||^2
.
有没有办法通过一些巧妙的方式来重述问题 1.-3 来诱使 nnls 做到这一点。以上?我对这样的事情抱有希望的原因是,在Whitall 等人的一篇论文中(对付费专区感到抱歉)有一个小小的评论,声称“幸运的是,可以从上面的原始形式采用 NNLS 来适应某些东西在问题 3"中。
c# - C# 代数线性库
我正在寻找一个 C# 线性代数库。
我不想用最小二乘法求解一个齐次线性系统。
我一直在尝试使用一些库,但我只能找到简单的解决方案。
有什么建议吗?
python - scipy.optimize.leastsq 使用哪种优化算法?
有谁知道在 scipy.optimize.leastsq 中具体实现了哪种优化算法?
r - R中的k均值返回值
我在 R 中使用 kmeans() 函数,我很好奇返回对象的totss和tot.withinss属性之间有什么区别。从文档来看,他们似乎返回了同样的东西,但在我的数据集上应用 totss 的值为 66213.63,tot.withinss 的值为 6893.50。如果您熟悉 mroe 详细信息,请告诉我。谢谢!
马吕斯。
algorithm - 计算滚动窗口与给定线函数的平方和距离的算法
给定一个线函数 y = a*x + b
(a
和b
是先前已知的常数),很容易计算线和样本窗口之间的平方和距离(1, Y1), (2, Y2), ..., (n, Yn)
(其中Y1
最旧的样本和Yn
最新的样本):
我需要一个快速算法来计算滚动窗口(长度n
)的这个值 - 每次新样本到达时,我都无法重新扫描窗口中的所有样本。
显然,对于每个进入窗口的新样本和每个离开窗口的旧样本,都应该保存和更新一些状态。
请注意,当一个样本离开窗口时,其余样本的指数也会发生变化——每个 Yx 都变为 Y(x-1)。因此,当一个样本离开窗口时,窗口中的每个其他样本都会为新总和贡献一个不同的值:(Yx - (a*(x-1) + b))^2
而不是(Yx - (a*x + b))^2
.
有没有已知的算法来计算这个?如果没有,你能想到一个吗?(由于一阶线性近似,有一些错误是可以的)。
python - 如何快速对多个数据集执行最小二乘拟合?
我正在尝试对许多数据点进行高斯拟合。例如,我有一个 256 x 262144 的数据数组。需要将 256 个点拟合到高斯分布,我需要其中的 262144 个。
有时高斯分布的峰值超出数据范围,因此要获得准确的平均结果曲线拟合是最好的方法。即使峰值在范围内,曲线拟合也会给出更好的 sigma,因为其他数据不在范围内。
我使用http://www.scipy.org/Cookbook/FittingData中的代码为一个数据点工作。
我试图重复这个算法,但看起来它需要大约 43 分钟才能解决这个问题。是否有一种已经编写好的快速方法可以并行或更有效地执行此操作?
请注意,数据不一定是 256x262144,我已经在 nd_fit 中做了一些捏造来完成这项工作。
我用来让它工作的代码是
注意:@JoeKington 下面发布的解决方案很棒,而且解决得非常快。然而,除非高斯的重要区域在适当的区域内,否则它似乎不起作用。我将不得不测试平均值是否仍然准确,因为这是我使用它的主要目的。