python实现最小二乘法(一元线性)报错_心态爆炸啊
代码如下:
这里开始就出问题了
4.定义算法拟合函数,即把公式表示出来。
# 先把平均值给它求出来
def average(data):
sum = 0
num = len(data)
for i in range(num):
sum+=data[i]
avg = sum/num
return avg
# 开始手敲公式
def LeastSquareMutil(points):
m = len(points)
x_bar = average(points[:,0])
# sum_yx = 0
# sum_x2 = 0
# sum_delta = 0
# for i in range(m):
# x = points[i, 0]
# y = points[i, 1]
# sum_yx += y * ( x - x_bar )
# sum_x2 += x ** 2
# # 根据公式计算w
# w = sum_yx / ( sum_x2 - m * (x_bar**2) )
# for i in range(m):
# x = points[i, 0]
# y = points[i, 1]
# sum_delta += ( y - w * x )
# b = sum_delta / m
sum_yx=0
sum_x2=0
sum_y_xbar=0
sum_y=0
sum_x=0
for i in range(m):
x = points[:,0]# x表示每一行的第0号位元素
y = points[:,1]# y表示每一行的第0号位元素
#先求上半部分
sum_yx+=(y*x)
sum_y_xbar+=(y*x_bar)
#再求下部分
sum_x2+=(x**2)
#出来循环之后,再优化调一下
avg_m_sum_x2=sum_x2/m
w=(sum_yx-sum_y_xbar)/(sum_x2-avg_m_sum_x2)
#接下来计算b
for i in range(m):
x = points[:,0]# x表示每一行的第0号位元素
y = points[:,1]# y表示每一行的第0号位元素
sum_y+=y
sum_x+=x
#出来循环之后,再优化调一下
avg_m_sum_wx = sum_x*w/m
avg_m_sum_y = sum_y/m
b=avg_m_sum_y-avg_m_sum_wx
return w,b