1.数据的产生
在直线y=2x+5的基础上,加上服从正态分布的噪声。产生20对(x,y)的训练集。
2,模型
设回归方程为y=a*x+b,其中a,b为回归系数,利用梯度下降算法求解系数a,b的值
代码如下:
train_x=c(1:20)
train_y=2*train_x+5
train_error=rnorm(20,mean=0,sd=2)
train_y=train_y+train_error
plot(train_x,train_y,col="red",pch=19,main="x与y的关系图")
#abline(lm(train_y~train_x),col="blue")
#y=a*x+b
a=1.0
b=1.0
#学习效率
e=0.003
#误差,为了简单,这里没有使用,而是直接迭代了指定的次数
error=0.0001
sum_a=0.0
sum_b=0.0
j=0
repeat
{
if(j==2000)
break
sum_a=0.0
sum_b=0.0
for (i in 1:20)
{
sum_a=(train_y[i]-(train_x[i]*a+b))*train_x[i]
sum_b=(train_y[i]-(train_x[i]*a+b))
a=a+e*sum_a
b=b+e*sum_b
}
j=j+1
}
print(a)
print(b)
abline(b,a)
运行结果:
[1] 2.046833 [1] 4.65819