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*}
\]
最新文章
- Spring的问题解决记录
- 自定义Toast、程序退出时Toast也退出、Toast的用法
- Eclipse中用User Library管理jar包
- JAVA SSH 框架介绍
- What is Cross Linux From Scratch?
- sysbench的安装与使用
- MVC多表联合查询数据显示
- div图片垂直居中
- Android发展简报
- 深入理解 JavaScript(一)
- Webpack 2 视频教程 008 - WDS 端口号等配置相关
- CentOS Android Studio桌面图标的创建
- 业务配置开发平台qMISPlat 2.0 产品介绍
- pam密码策略
- June 17. 2018, Week 25th. Sunday
- PEP8 Python编程规范
- eclipse工作区(workspace)常用设置(preferences)
- Vue单页面应用
- lua -- encode and decode
- 例说hg(五)————创建repository