第七章 Python 机器学习入门之特征缩放与多项式回归
特征缩放可以使得梯度下降 gradient descent 的幅度更大,程序运行的更快,
我们先来看看特征的大小,也就是特征的数值大小与相关参数的大小之间的关系
举个例子,我们使用两个特征值X来预测房子的价格,
假设这两个特征值分别是:x1房子的大小, x2卧室的数量
很明显x1 要比 x2 大的多
如果已知一个房子的大小为2000,有5个卧室,价格为500k,我们来求其它两个参数w1,w2
不难发现当一个特征x1较大时,与之对应的参数w1应该较小,反之也是一样
下面来看看特征的散点图,左边,
横轴房子的大小比纵轴卧室的规模要大得多,或者说取值的范围要大得多
来看看代价函数的等高线图,右边,横轴的取值范围很小,纵轴很大,这说明w1一个很小的变化都会对估计价格产生很大的影响,对代价函数也会有很大的影响,因为w1要乘以一个很大的数 房子的大小,而w2 与之相反。

如果我们直接使用训练数据,当使用梯度下降来使得代价函数最小化时,它可能会来回跳很长时间才能找到,原因就是w1一个很小的变化都会对代价函数产生很大的影响,
为了解决这个问题,一个有用的做法就是特征缩放,就是对训练数据做一些转换,
如果我们可以将两个特征的取值范围都缩放到0到1之间,
那么使用梯度下降来找到代价函数最小值是不是更加简单了。

如果一个特征x1 的取值范围是300 到 2000,那么一种特征缩放的方法就是除以最大值,将x1/2000,缩放后x1的取值范围在0.15到1之间。
另一种方法是均值归一化,重新计算训练数据,使它们都在0附件,取值范围在(-1,1)间,
如果要对x1数据进行均值归一化,我们首先要在数据集上找到平均值u1,计算公式如图
第三种方法是z-score 归一化,我们需要计算每个特征的标准差
总结一下,当我们的特征值的取值范围太大或者太小时,使用梯度下降来使得代价函数最小化会很慢,这时候我们一般都会进行特征缩放。
总结一下,当我们的特征值的取值范围太大或者太小时,使用梯度下降来使得代价函数最小化会很慢,这时候我们一般都会进行特征缩放。