Python 归一化系数的平面拟合

Python 归一化系数的平面拟合,python,numpy,scipy,least-squares,Python,Numpy,Scipy,Least Squares,我正在尝试使用scipy.optimize.leastsq将3d点拟合到2.5d/3d的平面上 我试图最小化函数:ax+by+c-z 当我向生成的平面添加噪波时,我开始得到(a,b,c)的不同结果,而a和b之间的线性关系保持正确 我的问题:有没有办法约束拟合参数的标准化 我可以在优化后进行规范化,并对最后一个参数进行另一次搜索,但这感觉效率低下,并且会导致参数c发生很大变化,有什么建议吗 谢谢 下面是我在同一个平面上得到的一些不同结果: 通过sqrt标准化后(a2+b2+1): 代码: def最

我正在尝试使用scipy.optimize.leastsq将3d点拟合到2.5d/3d的平面上

我试图最小化函数:ax+by+c-z

当我向生成的平面添加噪波时,我开始得到(a,b,c)的不同结果,而a和b之间的线性关系保持正确

我的问题:有没有办法约束拟合参数的标准化

我可以在优化后进行规范化,并对最后一个参数进行另一次搜索,但这感觉效率低下,并且会导致参数c发生很大变化,有什么建议吗

谢谢

下面是我在同一个平面上得到的一些不同结果: 通过sqrt标准化后(a2+b2+1): 代码:
def最小二乘法(邻域,p0):
"""
计算邻域中点的最小均方解。
p0是(a,b,c)的初始猜测
返回找到的局部极小值的a、b、c。
"""
如果邻居.shape[0]有一种方法:
给定nx,Y,Z值,您希望找到a,b,c,d以最小化

Q = Sum{ i | square( (a,b,c)*(X[i], Y[i], Z[i])' - d)}
无论你为(a,b,c)选择什么值,使其最小化的d值将是

d = Sum{ i | (a,b,c)*(X[i], Y[i], Z[i])' }/N
  = (a,b,c)*(Xbar,Ybar,Zvar)
其中Xbar是X等的平均值

把这个插入到Q的表达式中,我们得到

Q = Sum{ i | square( (a,b,c)*(x[i], y[i], x[i])')} 
  = (a,b,c)*Sum{ i | (x[i], y[i], x[i])' * (x[i], y[i], x[i])}*(a,b,c)'
  = (a,b,c)*M*(a,b,c)'
其中x[i]=x[i]-xbar,y[i]=y[i]-ybar等

M = Sum{ i | (x[i], y[i], x[i])' * (x[i], y[i], x[i])}
归一化(a,b,c)的最小值q将是M的最小特征向量,然后(a,b,c)将是该特征值的特征向量

因此,程序是:

a/计算坐标的平均值xbar,ybar,zbar,并从x[],y[],z[]中减去这些值

b/形成矩阵M并对角化

c/M的最低特征值的特征向量给出(a,b,c)

d/d计算通过

d = (a,b,c)*(xbar,ybar,zbar)'

“约束拟合参数的标准化”是什么意思?是否要对可能的值应用约束、添加正则化项等。?这样做的目的是什么?另外,“通过sqrt(a2+b2+1)进行规范化”是什么意思?很抱歉不清楚。我想要的输出是平面方程的a,b,c,d:ax+by+cz+d=0,但我想要法向量[a,b,c]被归一化。我目前的做法是:-我使用3个参数,其中c=-1。-将a、b、d按平方分(a^2+b^2+c^2)。因此,我得到了一个标准化的[a,b,c],但这个过程并不适合我的目的——当Z大时,d成比例地大,即使在标准化之后也会引入很大的误差,请参见上面的第二块输出。有办法吗?谢谢!它工作得很好。你知道这种最小二乘法之间是否有根本的区别吗?接下来的问题-对于给定的平面,我得到了许多指向相反方向的法向量,(vi=-1*vj)。我通过将abcd乘以-1求和(abc)解决了这个问题
Q = Sum{ i | square( (a,b,c)*(x[i], y[i], x[i])')} 
  = (a,b,c)*Sum{ i | (x[i], y[i], x[i])' * (x[i], y[i], x[i])}*(a,b,c)'
  = (a,b,c)*M*(a,b,c)'
M = Sum{ i | (x[i], y[i], x[i])' * (x[i], y[i], x[i])}
d = (a,b,c)*(xbar,ybar,zbar)'