视频课简记:
4、多变量线性回归
4.1 多维特征
之前给的数据集只知道一个size特征,现在要开始引入多种特征啦。
我们可以列出函数h的表达式:
简单从表达式层面上理解一下,theta0是不会被变量影响的参数,而theta1、2、3...n分别代表了不同特征对房价影响的权重。比如说theta1=0.00000001,那x1就可能是售楼小姐有多美这种因素了吧哈哈哈,and,若是theta2=10000, 那怕不是就是风水好不好啊这种挺多人比较看重的因素了。(题外话,这里的函数和之前我看的投资组合的概念有点像啊,那里的系数就是这里的,大小取决于每个股票对市场波动的反应,好的投资组合可以降低非系统性风险,而代表的就是系统性风险,最好就是最后后面的全部抵消,剩下一个(非系统性风险),是不能被消除的。不过机器学习的研究好像不是这个方向?后面好像还要选择对预测有帮助的特征?反正数学真是无处不在)
然后我们根据线代常识可以把上式写成向量内积的形式:,就简洁美观很多啦!
4.2 多变量梯度下降
和单变量线性回归一样,我们在多变量线性回归中也给他构建一个代价函数,这个代价函数是所有建模误差的平方和:
我们在这里的目标也是找出使得J function最小的一组,公式也和之前大同小异
开始随机选择一系列的参数值,计算所有的预测结果后,再给所有的参数一个新的值,如此循环直到收敛。附计算代价函数的python代码:
4.3 梯度下降法实践 1-特征缩放
在面对多特征问题时,若特征之间的尺度相差太大,要让他们具有相似的尺度才行(应该可以理解为他们的单位不同要化成差不多的单位吧)为什么要呢?因为加快梯度下降法的收敛速度。比如有两个特征,房屋尺寸和房间数,一个的范围是0-2000平方,一个是0-5间,差距太大导致绘制出来的椭圆形又长又扁
可以看到在执行梯度下降算法的时候,算法并不能有效得直接去最低点,并且路线十分曲折(贪心思想所致),因此在特征缩放之后,两个特征的尺度都控制在相似的范围内,图形几乎能成一个圆形
缩放大概到什么程度的参考:
可以看到相似的特征尺度可以让梯度下降算法前往下一条等高线,效率更高。最简单的缩放是其中是平均值,是标准差
4.4 梯度下降法实践 2-学习率
现在围绕之前提到过的学习率展开讨论。为了判断梯度下降算法是否收敛,可以画出J(θ)随迭代步数变化的曲线,用来判断梯度下降算法是否收敛,直观,简单粗暴:
之前提到过学习率过大过小都可能导致梯度下降算法最终发散,下面是三种学习率过大的情况
出现这些情况就要适当减小学习率了,不过也有可能是代码bug。
学习率α太小,可能导致梯度下降算法收敛的非常慢;学习率α太大,可能导致梯度下降算法在某几次迭代时不下降,反而增加,甚至不能收敛。为了弄清到底发生了什么,可以画出J(θ)随迭代步数变化的曲线。一般是先用小值比如0.0001试一下,再逐渐增大,当找到一个的可行的最小值和一个最大值,就取比最大值小一点的数值。
4.5 特征和多项式回归
在特征的选择上,回到房价预测的例子,我们一开始用的特征是size,那么现在我们用两个特征,一个是房屋的长,一个是房屋的宽那么我们的假设函数h就变成了
其实size=length*width的话,我们就可以把上面两个特征用之前的size一个特征来表示,这是一种选特征的思路要记住。
还有一个概念是多项式回归:
对于这样的数据集,我们第一眼看上去就觉得二次函数模型可以很好的拟合,但是二次函数在后面是会下降的,显然随着房屋面积的增大房价下降不是很合理呀!那我们也可以用三次函数,就是图中绿色的线,来拟合看上去也不错。其实在这里三次项和二次项都可以换成size的三次方和二次方,从一个特征变成三到两个特征也是可以的,但是要记得特征缩放!
4.6 正规方程
除了前面的梯度下降算法,现在学习一个叫正规方程的方法去求解的最优解。其提供了一种解析解法,等于是一步就可以求出最优值而不需要像梯度下降算法那样多次迭代,举个栗子,比如只有一个特征,那么他的代价函数J可以表示为,其中实一个数而不是之前多特征时候的向量了。而这个函数很明显我们只需要设它对求导的值等于0,求出满足条件的就好啦。
若是个n+1维的参数向量,换句话说就是数据集有多个特征时要怎么做?视频课直接给了一个公式:,其中X是数据集的特征的一个m*(n+1)的矩阵,y是m维向量,在这里是价格(数据的标签)
那个求得公式不太懂,要多看这个参考:
正规方程推导过程 - guang_mang的博客 - CSDN博客
看了几遍基本理解,但是矩阵求导的一些东西还不太熟练,所以只能算模棱两可。
至于什么时候用梯度下降算法,什么时候用正规方程法,我们先看一下他们的比较:
所以在线性回归算法中,特征数量少于一万用正规方程,大于一万开始考虑梯度下降算法。然鹅后面学的一些更复杂的算法,正规方程法是派不上用场滴,而梯度下降就还是效率蛮高的,所以要重视这个算法。下面展示一下python简单实现正规方程的计算:
4.6 正规方程的不可逆性
通过线代可以知道行列式为零的矩阵是不可逆的,所以公式中的有没有可能不可逆呢?当然是有滴,视频说了两种情况,第一,若是有多余的特征,用线代的话说就是一组特征向量可以被另一组线性表示,那他们就是线性相关的,导致了矩阵行列式为0即矩阵不可逆。所以要确保特征向量之间都是线性无关滴(上半年学的线代还是有用的hahhhh)第二种情况是数据太少特征太多,这时候也会导致这个问题。
但是这种事情很少出现,或者代码是可以计算不可逆矩阵的(调用伪逆函数),所以在这里先了解一下。
小总结:
这周的内容还是蛮多的,也比之前难理解多了。就像正规方程这个概念,用它?OK没问题,什么情况下用它什么情况下不用?ok也是知道的,但是那个计算公式直接摆出来,就很难去理解它背后的意义。上面也附上了公式的推导过程,里面运用到了许多矩阵的性质,以及矩阵求导等等,理解起来还是比较费劲,但是除了自己动手推导一遍外,也理解的差不多了。
好像线性回归算法到此为止了?接触了机器学习内的入门算法,希望未来的学习顺利。小作业的python代码在jupyter notebook按照下面链接实现了一次。