def least_squares_function(x, y):
"""
参数:
x -- 样本 x 取值列表
y -- 样本 y 取值列表
返回:
w0 -- 线性方程参数, 保留两位小数
w1 -- 线性方程参数, 保留两位小数
"""
size=len(x)
i=0
sum_xy=0
sum_x=0
sum_y=0
sum_square_x=0
while i < size:
sum_xy += x[i] * y[i]
sum_x += x[i]
sum_y += y[i]
sum_square_x += x[i] * x[i]
i += 1
w1 = (size * sum_xy - sum_x * sum_y) / (size * sum_square_x - sum_x * sum_x)
w0 = (sum_square_x * sum_y - sum_x * sum_xy) / (size * sum_square_x - sum_x * sum_x)
w1=round(w1,2)
w0=round(w0,2)
return w0, w1 # 务必按此顺序返回
if __name__=="__main__":
x=[1,2,3,4]
y=[4,5,6,7]
w0,w1=least_squares_function(x,y)
print(w0,w1)
可视化
import matplotlib.pyplot as plt
from pylab import mpl
def least_squares_function(x, y):
"""
参数:
x -- 样本 x 取值列表
y -- 样本 y 取值列表
返回:
w0 -- 线性方程参数, 保留两位小数
w1 -- 线性方程参数, 保留两位小数
"""
size=len(x)
i=0
sum_xy=0
sum_x=0
sum_y=0
sum_square_x=0
while i<size:
sum_xy+=x[i]*y[i]
sum_x+=x[i]
sum_y+=y[i]
sum_square_x+=x[i]*x[i]
i+=1
w1=(size*sum_xy-sum_x*sum_y)/(size*sum_square_x-sum_x*sum_x)
w0=(sum_square_x*sum_y-sum_x*sum_xy)/(size*sum_square_x-sum_x*sum_x)
return w0, w1 # 务必按此顺序返回
def calculate(x,w0,w1):
y=[]
for i in x:
y.append(w0+w1*i)
return y
if __name__=="__main__":
x=[1,2,3,4]
y=[4,5,6,7]
x = [1, 2, 3, 4, 5, 6, 7];
y = [0.5, 2.5, 2, 4, 3.5, 6, 5.5]
w0,w1=least_squares_function(x,y)
print(w0,w1)
plt.scatter(x, y,label='离散数据')
plt.plot(x, calculate(x,w0,w1), label="拟合曲线",color="black")
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
plt.title("最小二乘法")
plt.legend(loc="upper left")
plt.show()