线性回归
线性回归通常是利用已知的数据集,来预测未来的数据的大小。例如利用往年的房价数据集来预测未来的房价。
梯度下降法
本次利用梯度下降法求线性回归,是属于监督学习的范畴。通过真实值与预测值的差来求代价函数。
下面直接看代码:
import matplotlib.pyplot as plt
import numpy as np
x=np.array([1,1,1,1,2,2,2,3,3,3,3,3,4,4,4,5,5,6,6,6,7,8,8,9,9])
y=np.array([1,2,2,3,3,3,4,4,5,5,5,5,5,5,6,6,8,8,9,9,10,10,7,12,13])
T=np.arctan2(y,x)
a=0.001 #learning_rate
def cost_b(k,b,X,Y):#代价函数的偏导数
loss=np.sum(k*X+b-Y)/len(X)
return loss
def cost_k(k,b,X,Y):
loss=np.sum((k*X+b-Y)*X)/len(X)
return loss
def cost(k,b,X,Y):#求得损失值
loss=np.sum((k*X+b-Y)**2)/(2*len(X))
return loss
#初始化
k=-1
b=1
print('请输入训练的次数')
time=int(input())
i=0
while i<time:
b0=b
k0=k
b=b0-a*cost_b(k0,b0,x,y)
# print('b: ',b)
# print('k: ',k)
k=k0-a*cost_k(k0,b0,x,y)
loss=cost(k,b,x,y)
print('loss: ',loss)
i+=1
X=x
Y=k*x+b
plt.plot(X,Y)
plt.scatter(x,y,s=75,c=T,alpha=0.3)
plt.show()
上图为训练100次的拟合效果
上图为训练1000遍的拟合效果