标签: least-squares

R中的非线性最小二乘曲线拟合

我是R的新手(第一次使用它).我正在按照本教程http://www.walkingrandomly.com/?p=5254尝试绘制曲线并发现最适合我数据的函数.到目前为止,我尝试过:

> xdata = c(1 ,5, 10, 20, 100)
> ydata = c(23.83333333, 210.3666667, 545.3666667, 1756.866667, 38595.7)
> plot(xdata,ydata)
Run Code Online (Sandbox Code Playgroud)

所以我明白了:

在此输入图像描述

然后我尝试:

> p1 = 1
> p2 = 0.2
> fit = nls(ydata ~ xdata^2, start=list(p1=p1,p2=p2))
Run Code Online (Sandbox Code Playgroud)

我收到这个错误:

Error in nlsModel(formula, mf, start, wts) : 
  singular gradient matrix at initial parameter estimates
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?谢谢

r least-squares

2
推荐指数
2
解决办法
9011
查看次数

R中的最小二乘优化

我想知道如何在R中解决以下问题

我们有一个v向量(n个元素)和一个B矩阵(维度为mxn).例如:

    > v 
    [1] 2 4 3 1 5 7

    > B
         [,1] [,2] [,3] [,4] [,5] [,6]
    [1,]    2    1   5    5    3    4
    [2,]    4    5   6    3    2    5
    [3,]    3    7   5    1    7    6
Run Code Online (Sandbox Code Playgroud)

我找 -长向量ü这样

    sum( ( v - ( u %*% B) )^2 )
Run Code Online (Sandbox Code Playgroud)

最小化(即最小化平方和).

optimization r linear-regression least-squares

2
推荐指数
1
解决办法
796
查看次数

最小二乘法适合在3d表面的python

我想将我的表面方程拟合到一些数据中.我已经尝试过scipy.optimize.leastsq,但因为我无法指定边界,所以它给了我一个无法使用的结果.我也试过scipy.optimize.least_squares,但它给了我一个错误:

ValueError: too many values to unpack
Run Code Online (Sandbox Code Playgroud)

我的等式是:

f(x,y,z)=(x-A+y-B)/2+sqrt(((x-A-y+B)/2)^2+C*z^2)
Run Code Online (Sandbox Code Playgroud)

应找到参数A,B,C,以便当以下点用于x,y,z时,上面的等式尽可能接近零:

    [
   [-0.071, -0.85, 0.401],
   [-0.138, -1.111, 0.494],
   [-0.317, -0.317, -0.317],
   [-0.351, -2.048, 0.848]
   ]
Run Code Online (Sandbox Code Playgroud)

边界将是A> 0,B> 0,C> 1

我应该如何获得这样的合适?python中最好的工具是什么?我搜索了如何拟合3d表面的示例,但大多数涉及函数拟合的示例都是关于线或平面拟合.

python least-squares data-fitting

2
推荐指数
1
解决办法
2660
查看次数

R 中的加权非负最小二乘法

我想在 R 中执行加权非负最小二乘法(即所有拟合系数 >=0 的约束)。nnls包中的函数似乎nnls不支持权重。我是否正确,我可以通过将协变量矩阵和因变量乘以向量的平方根weights来在函数内进行模拟,正如此处所示?或者有更好的方法来做到这一点吗?nnlsXyweights

r least-squares

2
推荐指数
1
解决办法
2658
查看次数

julia DifferentialEquations 中多个数据集的参数估计

我一直在寻找,但找不到使用 julia 中的 DifferentialEquations 参数估计来拟合多个数据集的直接方法。因此,假设我们有一个带有两个参数的简单微分方程:

f1 = function (du,u,p,t)
  du[1] = - p[1]*p[2] * u[1]
end
Run Code Online (Sandbox Code Playgroud)

我们有 u[1] 与 t 的实验数据集。每个数据集具有不同的 p[2] 值和/或不同的初始条件。p[1] 是我们要估计的参数。我可以通过在 for 循环中求解微分方程来实现此目的,该循环迭代不同的初始条件和 p[2] 值,将解存储在数组中并根据实验数据创建损失函数。我想知道是否有一种方法可以用更少的代码行来完成此操作,例如使用DiffEqBase.problem_new_parameters设置每个数据集的条件。在将模型拟合到实验数据时,这是一种非常常见的情况,但我在文档中找不到很好的示例。

先感谢您,

此致

编辑1

上面表达的情况只是一个简化的例子。为了使其成为一个实际案例,我们可以通过以下代码创建一些虚假的实验数据:

using DifferentialEquations

# ODE function
f1 = function (du,u,p,t)
  du[1] = - p[1]*p[2] * u[1]
end

# Initial conditions and parameter values.
# p1 is the parameter to be estimated.
# p2 and u0 are experimental parameters known for each dataset.
u0 = [1.,2.]
p1 = …
Run Code Online (Sandbox Code Playgroud)

mathematical-optimization least-squares julia differentialequations.jl

2
推荐指数
1
解决办法
1203
查看次数

垂直线的最小二乘方程

给出以下2d点:

213 106.8

214 189

214 293.4

213 324

223 414

我想找到贯穿它们的最小二乘垂直轴线的方程.我的计划是获得一个线方程,这样我就可以测试它们到最小二乘线的距离的后续点.

谢谢

least-squares

1
推荐指数
1
解决办法
3794
查看次数

绘制R中线性回归的非线性图

y<-c(0.0100,2.3984,11.0256,4.0272,0.2408,0.0200);
x<-c(1,3,5,7,9,11);
d<-data.frame(x,y)
myLm<-lm(x~y**2,data=d)
plot(d)
lines(x,lm(y ~ I(log(x)) + x,data=d)$fitted.values)
lines(x,lm(y ~ I(x**2) + x,data=d)$fitted.values) % not quite right, smooth plz
Run Code Online (Sandbox Code Playgroud)

应该是顺利的情节,有些不对劲.

在此输入图像描述

帮助者的问题

  1. 线性回归使用什么算法?
  2. 用Ones -matrix解释最小二乘法绘图

plot regression r least-squares

1
推荐指数
2
解决办法
9796
查看次数

scipy.optimize.leastsq使用哪种优化算法?

有谁知道scipy.optimize.leastsq中具体实现了哪种优化算法?

python optimization scipy least-squares

1
推荐指数
1
解决办法
1150
查看次数

SciPy:使用b向量数组的元素方式非负最小二乘

我需要解决线性问题Ax = b,x使用最小二乘法获得.所有元素x必须是非负的,所以我使用scipy.optimize.nnls(文档在这里).

麻烦的是,我需要用单个A矩阵和许多b向量多次解决这个问题.我有一个3d numpy ndarray,其中沿轴0b矢量是矢量,而其他两个轴对应于空间中的点.我希望将所有x向量输出到相应的数组,以便保留每个答案的空间信息.

问题的第一个传递看起来像这样:

A = np.random.rand(5,3)
b_array = B = np.random.rand(5,100,100)
x_array = np.zeros((3,100,100))

for i in range(100):
    for j in range(100):
        x_array[:,i,j] = sp.optimize.nnls(A, b_array[:,i,j])[0]
Run Code Online (Sandbox Code Playgroud)

这段代码非常实用,但感觉完全不优雅.更重要的是,它可能会非常慢(我的实际代码使用非常大的数据集,并且通过随机参数更改循环数千次,因此效率很重要).

不久之后,我问了一个关于元素矩阵乘法的非常相似的问题.我被介绍过np.einsum,在许多情况下证明它非常有用.我原本希望最小二乘解决方案有类似的功能,但一直找不到任何东西.如果有人知道可能有效的功能,或者有效/热情地解决这个问题的替代方法,那将非常感激!

python arrays numpy scipy least-squares

1
推荐指数
1
解决办法
2192
查看次数

最小二乘法:正规方程与 svd

我尝试编写自己的线性回归代码,遵循正常方程beta = inv(X'X)X'Ylstsq然而,平方误差比中的函数大得多numpy.linalg。有人可以向我解释为什么 SVD 方法(lstsq 使用的)比正规方程更准确吗?谢谢

numpy linear-regression svd least-squares

1
推荐指数
1
解决办法
1482
查看次数

检查二维点是否在曲线上

我的形象: 要处理的图像

我试图检测图像中的曲线 - 在图中有堆叠的硬币。我想计算平行曲线。大多数线条是不连续的。

假设我在 numpy.polyfit 中使用 5 个点并获得描述该线的函数。

搜索线并说这些点在第一行,这些点在第二行等的最佳方法是什么?

我正在考虑尝试最小二乘法并将线上下移动。我认为曲线是一条抛物线( ax^2 + bx + c ) - 移动它意味着移动顶​​点 x=-b/2a => y=a*(-b/2a)^2 + b*(- b/2a)+c。

import numpy as np
data = np.array([[0,0], [1,-1], [2, -2], [3,-1], [4,0]])
data_x = [k[0] for k in data ]
data_y = [k[1] for k in data ]
p = np.poly1d(np.polyfit(data_x, data_y, 2))
Run Code Online (Sandbox Code Playgroud)

请有人帮助我举例说明如何将图像中的点拟合到我刚刚找到的 p。我如何在这里应用最小二乘法?

提前致谢!

python numpy machine-learning least-squares data-fitting

1
推荐指数
1
解决办法
777
查看次数

谁能详细解释 linalg.lstsq 的返回吗?

虽然提供了linalg.lstsq 文档。我还是觉得不太明白,因为不太详细。

x : {(N,), (N,K)} ndarray

最小二乘解。如果 b 是二维的,则解位于 x 的 K 列中。

残差:{(1,), (K,), (0,)} ndarray

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

排名:整数

矩阵 a 的秩。

s : (min(M, N),) ndarray

a 的奇异值。

我尝试观察输出。但我只知道排名是2。对于其余的,我不明白为什么会这样。

x = np.array([0, 1, 2, 3])
y = np.array([-1, 0.2, 0.9, 2.1])
A = np.vstack([x, np.ones(len(x))]).T
print(A)
print('-------------------------')
print(np.linalg.lstsq(A, y, rcond=None))
Run Code Online (Sandbox Code Playgroud)

给予

[[0. 1.]
 [1. 1.]
 [2. 1.]
 [3. 1.]] …
Run Code Online (Sandbox Code Playgroud)

python numpy least-squares

1
推荐指数
1
解决办法
3570
查看次数

R中的最小二乘优化(矩阵)

昨天我问了一个问题,关于R中最小二乘优化,它原来lm功能是我一直在寻找的东西.

另一方面,现在我有一个其他最小二乘优化问题,我想知道是否lm也可以解决这个问题,或者如果没有,如何在R中处理它.

我有固定的矩阵B(维数为nxm)和V(维数为nxn),我正在寻找一个m- long向量u这样

       sum( ( V - ( B %*% diag(u) %*% t(B)) )^2 )
Run Code Online (Sandbox Code Playgroud)

最小化.

optimization regression r least-squares

0
推荐指数
1
解决办法
244
查看次数