lstsq试图解决Ax=b最小化问题|b - Ax|.scipy和numpy都提供了一个linalg.lstsq具有非常相似的界面的功能.该文件没有提及使用哪种算法,既不scipy.linalg.lstsq也不对numpy.linalg.lstsq,但似乎做几乎相同.
对于scipy.linalg.lstsq和numpy.linalg.lstsq,实现似乎有所不同.两者似乎都使用LAPACK,两种算法似乎都使用了SVD.
区别在哪里?我应该使用哪一个?
注意:不要混淆linalg.lstsq与scipy.optimize.leastsq这也可以解决非线性优化问题.
我试图在2个数据阵列上实现线性最小二乘拟合:时间与幅度.到目前为止,我所知道的唯一技术是测试(y = m*x + b)中所有可能的m和b点,然后找出哪种组合最适合我的数据,以便它具有最小的误差.但是,我认为迭代这么多组合有时是无用的,因为它测试了所有东西.有没有什么技术可以加快我不了解的过程?谢谢.
我对数学的了解有限,这就是我可能被困的原因.我有一个光谱,我试图适应两个高斯峰.我可以适应最大的峰值,但我无法适应最小的峰值.我知道我需要对两个峰值的高斯函数求和,但我不知道哪里出了问题.显示当前输出的图像:

蓝线是我的数据,绿线是我目前适合的.在我的数据中主峰左侧有一个肩膀,我目前正在尝试使用以下代码:
import matplotlib.pyplot as pt
import numpy as np
from scipy.optimize import leastsq
from pylab import *
time = []
counts = []
for i in open('/some/folder/to/file.txt', 'r'):
segs = i.split()
time.append(float(segs[0]))
counts.append(segs[1])
time_array = arange(len(time), dtype=float)
counts_array = arange(len(counts))
time_array[0:] = time
counts_array[0:] = counts
def model(time_array0, coeffs0):
a = coeffs0[0] + coeffs0[1] * np.exp( - ((time_array0-coeffs0[2])/coeffs0[3])**2 )
b = coeffs0[4] + coeffs0[5] * np.exp( - ((time_array0-coeffs0[6])/coeffs0[7])**2 )
c = a+b
return c
def residuals(coeffs, counts_array, time_array):
return …Run Code Online (Sandbox Code Playgroud) 我有兴趣制作一个带有最小二乘回归线和连接数据点与回归线的线段的图,如图所示,称为垂直偏移:http: //mathworld.wolfram.com/LeastSquaresFitting.html alt text http ://mathworld.wolfram.com/images/eps-gif/LeastSquaresOffsets_1000.gif
我在这里完成了情节和回归线:
## Dataset from http://www.apsnet.org/education/advancedplantpath/topics/RModules/doc1/04_Linear_regression.html
## Disease severity as a function of temperature
# Response variable, disease severity
diseasesev<-c(1.9,3.1,3.3,4.8,5.3,6.1,6.4,7.6,9.8,12.4)
# Predictor variable, (Centigrade)
temperature<-c(2,1,5,5,20,20,23,10,30,25)
## For convenience, the data may be formatted into a dataframe
severity <- as.data.frame(cbind(diseasesev,temperature))
## Fit a linear model for the data and summarize the output from function lm()
severity.lm <- lm(diseasesev~temperature,data=severity)
# Take a look at the data
plot(
diseasesev~temperature,
data=severity,
xlab="Temperature",
ylab="% Disease Severity",
pch=16,
pty="s", …Run Code Online (Sandbox Code Playgroud) 我正在寻找一个C语言库,它将对目标函数进行优化(最好是Levenberg-Marquardt算法),并且将支持框约束,线性不等式约束和非线性不等式约束.
我已经尝试了几个库,但它们都没有为我的应用程序使用必要的约束类型:
我目前正在探索NLopt,但我不确定我是否可以使用任何提供的算法实现最小二乘法.
我发现很难相信没有一个库可以支持这个问题的全部限制,所以我猜我在google搜索时出错了.
我最近发现我可以从C调用Matlab函数.虽然这很容易解决问题,但我不想从C调用Matlab函数.根据我的经验,这并不快.
任何帮助将不胜感激.
SciPy为非线性最小二乘问题提供了两个函数:
optimize.leastsq() 仅使用Levenberg-Marquardt算法.
optimize.least_squares() 允许我们选择Levenberg-Marquardt,Trust Region Reflective或Trust Region Dogleg算法.
我们应该总是用least_squares()而不是leastsq()吗?
如果是这样,后者的目的是什么?
我试图绘制一个最小二乘回归线使用abline(lm(...))它也被迫通过一个特定的点.我看到这个问题是相关的,但不是我想要的.这是一个例子:
test <- structure(list(x = c(0, 9, 27, 40, 52, 59, 76), y = c(50, 68,
79, 186, 175, 271, 281)), .Names = c("x", "y"))
# set up an example plot
plot(test,pch=19,ylim=c(0,300),
panel.first=abline(h=c(0,50),v=c(0,10),lty=3,col="gray"))
# standard line of best fit - black line
abline(lm(y ~ x, data=test))
# force through [0,0] - blue line
abline(lm(y ~ x + 0, data=test), col="blue")
Run Code Online (Sandbox Code Playgroud)
这看起来像:

现在,我将如何强制线穿过标记的任意点,(x=10,y=50)同时仍然最小化到其他点的距离?
# force through [10,50] - red line
??
Run Code Online (Sandbox Code Playgroud) scipy lib中的leastsq方法适合某些数据的曲线.并且此方法意味着在此数据中Y值取决于某些X参数.并计算曲线与Y轴(dy)中数据点之间的最小距离
但是如果我需要计算两个轴的最小距离(dy和dx)怎么办?
有没有办法实现这个计算?
以下是使用一个轴计算时的代码示例:
import numpy as np
from scipy.optimize import leastsq
xData = [some data...]
yData = [some data...]
def mFunc(p, x, y):
return y - (p[0]*x**p[1]) # is takes into account only y axis
plsq, pcov = leastsq(mFunc, [1,1], args=(xData,yData))
print plsq
Run Code Online (Sandbox Code Playgroud)
我最近尝试了scipy.odr库,它只返回线性函数的正确结果.对于y = a*x ^ b等其他函数,它返回错误的结果.这就是我使用它的方式:
def f(p, x):
return p[0]*x**p[1]
myModel = Model(f)
myData = Data(xData, yData)
myOdr = ODR(myData, myModel , beta0=[1,1])
myOdr.set_job(fit_type=0) #if set fit_type=2, returns the same as leastsq
out = myOdr.run() …Run Code Online (Sandbox Code Playgroud) 我有两组3D点(原始和重建)和关于对的对应信息 - 从一组代表第二组.我需要找到转换重建集的3D平移和缩放因子,因此平方距离的总和最小(旋转也会很好,但点也是相似的,因此这不是主要优先级,为简单起见可能省略速度).所以我的问题是 - 这是解决并在互联网上的某个地方可用吗?就个人而言,我会使用最小二乘法,但我没有太多时间(虽然我有点擅长数学,但我不经常使用它,所以我最好避免使用它),所以我如果它存在,我想使用其他的解决方案.我更喜欢C++中的解决方案,例如使用OpenCV,但仅凭算法就足够了.
如果没有这样的解决方案,我会自己计算,我不想打扰你.
解决方案:(从你的答案)
对我而言,它是Kabsch alhorithm;
基本信息:http ://en.wikipedia.org/wiki/Kabsch_algorithm
一般解决方案:http://nghiaho.com/?page_id = 671
仍然没有解决: 我也需要规模.来自SVD的比例值对我来说是不可理解的; 当我需要所有轴的比例约为1-4(由我估计)时,SVD比例约为[2000,200,20],这根本没有帮助.
least-squares ×10
scipy ×4
c ×3
python ×3
algorithm ×2
plot ×2
point ×2
r ×2
regression ×2
statistics ×2
c++ ×1
gaussian ×1
line ×1
math ×1
numpy ×1
optimization ×1