标签: least-squares

线性回归与SPSS中的普通最小二乘法是一回事吗?

我想使用线性回归模型,但我想使用普通最小二乘法,我认为它是一种线性回归.我使用的软件是SPSS.它只有线性回归,偏最小二乘和2阶最小二乘.我不知道哪一个是普通的最小二乘(OLS).

statistics spss linear-regression least-squares

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

将弧的3d点拟合为圆(Python中的回归)

我对python比较陌生.我的问题如下

我在一个形成二维弧的任意平面上有一组有噪声的数据点(x,y,z).我希望通过这些点得到最佳拟合圆并返回:中心(x,y,z),半径和残差.

如何在python中使用scipy来解决这个问题.我可以使用迭代方法解决这个问题并为其编写完整的代码.但是,有没有办法在python中使用leastsq最适合圆圈?然后找到中心和半径?

谢谢Owais

python geometry regression scipy least-squares

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

在MATLAB中优化重复估计(当前是一个循环)

我发现自己需要对图像中的每个像素进行最小二乘(或类似的基于矩阵的操作).每个像素都有一组与之关联的数字,因此可以将其排列为3D矩阵.

(可以跳过下一位)

通过最小二乘估计快速解释我的意思:

假设我们有一些二次系统,它由Y = Ax ^ 2 + Bx + C建模,我们正在寻找那些A,B,C系数.使用X的几个样本(至少3个)和相应的Y,我们可以通过以下方式估算它们:

  1. 将(例如10个)X样本排列成矩阵 X = [x(:).^2 x(:) ones(10,1)];
  2. 将Y个样本排列成类似的矩阵: Y = y(:);
  3. 通过求解来估算系数A,B,C: coeffs = (X'*X)^(-1)*X'*Y;

如果您愿意,可以自己尝试:

A = 5; B = 2; C = 1;
x = 1:10;
y = A*x(:).^2 + B*x(:) + C + .25*randn(10,1); % added some noise here
X = [x(:).^2 x(:) ones(10,1)];
Y = y(:);
coeffs = (X'*X)^-1*X'*Y

coeffs =

  5.0040
  1.9818
  0.9241
Run Code Online (Sandbox Code Playgroud)

如果我迷失了你,请继续注意

*MAJOR REWRITE*我已修改为使其接近我所拥有的真正问题,并仍然使其成为最小的工作示例.

问题设置

%// Setup
xdim …
Run Code Online (Sandbox Code Playgroud)

math optimization matlab matrix least-squares

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

如何使用仅仅是上限的数据在python中进行最小二乘拟合?

我试图在python中执行最小二乘拟合到具有三个变量的已知函数.我能够为随机生成的有错误的数据完成此任务,但我需要适合的实际数据包括一些数据点,这些数据点是值的上限.该函数将通量描述为波长的函数,但在某些情况下,在给定波长下测量的通量不是带有误差的绝对值,而是通量的最大值,实际值低于零到零的值.

是否有某种方法告诉拟合任务某些数据点是上限?另外,我必须为许多数据集执行此操作,并且可能为上限的数据点的数量对于每个数据集是不同的,因此能够自动执行此操作将是有益的但不是必需的.

如果有任何不清楚的地方我会道歉,如果需要,我会尽力更清楚地解释.

我用来拟合我的数据的代码包含在下面.

import numpy as np
from scipy.optimize import leastsq
import math as math
import matplotlib.pyplot as plt


def f_all(x,p):
    return np.exp(p[0])/((x**(3+p[1]))*((np.exp(14404.5/((x*1000000)*p[2])))-1))

def residual(p,y,x,error):
    err=(y-(f_all(x,p)))/error
    return err


p0=[-30,2.0,35.0]

data=np.genfromtxt("./Data_Files/Object_001")
wavelength=data[:,0]
flux=data[:,1]
errors=data[:,2]

p,cov,infodict,mesg,ier=leastsq(residual, p0, args = (flux, wavelength, errors), full_output=True)

print p
Run Code Online (Sandbox Code Playgroud)

python least-squares model-fitting

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

如何在Matlab中使用最小二乘法?

我有37个线性方程和36个变量的矩阵方程; A*X = B. 方程没有确切的答案.我想使用Matlab最小二乘法找到误差最小的答案.我是Matlab的新手,所以任何评论都会有所帮助.谢谢

math matlab curve-fitting best-fit-curve least-squares

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

我的例子表明SVD在数值上比QR分解更不稳定

我在Math Stackexchange中问过这个问题,但似乎没有得到足够的关注,所以我在这里问它.https://math.stackexchange.com/questions/1729946/why-do-we-say-svd-can-handle-singular-matrx-when-doing-least-square-comparison?noredirect=1#comment3530971_1729946

我从一些教程中了解到,当解决最小二乘问题时,SVD应该比QR分解更稳定,并且它能够处理奇异矩阵.但是我在matlab中编写的以下示例似乎支持相反的结论.我对SVD没有深刻的理解,所以如果您可以在Math StackExchange的旧帖子中查看我的问题并向我解释,我会非常感激.

我使用具有大条件数(e + 13)的矩阵.结果显示SVD得到比QR(e-27)大得多的误差(0.8)

% we do a linear regression between Y and X
data= [
47.667483331 -122.1070832;
47.667483331001 -122.1070832
];
X = data(:,1);
Y = data(:,2);

X_1 =  [ones(length(X),1),X];

%%
%SVD method
[U,D,V] = svd(X_1,'econ');
beta_svd = V*diag(1./diag(D))*U'*Y;


%% QR method(here one can also use "\" operator, which will get the same result as I tested. I just wrote down backward substitution to educate myself)
[Q,R] = qr(X_1)
%now do backward substitution
[nr nc] = …
Run Code Online (Sandbox Code Playgroud)

matlab svd least-squares qr-decomposition matrix-decomposition

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

使用 Numba 求解 Python 中的最小二乘法

我在使用 Numba 求解 python 中的最小二乘法时遇到问题。这是我的代码:

import numpy as np
from numba import jit

@jit(nopython=True)
def test(A, B):
    alpha = np.linalg.lstsq(A,B,rcond=None)
    return alpha

A = np.random.rand(10,3)
B = np.random.rand(10,1)
alpha = test(A,B)

print(alpha)
Run Code Online (Sandbox Code Playgroud)

如果没有“@jit(nopython=True)”行,它就可以工作。使用“@jit”时出现以下错误:

Invalid use of Function(<function lstsq at 0x000001767E21E318>) with argument(s) of type(s): (array(float64, 2d, C), array(float64, 2d, C), rcond=none)
 * parameterized
In definition 0:
    TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Invalid use of ExternalFunction(numba_ez_gelsd) with argument(s) of type(s): (Literal[int](100), int64, int64, int64, ArrayCTypes(dtype=float64, ndim=2), int64, …
Run Code Online (Sandbox Code Playgroud)

python least-squares numba

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

所有可能组合的最小二乘差异的高性能计算(n列表)

我正在寻找一种非常有效的方法来计算n个列表中的所有可能组合,然后保持组合与最小的最小二乘差异.

我已经有了一个代码可以做到这一点,但是当它达到数百万个组合时,事情变得缓慢.

candidates_len包含长度列表,即[[500,490,510,600] [300,490,520] [305,497,515]] candidate_name包含名称列表的列表,即[['a',' b','c','d'] ['mi','mu','ma'] ['pi','pu','pa']]

两个列表都有n个列表.

#    Creating the possible combinations and store the lists of lengths in vector r
r=[[]]
for x in candidates_len:
    r = [ i + [y] for y in x for i in r ]
#Storing the names of the combinations and store the lists of identifiers in vector z
z=[[]]
for x in candidates_name:
    z = [ i + [y] for y in x for i …
Run Code Online (Sandbox Code Playgroud)

python performance combinations dictionary least-squares

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

具有glmnet和lm的普通最小二乘法

stackoverflow.com/q/38378118中询问了此问题,但没有令人满意的答案。

LASSO与?= 0等效于普通的最小二乘,但是R glmnet()lm()R中似乎不是这种情况。为什么?

library(glmnet)
options(scipen = 999)

X = model.matrix(mpg ~ 0 + ., data = mtcars)
y = as.matrix(mtcars["mpg"])
coef(glmnet(X, y, lambda = 0))
lm(y ~ X)
Run Code Online (Sandbox Code Playgroud)

它们的回归系数最多相符2个有效数字,这可能是由于其优化算法的终止条件略有不同:

                  glmnet        lm
(Intercept)  12.19850081  12.30337
cyl          -0.09882217  -0.11144
disp          0.01307841   0.01334
hp           -0.02142912  -0.02148
drat          0.79812453   0.78711
wt           -3.68926778  -3.71530
qsec          0.81769993   0.82104
vs            0.32109677   0.31776
am            2.51824708   2.52023
gear          0.66755681   0.65541
carb         -0.21040602  -0.19942
Run Code Online (Sandbox Code Playgroud)

当添加交互项时,差异会更糟。

X = model.matrix(mpg ~ 0 + . + . …
Run Code Online (Sandbox Code Playgroud)

r least-squares lm glmnet

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

编辑最小二乘法线的x极限

我创建了两个散点图,然后使用lsline为每个图添加回归线。我使用以下代码:

for i=1:2
  x = ..;
  y = ..;
  scatter(x, y, 50, 'MarkerFaceColor',myColours(i, :));
end
h_lines = lsline;
Run Code Online (Sandbox Code Playgroud)

但是,较深的线远远超出了该散点图中的最后一个数据点(大约在x = 0.3处):

在此处输入图片说明

lsline似乎没有允许设置其水平范围的属性。在Matlab 2016a中,是否有一种解决方法可分别为这两行设置此设置?

matlab regression least-squares

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