多特征
在现实的问题中,特征变量往往不仅仅只有一个。我们评估一个人能否成为一个人生赢家,不仅仅要考虑他的家产,还有考虑他的父亲的背景,和他的X能力,他的朋友圈,他的长相,他的身高,体重,等等。这个时候,我们就得到了类似于下面这一个方程:
方程中,各个下标的x分别表示各个不同的特征。这里我只选择了三个特征。
这就叫做多元线性回归。
梯度下降
多变量的梯度下降
对于上面这种具有多个特征的情况,我们仍然可以使用梯度下降算法来求最各个下标的θ,从而使代价函数最小。
多元线性规划的代价函数如图:
通过代价函数求θ的算法如下:
可以看到,这个算法相当的复杂。不过还好现在可以让计算机帮我们计算。
特征缩放
用一个例子来表述什么叫做特征缩放:小时候,我一个月的零用钱只有20元,掉了5元我就会感到很心痛。但是现在,掉了100元我也觉得没有什么。对于一些土豪,一万元也只是毛毛雨。
通过这个例子我想表达的是,做对比的时候应该要在同一个数量级下面,才有可比性。对于多元线性规划同样如此。
对于有多个特征的情况,假设一个特征的变化是1-10,另一个特征的变化是10000-20000,在这种情况下,使用:
这个公式来计算的时候,较小的那个特征就会被较大的那个特征掩盖。这样造成的后果就是,使用梯度下降的时候,迭代次数会非常大才能收敛,效率非常的低。
为了解决这个问题。我们就需要使用特征缩放。
特征缩放分为普通的缩放和归一化特征缩放。其中普通的特征缩放是归一化特征缩放的特殊情况。我们用公式来说话:
这是归一化特征缩放的公式。在这个公式中,:=表示赋值,也就是说,这个值用缩放以后的值来代替。等号右边的分子上,减号左侧的项表示每个特征的某一个具体的样本值,减号右侧的项表示每个特征所有数据的平均值。S表示每个特征说有样本中,最大值减去最小值。
对于非归一化的特征缩放,令分子中,减号右侧的项恒为零。(不支持输入上下标真是太麻烦了。。。。)
这样的好处是,可以使得各个特征的样本的大小都转化到-1到1之间,减少由于差距太大导致的误差。并大大降低梯度下降的迭代次数。
学习率
我们知道,在梯度下降公式里面有一个参数ɑ, 这个参数的名字叫做学习率。这个参数决定了梯度下降的快慢。
一般来说,需要根据经验选择合适的ɑ,如果ɑ太小,梯度下降会收敛很慢,需要迭代很多次才能得到结果。但是如果ɑ太大,就会导致梯度下降发散,从而完全得不到正确的结果。所谓步子太大容易扯着蛋。
但是我们可以使用一个图来帮助我们确定ɑ。我们首先假设ɑ=0.1, 然后,迭代几百次(当然是用计算机来帮忙),分别计算此时代价函数的值j(θ).在一个直角坐标系上,横坐标为迭代次数,纵坐标为j(θ)作图。
一般来说,会得到下图中三种不同的趋势:
其中绿色就是收敛比较快的,这个学习率是比较符合要求的;而蓝色的线表示学习率太低,需要稍稍增大;红色表示学习率太大,需要减小。
另外,根据这个图,当图像趋近于渐进线或者随着迭代次数增加,j(θ)变化很小的时候,就表示迭代完成了,这个时候的θ值也就是我们需要的结果了。
特征与多项式回归
在机器学习的过程中,涉及到的变量是有很多的,现实中的问题不会像一元线性规划那么简单。所以对于采集到的数据来说,也必然不是分布呈一条直线那么简单。如下图:
这个时候,拟合出来的曲线就不是一条直线了。
在高等数学中可以证明,可以使用一个多项式级数(又叫幂级数)来近似的表示一条曲线的解析式。在可以接受的误差范围内,只需要多项式的前若干项即可。
所以,对于样本点,总可以找到这样一个多项式,使其代表的图像穿过尽量多的点:
这里我只取了前三项,在实际情况中可能会有十多项或者几十上百项。
对于这种形式,我们又如何分别求各个下标的θ呢?这个时候就可以使用一个等价来处理了。
我们令:
于是方程转化为:
这样我们就可以使用梯度下降来求各个下标的θ了。
正规方程
使用梯度下降需要设定学习率,如果学习率选定的不好,轻则梯度下降收敛慢,效率低,重则直接发散,无法得到结果。
而是用正规方程就可以解决这个问题。正规方程不需要迭代,也不需要选择学习率,只需要解一个矩阵方程就能得到结果。
首先看下图,这是一个三元的线性规划问题:
首先增加一个第0列,变成如下图所示:
然后我们做一个矩阵X使得:
同时作一个y向量:
这个时候,就有:
使用Matlab或者Octave计算,就能得到使得代价函数最小的各个下标的θ了。
总结
这一周讲的是多元线性规划和使用梯度下降求解多元线性规划的问题。同时讲解了计算梯度下降的两个技巧,分别是特征缩放和学习率的选择。最后讲解了正规方程,在特征数小于10000的时候,使用正规方程,可以大大减小计算的压力。
学习笔记每周也会同步更新到我的微信公众号上面。请关注:未闻Code
独立技术博客请戳->https://www.kingname.info 两个博客内容相同。转载请注明出处。