机器学习笔记之多元梯度下降法

梯度下降法作为机器学习中很基础的方法,是我们必须要掌握的。

随机以一组数据作为例子:

x1 x2 x3 xn y
720 1136 3 26 232
916 1201 5 33 384
187 2157 2 51 573

角标作为索引,以角标作为索引

第二行可以写成:
x(2)=[9161201533] x^{(2)} = \begin{bmatrix} 916 \\ 1201 \\ 5 \\ \cdots \\ 33 \end{bmatrix}

位于第二行第一列位置的数写成:
x1(2)=916 x^{(2)}_1=916

以上下角标来区分位置,以便于后期运算。


假设函数

设置一个回归方程
hθ(x)=θ0+θ1x1+θ2x2+θ3x3++θnxn h _\theta(x)=\theta_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\cdots+\theta_nx_n

添加一个列向量 x0x_0:
x0=[11111]T x_0=\begin{bmatrix} 1 & 1 & 1 & 1 & \cdots & 1 \end{bmatrix}^T

这样方程可以写为:
hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3++θnxn h _\theta(x)=\theta_0x_0+\theta_1x_1+\theta_2x_2+\theta_3x_3+\cdots+\theta_nx_n

既不会影响到方程的结果,而且使 xxθ\theta 的数量一致以便于矩阵计算。

为了更方便表达,分别记为:
X=[x0x1x2x3xn],θ=[θ0θ1θ2θ3θn] X = \begin{bmatrix} x_0 \\ x_1 \\ x_2 \\ x_3 \\ \cdots \\ x_n \end{bmatrix} \qquad , \qquad \theta = \begin{bmatrix} \theta_0 \\ \theta_1 \\ \theta_2 \\ \theta_3 \\ \cdots \\ \theta_n \end{bmatrix}

这样方程就变为:
hθ(x)=[θ0θ1θ2θ3θn][x0x1x2x3xn] h _\theta(x) = \begin{bmatrix} \theta_0 & \theta_1 & \theta_2 & \theta_3 & \cdots & \theta_n \end{bmatrix} \begin{bmatrix} x_0 \\ x_1 \\ x_2 \\ x_3 \\ \cdots \\ x_n \end{bmatrix} \\


代价函数

由回归方程推导出代价方程
J(θ0,θ1, ,θn)=12mi=1m(hθ(x(i))y(i))2  J(θ)=12mi=1m(θTXy(i))2  =12mi=1m((j=1nθjxj(i))y(i))2) J(\theta_0,\theta_1,\cdots,\theta_n)=\frac{1}{2m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})^2\\ \ \\ \qquad\qquad \ J(\theta) =\frac{1}{2m}\sum_{i=1}^m(\theta^TX-y^{(i)})^2\\ \qquad\qquad\qquad\qquad\quad \ \ =\frac{1}{2m}\sum_{i=1}^m((\sum_{j=1}^n\theta_jx_j^{(i)})-y^{(i)})^2)


梯度下降

接下来对 θ\theta 进行梯度下降 ( αα为学习率 ):
θj=θjαθjJ(θ)(j=1,2, ,n) \theta_j=\theta_j-α\frac{∂}{∂\theta_j}J(\theta)(j=1,2,\cdots,n)

计算下来:
θ0=θ0α1mi=1m(hθ(x(i))y(i))x0(i)θ1=θ1α1mi=1m(hθ(x(i))y(i))x1(i)θ2=θ2α1mi=1m(hθ(x(i))y(i))x2(i)  θn=θnα1mi=1m(hθ(x(i))y(i))xn(i) \theta_0=\theta_0-α\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_0^{(i)} \\ \theta_1=\theta_1-α\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_1^{(i)} \\ \theta_2=\theta_2-α\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_2^{(i)} \\ \ \\ \cdots \\ \ \\ \theta_n=\theta_n-α\frac{1}{m}\sum_{i=1}^m(h_\theta(x^{(i)})-y^{(i)})x_n^{(i)}

计算时要从 θ0\theta_0 一直计算到 θn\theta_n 后,再从头由 θ0\theta_0 开始计算,以确保数据统一变化。

在执行次数足够多的迭代后,我们就能取得达到要求的 θj\theta_j 的值。


特征缩放和均值归一化

在特征数量很大时,梯度下降算法可能会计算得非常慢。而且在数据 xj(j=1,2, ,n)x_j(j=1,2,\cdots,n) 之间取值范围相差很大的情况下,梯度会变化得很快,不会朝着某一个方向比较平滑地收敛,而是会左右摇摆以至于计算次数增多。

把特征数据处理之后,可以让梯度下降更快地收敛,提高算法效率。

  • 特征缩放

即改变特征的取值范围,使轮廓近似一个圆。左侧为未进行缩放的情况,右侧为进行缩放后的情况:
机器学习笔记之多元梯度下降法

  • 均值归一化

即减均值,再除以标准差,或简单地直接除以最大值与最小值的差,减少特征值取值范围对迭代的影响:
机器学习笔记之多元梯度下降法