系列文章目录
第七章 Python 机器学习入门之特征缩放与多项式回归
一、如何检测梯度下降是否收敛
检测梯度下降是否收敛 checking gradient descent for convergence
当我们进行梯度下降时,怎么知道它是不是收敛,找到接近代价函数的全局最小值的参数
其中一个关键就是学习速率的选择
回想一下,梯度下降的任务就是找到参数w 和 b ,希望能够最小化 代价函数j
如图 横轴表示迭代次数 iterations , 曲线被叫做是学习曲线,使用机器学习有几种不同类型的学习曲线,
可以看到,每100次迭代后,代价函数都有很大的下降,如果随着迭代次数的增加 而代价函数上升的话,那可能是学习速率选的太差,或者有bug
图中,当迭代次数达到300次后,代价函数j 趋于稳定,到400次看上去就不再下降了。这时候梯度下降就可以说是收敛了,代价函数J 的值与全局最小值接近,此时的参数w,b 就是我们需要的。
注意:迭代次数在不同的应用程序之间可能会有很大的差异,在一个应用程序中,它可能迭代50次就收敛了,可是有的应用程序,迭代50000次都不一定收敛。
另一种确定模型何时完成训练的方法是使用自动收敛检测,大致的就是设置一个参数,给它赋值一个很小的值,然后迭代后的代价函数j
小于这参数,什么代价函数J趋于稳定了,这时候也可以说找到的代价函数很接近全局最小值了。
一般情况,使用第一种方法比较好,因为第二种方法我们无法准确的确定参数的值
二、学习速率的选择
学习速率的选择 choosing the learning rate
如果选择适当的学习速率,我们的学习算法会运行的更好。
如果学习速率太小,算法运行的就会很慢,如果学习速率太大,算法运行可能一直无法收敛
那么如何去为我们的模型选择一个好的学习速率呢?
如图所示,如果我们绘制了多次迭代的代价函数图,发现代价函数的值有时会上升,有时会下降,这就说明梯度下降不能正常的工作了。
原因可能是代码中有一个错误,也可能是学习速率太大了
如果发现代价函数的值一直上升,那也有可能是因为我们选择的学习速率太大了,它可以通过选择一个较小的学习速率来解决
一般在训练模型时,可以将学习速率设置的很小,然后再慢慢增加,
如果学习速率很小,但是代价函数经过迭代还会增加,那就说明我们的代码在哪个地方出错了
三、特征工程
特征工程 feature engineering
特征工程是将原始数据转化成更好的表达问题本质的特征的过程,使得将这些特征运用到预测模型中能提高对不可见数据的模型预测精度。
特征工程简单讲就是发现对因变量y有明显影响作用的特征,通常称自变量x为特征,特征工程的目的是发现重要特征。
如何能够分解和聚合原始数据,以更好的表达问题的本质?这是做特征工程的目的。
四、多项式回归
多项式回归 polynonial regression
前面提到了什么是特征工程,我们利用多元线性回归和特征工程的思想,就可以提出一种新的多项式回归算法
如图,这是一个住房的数据集,我们想要拟合出一条直线,不难发现它并不是一条直线,而是一条曲线,
所以这条曲线的表达式就是一个多项式,如果是一个二次函数的话,它达到最高点后又会下降,而正常情况房子越大价格应该越高的,
所以二次函数并不适合我们的模型,这时候可以选择一个三次函数,当然也可以是其它次幂
如果我们使用特征工程的话,我们可能会自己设定一些特征,比如说x的3次方,这时候特征缩放就变得更加重要了,因为x 是房子的面积,是一个很大的值,x 的3次方会更大,
所以我们在进行梯度下降gradient descent 时,需要使用特征缩放 feature scaling 来让我们的
特征进入可比的范围值