null 机器学习之线性回归 - K码农

输出是一个连续的数值。

1|0模型表示


对于一个目标值,它可能受到多个特征的加权影响。例如宝可梦精灵的进化的 cp 值,它不仅受到进化前的 cp 值的影响,还可能与宝可梦的 hp 值、类型、高度以及重量相关。因此,对于宝可梦进化后的 cp 值,我们可以用如下线性公式来表示:

(1)y=b+i=1nθixi

uploading-image-529221.png

上述的线性函数就是我们的模型,学习目标就是去根据观察的值去拟合权重参数 θ 和偏置 b 。为了简化模型表示,可以令 x0=1 ,和 θ0=b ,则可以将线性函数表示为如下形式:

(2)y=i=0nθixi

表示为矩阵相乘的形式,则我们的目标就是期望学习得到函数 hθ(xi)=θTxi


2|0模型评估


上述的线性函数表示的是一个包含无数个可能的模型的假设空间,每一组 θ 值都会确定一个模型,所以我们需要根据样本空间来找到最佳的模型。

首先,我们需要对模型的好坏进行定义。即什么样的模型是一个好的模型,而什么样的模型是一个坏的模型。模型的好坏的最直观的定义就是预测的值和真实的值之间的差距,如下图所示,黑色的直线是我们学习到的模型,红色的 × 是真实的值,则模型的误差就可以用真实值和预测值之间的欧氏距离来进行评估。距离越小,表示预测的越准确,反之,则表示预测的效果越差。

uploading-image-565564.png

我们用 x(i) 表示第 i 个样本的特征,hθ(x(i)) 表示对该样本的预测值,而 y(i) 则表示对应的真实值。因此,对于模型的误差,我们可以用所有样本的平均误差来表示,即:

(3)L(θ)=12mi=1m(hθ(x(i))y(i))2

这里的 i 和模型表示中的 i 是不同的含义,前者表示第 i 个样本,后者表示样本的第 i 个特征。

上述误差函数又叫做代价函数或损失函数,在线性回归中,通常用均方误差来作为代价函数。

计算代价函数的Python代码如下:

def compute_cost(X, y, theta): inner = np.power(((X * theta.T) - y), 2) return np.sum(inner) / (2 * len(X))

3|0模型学习


有了上述的代价函数之后,我们的学习目标就十分清晰了。我们的目标就是学习到一个模型,使得代价函数的值最小。学习模型其实就是等价于学习权重参数向量 θ ,因此,我们的目标函数也应该是关于参数 θ 的函数。令 θ 表示我们的目标模型,则目标函数可以表示为:

(4)θ=argminθL(θ)(5)=argminθ12mi=1m(hθ(x(i))y(i))2

该目标函数我们可以用梯度下降的方法来求解,即每次都往函数的负梯度的方向去进行搜索。我们知道,一个函数的最小值一般会出现在该函数的极值点上,前提是该函数是凸函数(这里先不对凸函数做过多的阐述)。因此对于一个初始权重参数 θ(0) ,我们可以计算函数在该参数位置的导数,如果导数大于0,则表示目标函数在该点是递增的,则我们需要降低我们的 θ 值。反之,如果当前的导数小于0,则表示目标函数在该点是递减的,为了找到更小的值,我们应该增加我们的 θ 值。过程如下图所示:

uploading-image-998569.png

图片来源于李宏毅《机器学习》2017,w 等价于 θ

很显然,该方法最终会落入到一个极值点,但是该极值点不一定是全局最小值,而可能是局部最小值。因为梯度下降方法在导数为0的点就不会对参数进行更新了,所以当遇到局部最小值点时,由于目标函数的导数为0,所以权重参数会收敛,学习到的模型就不再是一个最佳的模型,找到的这种解叫做局部最优解。

后续在介绍如何解决梯度下降过程中的局部最优解的问题...

现在我们知道了线性回归模型的完整学习过程,其目标就是最小化代价函数来学习得到一组权重参数,而且我们也知道可以利用梯度下降的方法来寻找最佳的权重参数。接下来将介绍如何去更新我们的权重参数。

权重参数 θ 是一个向量,它与样本的特征数目是相对应的,如果样本含有 n 个特征,则权重参数的维度为 n+1 ,注意,还包含一个偏置。对参数向量的求导,实质上就是对各个方向进行偏微分。依然假设我们初始的权重参数向量为 θ(0) ,现在我们求第 j 个权重参数的梯度:

(6)Lθj=12mi=1m2(hθx(i)y(i))xj(i)(7)=i=1m(hθx(i)y(i))xj(i)

此处也很好的解释了为什么目标函数要增加一个 1/(2m) ,这是为了最后更新权重参数时更方便计算。同时,乘以一个正数也不会影响函数的极小值点。

前面分析了,权重参数的更新应该是超该参数的负梯度方向更新。所以对于参数 θj ,其在下一轮的更新值为:

(8)θj(1)=θj(0)αLθj(9)=θj(0)αi=1m(hθx(i)y(i))xj(i)

uploading-image-904090.png

其它的参数更新与上述的更新方式相同,注意:上述式子需要同时更新一组参数 (θ0,θ1,,θn) 后再进行下一次迭代。α 是学习率。

上述的更新方式叫做批量梯度下降,即每次根据所有样本的综合误差来更新参数。相对应的被称为随机梯度下降,即每计算一个样本的值就更新权重参数。两者的区别和优缺点后续再进行介绍。梯度下降在很多机器学习算法中都有使用,包括大部分的深度学习,所以一定要理解其原理。

uploading-image-873493.png

4|0模型总结


现在我们已经对线性回归的原理和问题解决方法都有了一定的了解,接下来将对整个算法的流程进行总结,并分析线性回归存在的一些问题,以及优化的方法。

4|1算法流程


  1. 根据特征维度随机初始化一组参数 (θ0,θ1,,θn)
  2. 根据该参数计算所有样本的预测值 hθ(x)
  3. 根据公式(9)更新权重参数;
  4. 重复执行步骤2和步骤3,直到权重参数收敛或者达到一定的迭代次数。

4|2存在的问题


  • 只适用于解决线性可分的问题,因为目标函数是多种变量的线性组合;
  • 对异常值敏感

4|3算法优化


包括岭回归和Lasso回归。


__EOF__

作  者木牛马
出  处https://www.cnblogs.com/ydcode
关于博主:研三算法狗,奔返于找工作和论文...
版权声明:本博客的所有原创文章均会同步更新到我的公众号【街尾杂货屋】上,喜欢的可以左边扫码关注。转载请私信。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!