CS229笔记:分类与逻辑回归

逻辑回归

对于一个二分类(binary classification)问题,\(y \in \left\{0, 1\right\}\),如果直接用线性回归去预测,结果显然是非常不准确的,所以我们采用一种新的假设函数:
\[ h_{\theta}(x) = g(\theta^{T}x) = \frac{1}{1 + e^{-\theta^{T}x}} \]
其中
\[ g(z) = \frac{1}{1 + e^{-z}} \]
被称为sigmoid函数,这个函数的的值域是\((0, 1)\),且在定义域上单调递增,当\(z \rightarrow +\infty\)时,\(g(z) \rightarrow 1\),当\(z \rightarrow -\infty\)时,\(g(z) \rightarrow 0\),将其当作概率值似乎是个不错的选择;至于究竟为什么选择sigmoid函数,以后会有解释。

sigmoid函数求导很容易,而且关于导数,它有一个很不错的性质:
\[ \begin{align*} g'(z) &= -\frac{1}{(1 + e^{-z})^{2}} \cdot-e^{-z}\\ &=\frac{1}{1 + e^{-z}} \cdot \left(1 - \frac{1}{1 + e^{-z}}\right)\\ &= g(z)(1-g(z)) \end{align*} \]
我们在求优化目标函数时,会用到这一性质。

优化目标函数及其梯度

和线性回归一样,我们给出几个概率假设,希望在给定的概率假设下,利用最大似然求出代价函数。

假设\(y|x;\theta \sim Bernoulli(h_{\theta}(x))\),则:
\[ P(y|x;\theta) = (h_{\theta}(x))^{y}(1-h_{\theta}(x))^{1-y} \]
因为我们处理的是二分类问题,所以这是一个很合理的假设。我们再次假设所有的训练样本是独立的,则似然函数值是:
\[ \begin{align*} L(\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)}} \end{align*} \]
对数似然函数是:
\[ \begin{align*} l(\theta) &= \log L(\theta)\\ &= \log \prod_{i=1}^{m}(h_{\theta}(x^{(i)}))^{y^{(i)}}(1-h_{\theta}(x^{(i)}))^{1-y^{(i)}}\\ &= \sum_{i=1}^{m}y^{(i)}\log h_{\theta}(x^{(i)}) + (1-y^{(i)})\log (1-h_{\theta}(x^{(i)}))\\ \end{align*} \]
这也就是我们的优化目标函数,我们希望找到使\(l(\theta)\)最大的\(\theta\),这里同样可以用梯度下降法。引入梯度的概念:假设\(\theta \in \mathbb{R}^{n+1}\)\(l: \mathbb{R}^{n+1} \rightarrow \mathbb{R}\),则\(\nabla l(\theta) \in \mathbb{R}^{n+1}\),其中\(\left(\nabla l(\theta)\right)_j = \frac{\partial l(\theta)}{\partial \theta_{j}}\)。我们可以求出\(l(\theta)\)的梯度:
\[ \begin{align*} \nabla l(\theta) &= \sum_{i=1}^{m}y^{(i)}\frac{g(\theta^{T}x^{(i)})(1-g(\theta^{T}x^{(i)}))}{g(\theta^{T}x^{(i)})}x^{(i)} +(1-y^{(i)})\frac{-g(\theta^{T}x^{(i)})(1-g(\theta^{T}x^{(i)}))}{1-g(\theta^{T}x^{(i)})}x^{(i)}\\ &= \sum_{i=1}^{m}(y^{(i)}-h_{\theta}(x^{(i)}))x^{(i)}\\ \end{align*} \]
由于我们的目的是最大化\(l(\theta)\),所以我们的迭代公式是:
\[ \theta_j := \theta_j + \alpha \sum_{i=1}^{m}(y^{(i)}-h_{\theta}(x^{(i)}))x^{(i)}_{j} = \theta_j - \alpha \sum_{i=1}^{m}(h_{\theta}(x^{(i)}) - y^{(i)})x^{(i)}_j \]
这与LMS算法中的迭代公式在形式上是一样的,只是\(h_{\theta}(x)\)的定义有差异。

用牛顿法求\(l(\theta)\)的最大值点

给定一个函数\(f(\theta)\),牛顿法可以用来求函数的零点(这里的\(\theta\)是标量):
\[ \theta := \theta - \frac{f(\theta)}{f'(\theta)} \]
利用上式进行迭代,可以很快地接近\(f(\theta)\)的零点。

如果是求最值点呢?没错,最值点对应着一阶导数的零点,所以,为了求\(l(\theta)\)的最大值点,我们只需令\(f(\theta) = l'(\theta)\),那么更新迭代公式变为:
\[ \theta := \theta - \frac{l'(\theta)}{l''(\theta)} \]
利用上式迭代,我们可以很快地接近\(l(\theta)\)的最大值点。在很多情况下,\(\theta\)是一个向量,此时更新迭代公式为:
\[ \theta := \theta - H^{-1}\nabla l(\theta) \]
其中,\(H\)海森矩阵(Hessian matrix),定义为:
\[ H_{ij} = \frac{\partial^{2}l(\theta)}{\partial\theta_i \partial\theta_j} \]
可以看出,海森矩阵其实就是由\(l(\theta)\)\(\theta\)各分量的二阶偏导数构成的矩阵。我们尝试计算一下\(l(\theta)\)的海森矩阵,上文已经得到:
\[ \frac{\partial}{\partial \theta_i}l(\theta) = \sum_{k=1}^{m} (y^{(k)} - h_{\theta}(x^{(k)}))x^{(k)}_i \]
所以:
\[ \begin{align*} H_{ij} &= \sum_{k=1}^{m}\frac{\partial}{\partial \theta_j}(-h_{\theta}(x^{(k)})x^{(k)}_i)\\ &= -\sum_{k=1}^{m}h_{\theta}(x^{(k)})(1-h_{\theta}(x^{(k)}))x^{(k)}_i x^{(k)}_j\\ H &= -\sum_{k=1}^{m}h_{\theta}(x^{(k)})(1-h_{\theta}(x^{(k)}))x^{(k)}(x^{(k)})^{T} \end{align*} \]

猜你喜欢

转载自www.cnblogs.com/hitgxz/p/10734646.html