逻辑回归

对于一个二分类(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*}
\]

最新文章

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

热门文章

  1. 【Python】插入sqlite数据库
  2. UI第二组与数据库对接时遇到的问题记录
  3. python之demo2----改编自python官方提供的turtle_yinyang.py画阴阳的demo
  4. 转:C#综合揭秘——细说多线程(下)
  5. Django之基于iframe的ajax伪造
  6. 【待补充】Spark 集群模式 && Spark Job 部署模式
  7. jdk1.7环境配置
  8. div+css ie6图片之间有间隙的问题
  9. Null和undefined的区别?
  10. 20165302 程上杰 Exp1 PC平台逆向破解