我是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中解决以下问题
我们有一个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)
最小化(即最小化平方和).
我想将我的表面方程拟合到一些数据中.我已经尝试过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表面的示例,但大多数涉及函数拟合的示例都是关于线或平面拟合.
我想在 R 中执行加权非负最小二乘法(即所有拟合系数 >=0 的约束)。nnls包中的函数似乎nnls不支持权重。我是否正确,我可以通过将协变量矩阵和因变量乘以向量的平方根weights来在函数内进行模拟,正如此处所示?或者有更好的方法来做到这一点吗?nnlsXyweights
我一直在寻找,但找不到使用 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设置每个数据集的条件。在将模型拟合到实验数据时,这是一种非常常见的情况,但我在文档中找不到很好的示例。
先感谢您,
此致
上面表达的情况只是一个简化的例子。为了使其成为一个实际案例,我们可以通过以下代码创建一些虚假的实验数据:
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
给出以下2d点:
213 106.8
214 189
214 293.4
213 324
223 414
我想找到贯穿它们的最小二乘垂直轴线的方程.我的计划是获得一个线方程,这样我就可以测试它们到最小二乘线的距离的后续点.
谢谢
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)
应该是顺利的情节,有些不对劲.

帮助者的问题
有谁知道scipy.optimize.leastsq中具体实现了哪种优化算法?
我需要解决线性问题Ax = b,x使用最小二乘法获得.所有元素x必须是非负的,所以我使用scipy.optimize.nnls(文档在这里).
麻烦的是,我需要用单个A矩阵和许多b向量多次解决这个问题.我有一个3d numpy ndarray,其中沿轴0的b矢量是矢量,而其他两个轴对应于空间中的点.我希望将所有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,在许多情况下证明它非常有用.我原本希望最小二乘解决方案有类似的功能,但一直找不到任何东西.如果有人知道可能有效的功能,或者有效/热情地解决这个问题的替代方法,那将非常感激!
我尝试编写自己的线性回归代码,遵循正常方程beta = inv(X'X)X'Y。lstsq然而,平方误差比中的函数大得多numpy.linalg。有人可以向我解释为什么 SVD 方法(lstsq 使用的)比正规方程更准确吗?谢谢
我的形象:

我试图检测图像中的曲线 - 在图中有堆叠的硬币。我想计算平行曲线。大多数线条是不连续的。
假设我在 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。我如何在这里应用最小二乘法?
提前致谢!
虽然提供了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) 昨天我问了一个问题,关于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)
最小化.
least-squares ×13
python ×5
r ×5
numpy ×4
optimization ×3
data-fitting ×2
regression ×2
scipy ×2
arrays ×1
julia ×1
plot ×1
svd ×1