Coursera Machine Learning 逻辑回归和正则化

文章目录
  1. 1. 二元分类
  2. 2. 假设函数的表示
  3. 3. 决策边界
  4. 4. 损失函数
  5. 5. 梯度下降
  6. 6. 高级优化
  7. 7. 多分类问题
  8. 8. 过拟合
  9. 9. 正则化

二元分类

对于二元分类来说,其输出值 $y$ 不再是一个连续的值,而是属于 $\lbrace 0,1 \rbrace$,一般0代表negative class,而1代表positive class。想要实现二元分类,一种方法是在线性回归的基础上进行修改,比如说输出值$y$超过了某一阈值,则认为它属于1,否则属于0,但是这个效果通常来说不是很好。

假设函数的表示

首先,分类问题中的$h_\theta (x)$函数要满足$0 \leq h_\theta (x) \leq 1$,为此引入一个新的函数——Sigmoid Function。sigmoid函数定义为:$g(z) = \dfrac{1}{1 + e^{-z}}$,它可以将任意的实数映射到区间$(0, 1)$ 。函数的大致图像如下:

sigmoid函数

在分类问题中,$h_\theta (x) = g ( \theta^T x )$,也就是在sigmoid函数作用下,将原本线性回归的输出值映射到$(0, 1)$区间。同时$h_\theta (x)$的含义也有了变化,代表着在输入为$x$的情况下 ,其类别为1的概率大小。形式化的表示就是:$h_\theta(x) = P(y = 1 | x; \theta)$

决策边界

在将$h_\theta (x)$ 映射到$ (0, 1) $区间之后,我们可以认为当$h_\theta(x) \geq 0.5 $时$y = 1$,$h_\theta(x) < 0.5$时$y = 0$。观察sigmoid函数的图像不难发现,$z \geq 0$ 时 $g(z) \geq 0.5 $,因此 $y = 1$ 的充要条件就是 $\theta^T x >= 0$ 。而所谓的决策边界(decision boundary)就是 $ \theta^T x = 0$ 所构成的曲线。

decision boundary

损失函数

逻辑回归的损失函数如下:

还是先来看下函数图像,有一个直观的感受

上述的 Cost 函数要分类讨论,计算的时候比较麻烦。其实可以化简成一个式子来表示两种情况,就是 $\mathrm{Cost}(h_\theta(x),y) = - y \; \log(h_\theta(x)) - (1 - y) \log(1 - h_\theta(x))$ ,不难验证两者是等价的。

梯度下降

$J(\theta) = - \frac{1}{m} \displaystyle \sum_{i=1}^m [y^{(i)}\log (h_\theta (x^{(i)})) + (1 - y^{(i)})\log (1 - h_\theta(x^{(i)}))]$

梯度下降算法(跟线性回归时的一样):

其中,$\dfrac{\partial}{\partial \theta_j}J(\theta) = \frac{1}{m}\sum_{i=1}^m \left [ h_\theta(x^{(i)}) - y^{(i)} \right ] x^{(i)}_j$

高级优化

虽然采用梯度下降算法也能求得结果,但是还存在一些更好的优化算法。不过一般来说都会比较复杂,没必要自己亲自实现。Matlab或Octave中有提供一个fminunc函数可以用来找到一个无约束多变量函数的最小值 (Find a minimum of an unconstrained multivariable function) 。

1
2
3
4
5
6
7
8
9
示例代码:
function [jVal, gradient] = costFunction(theta)
jVal = [...code to compute J(theta)...];
gradient = [...code to compute derivative of J(theta)...];
end

options = optimset('GradObj', 'on', 'MaxIter', 100);
initialTheta = zeros(2,1);
[optTheta, functionVal, exitFlag] = fminunc(@costFunction, initialTheta, options);

具体用法参阅:fminunc Unconstrained Minimization

多分类问题

在多分类问题中,结果不再仅仅只有0、1两类,而是可能有多种分类结果。那么此时该如何处理呢?

其实很简单,One-vs-all!将多分类问题转化成二元分类问题。

比如$y \in \lbrace0, 1 … n\rbrace$ ,那么我们可以训练 $n+1$ 个二元分类器 $h_\theta ^{(0)}(x), h_\theta ^{(1)}(x), …, h_\theta ^{(n)}(x)$ 。在第 $i$ 个二元分类器中,它只要计算当前输入为第 $i$ 个分类的概率。那么样本的类别就是等于这 $n+1$个结果中概率最大的那个类别,即 $ \mathrm{类别} = \max_i( h_\theta ^{(i)}(x) ) $ 。

one vs all

过拟合

欠拟合(underfitting):模型复杂度过低,不能很好的拟合所有的数据,训练误差大。

过拟合(Overfitting):模型复杂度过高,训练数据过少,训练误差虽小,但测试误差大。

欠拟合对应高偏差(bias),过拟合对应高方差(variance)

one vs all

正则化

通过在损失函数中加入正则化项(regularizer)来避免过拟合问题。

其中,$\lambda$ 称作正则化参数,用来控制拟合训练数据保持参数值较小这两个目标之间的关系。

  • 对线性回归进行正则化

    梯度下降:

    正规方程(Normal equation):

  • 对逻辑回归进行正则化

    梯度下降:

需要注意的是,一般都不对 $\theta_0$ 进行正则化($\theta_0$ 恒为1),因此在上面的公式中下标 $j$ 都从1开始。

分享到 评论