最小二乘拟合直线python代码

时间:2014-03-07 02:27:47

标签: python plot

我有一个由X和Y坐标组成的散点图。我想使用最小二乘拟合到直线以获得最佳拟合线。

适合直线的最小二乘是指:如果(x_1,y_1),......(x_n,y_n)是测量的数据对,则最佳直线是y = A + Bx。 / p>

这是我在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)

这看起来是否正确,我在打印A和B时遇到问题。谢谢!

3 个答案:

答案 0 :(得分:21)

如果您只想要一行,则最简单的是scipy.stats.linregress

>>> from scipy import stats
>>> slope, intercept, r_value, p_value, std_err = stats.linregress(x,y)

Link to docs

答案 1 :(得分:13)

如果我理解你的问题,你有两个数据集xy,你想要进行最小二乘拟合。

您不必自己编写算法,curve_fit的{​​{1}}应该做您想做的事,请尝试:

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 A,B = curve_fit(f, x, y)[0] # your data x, y to fit A将是直线的斜率和截距

有关更多详细信息和示例,请参阅: http://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.curve_fit.html#scipy.optimize.curve_fit

答案 2 :(得分:0)

您正在尝试将两个列表xy(或单独)相乘,但它未在Python中定义。您需要编写自己的函数来逐个元素地进行列表乘法或使用numpy.multiply。例如,如果你想进行x和y的按顺序乘法,

import numpy as np
xy = np.multiply(x,y)