Coursera Machine Learning 逻辑回归和正则化


二元分类

对于二元分类来说,其输出值 $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开始。