我有一个由X和Y坐标组成的散点图.我想使用最小二乘拟合到直线以获得最佳拟合线.
适合直线的最小二乘指的是:如果(x_1,y_1),......(x_n,y_n)是测量的数据对,则最佳直线是y = A + Bx.
这是我在python中的代码:
# number of points is 50
A = (sum(x**2)*sum(y) - sum(x)*sum(x*y)) / (50*sum(x**2) - (sum(x))**2)
B = (50*sum(x*y) - sum(x)*sum(y)) / (50*sum(x**2) - (sum(x))**2)
print (A,B)
Run Code Online (Sandbox Code Playgroud)
这看起来是否正确,我在打印A和B时遇到问题.谢谢!
fan*_*ous 22
如果你只想要一条线,最简单的是scipy.stats.linregress
:
>>> from scipy import stats
>>> slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)
Run Code Online (Sandbox Code Playgroud)
ycy*_*ycy 15
如果我正确理解您的问题,您有两个数据集x
,y
并且您希望执行最小二乘拟合.
你不必自己编写算法,curve_fit
从scipy.optimize
你应该做你想做的,尝试:
from scipy.optimize import curve_fit
def f(x, A, B): # this is your 'straight line' y=f(x)
return A*x + B
popt, pcov = curve_fit(f, x, y) # your data x, y to fit
Run Code Online (Sandbox Code Playgroud)
popt[0]
,popt[1]
将是直线的斜率和截距
有关更多详细信息和示例,请参阅:http: //docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html#scipy.optimize.curve_fit
归档时间: |
|
查看次数: |
29591 次 |
最近记录: |