机器学习——梯度下降法的应用

1 线性回归

  目标属性与已知属性(已知属性的变形或已知属性的组合)存在一种线性关系。
h ( x ) = X θ h(x)= X\theta h(x)=Xθ
X = [ 1 x 1 1 x 2 1 … x n − 1 1 x n 1 1 x 1 2 x 2 2 … x n − 1 2 x n 2 1 x 1 3 x 2 3 … x n − 1 3 x n 3 … … … … … … … … … … … … ] m × ( n + 1 ) θ = [ θ 0 θ 1 θ 2 … θ n ] 1 × ( n + 1 ) X=\begin{bmatrix} 1&x^1_1&x^1_2& \dots &x^1_{n-1}&x^1_{n}\\ 1&x^2_1&x^2_2&\dots&x^2_{n-1}&x^2_{n}\\ 1&x^3_1&x^3_2&\dots&x^3_{n-1}&x^3_{n}\\ \dots&\dots&\dots&\dots&\dots&\dots\\ \dots&\dots&\dots&\dots&\dots&\dots\\ \end{bmatrix} _{m\times (n+1)} \qquad \theta=\begin{bmatrix} \theta_0\\ \theta_1 \\ \theta_2\\ \dots\\ \theta_n\\ \end{bmatrix} _{1\times (n+1)} X=111x11x12x13x21x22x23xn11xn12xn13xn1xn2xn3m×(n+1)θ=θ0θ1θ2θn1×(n+1)
  上标:m表示样本容量。下标:n表示特征数。
  第一列是额外添加的

1.1 代价函数

  采用 “均方误差” 来度量模型性能
J ( θ ) = 1 2 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 J(\theta)=\frac{1}{2m} \sum_{i=1}^{m} \Big( h(x^{(i)})-y^{(i)} \Big) ^2 J(θ)=2m1i=1m(h(x(i))y(i))2
   J J J越小,表示预测值与实际值的差值越小。而 J J J θ \theta θ的函数,所以当 J J J最小时, θ \theta θ的值就是模型的最优值。

1.2 梯度函数

  要使以上代价函数最小,一种最常用的方法就是梯度下降法
θ j : = θ j − α ∂ ∂ θ j J ( θ ) \theta_j :=\theta_j - \alpha \frac{\partial}{\partial\theta_j}J(\theta) \qquad θj:=θjαθjJ(θ)
  上式中 α \alpha α 表示学习率,并且要注意一点就是式中的 θ \theta θ 是同时更新的,就是说下一次得到的 θ \theta θ 完全是由这次 θ \theta θ 运算得到的(尤其是求导部分)。

  对于线性回归来讲,该导数可以具体表示为
∂ ∂ θ j J ( θ ) = 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x j ( i ) \frac{\partial}{\partial\theta_j}J(\theta)=\frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)} θjJ(θ)=m1i=1m(h(x(i))y(i))xj(i)

1.2.1 特征缩放

  如果特征之间的取值范围相差过大,这时就需要对特征进行缩放。通常采取的缩放形式如下:( μ \mu μ可以取平均值, s s s可以取标准差)
x i − μ s \frac{x_i-\mu}{s} \qquad sxiμ
  缩放的程度通常如下表所示:

可以接受的范围 不可接受的范围
− 1 < x < 1 -11<x<1 − 100 < x < 100 -100100<x<100
0 < x < 3 00<x<3 − 0.001 < x < 0.0001 -0.0010.001<x<0.0001
− 2 < x < 0.5 -22<x<0.5 50 < x < 1000 5050<x<1000

1.2.2 学习率

  学习率 α \alpha α 太小,可能导致梯度下降算法收敛的非常慢;学习率 α \alpha α 太大,又可能导致梯度下降算法在某几次迭代时不下降,反而增加,甚至不能收敛。
  为了选择出合适的学习率,可以画出 J ( θ ) J(\theta) J(θ) 随迭代步数变化的曲线。一般是先用小值比如0.001试一下,再逐渐增大,当找到一个的可行的最小值和一个最大值,就取比最大值小一点的数值。

2 逻辑回归与分类

  对于分类问题,输出变量都是离散值,一般而言都会用1、0来表示是、否。而预测的输出通常不会被约束在0、1这两个值上,所以就需要对输出应用一个函数,使值域变为(0,1),并以此来估计 y = 1 y=1 y=1 的概率。这个函数就是sigmoid函数(或logistic函数):
g ( z ) = 1 1 + e − z g(z)=\frac{1}{1+e^{-z}} g(z)=1+ez1
机器学习——梯度下降法的应用_第1张图片
  这样预测的输出就变为:(这里用 θ T x \theta^T x θTx 来形成决策边界)
h ( x ) = g ( θ T x ) = 1 1 + e − θ T x h(x)=g(\theta^T x)=\frac{1}{1+e^{-\theta^T x}} h(x)=g(θTx)=1+eθTx1

2.1 代价函数与梯度

  所采用的代价函数就是:
J ( θ ) = 1 m ∑ i = 1 m C o s t ( h ( x ( i ) )   ,   y ( i ) ) = 1 m [ ∑ i = 1 m ( − y ( i ) log ⁡ h θ ( x ( i ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] \begin{aligned} J(\theta) &= \frac{1}{m} \sum_{i=1}^{m} Cost\Big( h(x^{(i)})\, ,\, y^{(i)} \Big) \\ &=\frac{1}{m} \Big[ \sum_{i=1}^{m} \Big( -y^{(i)}\log h_{\theta} (x^{(i)})- (1-y^{(i)}) \log (1-h_{\theta}(x^{(i)} )\Big) \Big] \end{aligned} J(θ)=m1i=1mCost(h(x(i)),y(i))=m1[i=1m(y(i)loghθ(x(i))(1y(i))log(1hθ(x(i)))]
  这里最小化代价函数的方法还是采用梯度
θ j : = θ j − α ∂ ∂ θ j J ( θ ) : = θ j − α ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x j ( i ) \begin{aligned} \theta_j &:=\theta_j - \alpha \frac{\partial}{\partial\theta_j}J(\theta)\\ &:=\theta_j - \alpha \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)} \end{aligned} θj:=θjαθjJ(θ):=θjαi=1m(h(x(i))y(i))xj(i)
  没错,和前面线性回归的梯度函数在形式上是一样的,唯一的不同点就是 h ( x ) \color{red}{h(x)} h(x) 的不同。

2.2 多元分类

  可以将其看作是多个二元分类问题。
  例如,现在有一个含有3类的数据,如下图所示。

机器学习——梯度下降法的应用_第2张图片
  我们可以针对图中的每一类为其生成一个分类器 a 1 , a 2 , a 3 a_1,a_2,a_3 a1,a2,a3 a 1 a_1 a1表示是三角的概率,以此类推)。然后将要测试的数据代入每个分类器,选择值最大的分类器类别作为预测的类别。

3 正则化

  在以上的线性回归和逻辑回归中,数据的拟合通常会存在3种情况:

  • 欠拟合,也称之为高偏差
  • 刚好拟合
  • 过拟合,也称之为高方差

  针对过拟合问题,通常会采用以下2种思路进行解决:

  1. 通过人工的选择,减少变量的个数
  2. 正则化,在保留所有特征量的情况下,减少特征量的量级

3.1 线性回归的正则化

  需要对其代价函数添加一个正则项:
J ( θ ) = 1 2 m ( ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) 2 + λ ∑ j = 1 n θ j 2 ) J(\theta)=\frac{1}{2m} \bigg( \sum_{i=1}^{m} \Big( h(x^{(i)})-y^{(i)} \Big) ^2+ \lambda \sum_{j=1}^{n}\theta^2_j \bigg) J(θ)=2m1(i=1m(h(x(i))y(i))2+λj=1nθj2)
   λ \color{red}\lambda λ 就是正则化参数。注意:这里不需要 θ 0 \theta_0 θ0 正则化,因为其是一个常数项。
  其梯度函数也要进行相应的变化:(注意需要将 θ 0 \theta_0 θ0 分离出来)
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x 0 ( i ) θ j : = θ j − α [ 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] \theta_0 :=\theta_0 - \alpha \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_0^{(i)} \\ \theta_j :=\theta_j - \alpha \Big[ \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)}+ \frac{\lambda}{m}\theta_j \Big] θ0:=θ0αm1i=1m(h(x(i))y(i))x0(i)θj:=θjα[m1i=1m(h(x(i))y(i))xj(i)+mλθj]

3.2 逻辑回归的正则化

  逻辑回归的正则化与线性回归的类似,也是在代价函数的最后添加一个正则项:
J ( θ ) = 1 m [ ∑ i = 1 m ( − y ( i ) log ⁡ h θ ( x ( i ) ) − ( 1 − y ( i ) ) log ⁡ ( 1 − h θ ( x ( i ) ) ) ] + λ 2 m ∑ j = 1 n θ j 2 \begin{aligned} J(\theta) &= \frac{1}{m} \Big[ \sum_{i=1}^{m} \Big( -y^{(i)}\log h_{\theta} (x^{(i)})- (1-y^{(i)}) \log (1-h_{\theta}(x^{(i)} )\Big) \Big] +\frac{\lambda}{2m}\sum^{n} _{j=1}\theta^2_j \end{aligned} J(θ)=m1[i=1m(y(i)loghθ(x(i))(1y(i))log(1hθ(x(i)))]+2mλj=1nθj2
  同样的,这里也不需要对 θ 0 \theta_0 θ0 正则化,其梯度函数变为:
θ 0 : = θ 0 − α 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x 0 ( i ) θ j : = θ j − α [ 1 m ∑ i = 1 m ( h ( x ( i ) ) − y ( i ) ) x j ( i ) + λ m θ j ] \theta_0 :=\theta_0 - \alpha \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_0^{(i)} \\ \theta_j :=\theta_j - \alpha \Big[ \frac{1}{m} \sum_{i=1}^{m}\Big( h(x^{(i)})-y^{(i)} \Big)x_j^{(i)}+ \frac{\lambda}{m}\theta_j \Big] θ0:=θ0αm1i=1m(h(x(i))y(i))x0(i)θj:=θjα[m1i=1m(h(x(i))y(i))xj(i)+mλθj]
  没错,这个梯度函数与线性回归梯度函数在形式上也是一样的,但要注意 h ( x ) \color{red}{h(x)} h(x) 的不同。

tip:以上的梯度的下降都是在循环中完成的,具体的循环次数需要自己去设置。

你可能感兴趣的:(python与机器学习,python,机器学习)