ML-分类与逻辑回归

布尔分类(binary classification)问题:

训练集:$S=\{(x^{(i)}, y^{(i)})\}$

输入:特征向量$x$

期望输出:$y\in\{0, 1\}$

这里使用的假设函数(hypotheses)不再是特征向量各分量的线性组合,而是:

$h_{\theta}(x) = g(\theta^Tx) = \frac{1}{1 + \text{exp}(-\theta^Tx)}$

这里$g(x)$即逻辑(logistic)函数或称S型(sigmoid)函数。

Note:尽管从$0-1$平滑增长的函数还有很多,但由于一些原因(我们以后将会看到),S型函数是一个相当合理的选择。

先考虑函数$g(x)$的导数:

$\frac{dg(x)}{dx} = \frac{1}{dx}d\frac{1}{1 + \text{exp}(-x)}$

$= \frac{e^{-x}}{(1 + e ^ {-x}) ^ 2}$

$=g(x)(1 - g(x))$

我们做出如下假定(assumptions):

$P(y = 1 | x; \theta) = h_\theta(x)$

$P(y = 0 | x; \theta) = 1 - h_\theta(x)$

合并两式,可以得到:

$p(y | x; \theta) = (h_\theta(x))^y(1 - h_\theta(x))^{1 - y}$

我们进一步假设$S$中训练样本都是相互独立的,那么关于参数$\theta$的似然函数可以写成:

$L(\theta) = p(\vec{y} | X; \theta)$

$=\prod_{i = 1}^{m}p(y^{(i)} | x^{(i)}; \theta)$

$=\prod_{i = 1}^{m}(h_\theta(x^{(i)}))^{y^{(i)}}(1 - h_\theta(x^{(i)}))^{1 - y^{(i)}}$

为了最大化$L(\theta)$,我们间接地最大化如下式子:

$l(\theta) = \text{log}L(\theta)$

$=\sum_{i = 1}^{m}y^{(i)}\text{log }h(x^{(i)}) + (1 - y^{(i)})\text{log}(1 - h(x^{(i)}))$

依旧考虑使用梯度下降更新$\theta$:

$\theta := \theta + \alpha\nabla_\theta l(\theta)$

Note:由于是最大化,因此这里梯度前的运算符使用$+$号

$\nabla_\theta l(\theta) = \sum_{i = 1}^m{y^{(i)}\cdot \frac{1}{h(x^{(i)})}\cdot \nabla_\theta h(x^{(i)})+(1 - y^{(i)})\cdot \frac{1}{1-h(x^{(i)})}\cdot \nabla_\theta(1 - h(x^{(i)}))}$

$=\sum_{i = 1}^m{\nabla_\theta h(x^{(i)})\cdot \frac{y^{(i)} - h(x^{(i)})}{h(x^{(i)})(1 - h(x^{(i)}))}}$

$=\sum_{i = 1}^m{\nabla_\theta g(\theta^Tx^{(i)})\cdot \frac{y^{(i)} - g(\theta^Tx^{(i)})}{g(\theta^Tx^{(i)})(1 - g(\theta^Tx^{(i)}))}}$

$=\sum_{i = 1}^m(y^{(i)} - g(\theta^Tx^{(i)}))x^{(i)}$

于是这样更新$\theta$:

$\theta := \theta + \alpha\sum_{i = 1}^m(y^{(i)} - g(\theta^Tx^{(i)}))x^{(i)}$

你或许会惊奇地发现,这里的更新规则与线性回归完全相同。

                                                                                                                                                         

下面给出另一种最大化$l(\theta)$的方法。

牛顿迭代法求方程的实根:

对于函数$f:\mathbb{R}\rightarrow \mathbb{R}$,且存在某个实数$\theta$满足$f(\theta) = 0$,牛顿迭代法进行如下操作:

$\theta := \theta - \frac{f(\theta)}{f'(\theta)}$

来逼近$f$的根。

为了最大化$l(\theta)$,使用牛顿迭代逼近$l'(\theta)$的根。

即进行操:

$\theta := \theta - \frac{l'(\theta)}{l''(\theta)}$

在高维情形下,我们需要使用牛顿-拉弗森方法(Newton-Raphson method),更新方法如下:

$\theta := H^{-1}\nabla_\theta l(\theta)$

其中$H$是海森(Hessian)矩阵,定义方法如下:

$H_{ij}=\frac{\partial^2 l(\theta)}{\partial \theta_i \theta_j}$

通常情况下使用N-R方法更快(相较于梯度下降法)。

上一篇:xcode进行代码覆盖率测试


下一篇:【BZOJ】【2756】【SCOI2012】奇怪的游戏