线性回归和梯度下降模型

线性回归和梯度下降模型

概要

本文主要讲解线性回归模型的原理,并以python和paddlepaddle为例讲解怎么实现一个线性回归模型,并用matplotlib画出训练后的效果。

线性回归

机器学习中的分类和回归是两种有监督学习的方法,分类是指区分出类别,比如分辨哪些是猫,区分男人女人。而回归问题是指根据输入,给出的输出是一个具体的数值;比如房价预测,比如天气预测等。

而线性回归,是指训练出来的模型是一个线性模型(一条直线)。如y= ax + b,如图1-1所示。

1-1

一般的模型训练,一般分为几个过程:模型的选择,定义损失函数,参数初始化,模型训练。下面的文章中会根据这几项展开讲解。

模型训练

1)模型选择

线性回归中,我们定义我们的模型为Y = WX + b;说明:如果我们的训练数据属性是多维的(比如人有身高,体重等),那么W就是多维数组;

2)损失函数

线性回归中用到的损失函数是估计值和真实值直接的方差

其中h(x)=

是我们估计的值,m是训练集的个数。我们的目标是让损失函数尽量的小,损失函数越小,证明训练的模型越能拟合训练数据。为什么线性回归要选择平方差做损失函数呢?从几何意义上说,满足预测值和真实值之间的最小距离,并且这个损失函数是凸函数,存在全局最优解,可以用梯度下降求解。具体解释见:https://blog.csdn.net/saltriver/article/details/57544704

3)梯度下降

怎么能让损失函数尽量的小呢,一般有采用梯度下降来求解参数,使得损失函数达到最小。

什么是梯度下降呢?其实是按照参数的导数方向,一点点下降,直到下降到函数的最小值点,就是需要求解的参数。

图2

)

其中a是每次下降的步长,w和b沿着导数方向,每次下降一步,去尝试找损失函数的最小值,下面用房价预测的例子,来进行说明。

房价预测实例-python

现在我们用房价预测的实例在解释说明下线性回归模型。

在房价模型中,我们用房子面积来预测房价,因为就一个面积的纬度,那么我们的模型函数是:

模型: h(w,b) = w*x + b

损失函数:

梯度:dW = dJ(W,b)/dW =

db = dJ(W,b)/db =

数据集:data.txt

python代码:fangjia.py

1)参数初始化

有两个需要做参数初始化,一个是w,一个是b;还有一个learning_rate需要设定;如果w和b设定不好,训练出来的数据就达不到好的效果;如果learning_rat设置的过大,cost函数就会一会大一会小,在本文中w初始=10,b初始=-1,learning_rat=0.000005。大家可以设置下learning_rat=0.005,就可以看到cost就是忽高忽低的状态。初始化代码如下:

2)参数训练

图3

代码主要在fangjia.py中,上图是计算模型的核心部分,主要计算dw和db,代码中用python的numpy实现了求导计算的过程。

然后执行fangjia.py,可以看到cost下降的过程,如图4,并且最后训练300次后,得出的训练结果 w=6.4,b=-1.04;把这个训练结果放入到plot_data.py中可以看到最终的训练结果。

图4

图5

全部代码:

房价预测实例-paddlepaddle

下面是使用百度paddlepaddle的实现结果,具体代码就不介绍了,有机会我们单独讨论。

paddlepaddle的运行结果为:

w = 7.1 b=-61,结果如图6

图6

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180401G0NK0900?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券