公式推导:
方法一:
def calT(data):#矩阵转置
b = []
for i in range(len(data[0])):#len(A[0])矩阵列数
temp = []
for j in range(len(data)):#len(A)矩阵行数
temp.append(data[j][i])
b.append(temp)
return b
def oneLine(data):
D=calT(data)
xa=sum(D[0])/len(data)
ya=sum(D[1])/len(data)
s1=0
s2=0
for i in range(len(data)):
s1+=(data[i][0]-xa)*(data[i][1]-ya)#data[i][0]:每个样本的第一个数(下标为0)
s2+=(data[i][0]-xa)**2
w=s1/s2
b=ya-w*xa
return w,b
data=[[67,50],[76,55],[86,61],[93,70],[102,78],[123,90],[135,100],[145,107]]
w,b=oneLine(data)
x=145
y=w*x+b
y
方法二:
def oneLine(data):
x=[]
y=[]
for e in data:
x.append(e[0])#取出样本的第一列
y.append(e[1])#取出样本的第二列
xa=sum(x)/len(x)
ya=sum(y)/len(y)
s1=s2=0
for i in range(len(x)):
s1+=(x[i]-xa)*(y[i]-ya)
s2+=(x[i]-xa)**2
w=s1/s2
b=ya-w*xa
return w,b
data=[[67,50],[76,55],[86,61],[93,70],[102,78],[123,90],[135,100],[145,107]]
w,b=oneLine(data)
x=145
y=w*x+b
y