认识回归
回归是统计学中最有力的工具之一。回归的目的就是建立一个回归方程用来预测目标值,回归的求解就是求这个回归方程的回归系数。预测的方法当然十分简单,回归系数乘以输入值再全部相加就得到了预测值。
回归最简单的定义是,给出一个点集D,用一个函数去拟合这个点集,并且使得点集与拟合函数间的误差最小,如果这个函数曲线是一条直线,那就被称为线性回归,如果曲线是一条二次曲线,就被称为二次回归。
线性回归是机器学习中最基本的一个算法。
线性回归
线性回归也被称为最小二乘法回归(Linear Regression, also called Ordinary Least-Squares (OLS) Regression)。它的数学模型是这样的:
y = b + m* x+e
其中,b 被称为常数项或截距;m 被称为模型的回归系数或斜率;e 为误差项。a 和 b 是模型的参数。
当然,模型的参数只能从样本数据中估计出来:
y'= b' + m'* x
线性回归包括一元线性回归和多元线性回归,一元的是只有一个 x 和一个 y。多元的是指有多个 x 和一个 y。一元线性回归其实就是去找到一条直线,这条直线能以最小的误差 (Loss) 来拟合数据。
误差评估
如上图所示,横坐标表示x,纵坐标表示y,我们希望找到一条直线,距离每个点都很近,最好所有的点都在直线上(但是多数情况下都不现实)。因此,实际只能让这些点尽量离找到的直线近一点,即保证每个点和直线的距离总和最小。
每个点和直线的距离可表示为:
那么,所有点与直线距离的和即为误差,为简单起见,将绝对值转化为平方,则误差可表示为:
这里,i 表示第 i 个数据,N 表示总的样本个数。一般我们还会把 Loss 求和平均,来当作最终的损失。
误差最小
我们要怎么去找到最能拟合数据的直线,即最小化误差呢? 一般有两个方法:
(1)Normal Equation(也叫普通最小二乘法)
上面讲了我们定义的损失,其中的 x,y,i,N 都已知,那么我们就可以把这个方程看作是 m 和 b 的方程。作为一个 m 和 b 的二次方程,那么求 Loss 最小值的问题就转变成了求极值问题,这个高数学过的都应该知道点。
求极值
令每个变量的偏导数为零,求方程组的解,这个是很基础的高数问题了。解方程组得到 m 和 b 的值,即确定了直线的方程。
(2)梯度下降法(Gradient Descent)
没有梯度下降就没有现在的深度学习,这是一个神奇的算法。 最小二乘法可以一步到位,直接算出 m 和 b,但他是有前提的,具体我有点记不清了,好像是需要满秩什么的。梯度下降法和最小二乘不一样,它通过一步一步的迭代,慢慢的去靠近到那条最优直线。 最小二乘法里面我们提到了两个偏导数,分别为
梯度不就是上面那两个公式呗。现在梯度有了,那每次滑多远呢,一滑划过头了不久白算半天了吗,所以还得定义步长,用来表示每次滑多长。这样我们就能每次向下走一点点,再定义一个迭代值用来表示滑多少次,这样我们就能慢慢的一点点的靠近最小值了,不出意外还是能距离最优值很近的。
梯度算法实现
每次向下滑要慢慢滑,就是要个步长,我们定义为learning_rate,往往很小的一个值。向下滑动的次数,就是迭代的次数,我定义为num_iter,相对learning_rate往往很大。定义好这两个,我们就可以一边求梯度,一边向下滑了。就是去更新m和b。
这里用了加号,很多人会误以为梯度下降就要减,但是其实梯度本身是有方向的,所以这里直接加就可以。
如下图所示,我们做的初始化
然后就是优化器,优化器就是去做梯度下降
它里面的具体步骤,如下
里面的compute_gradient方法就是去计算梯度做参数更新
本篇博客内容主要来自优快云博客(http://blog.youkuaiyun.com/sxf1061926959/article/details/66976356),并结合其他网络资料适当整理后作为学习笔记供博主日后学习参考,如有冒犯,请联系博主。