逻辑回归

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

CS229笔记:分类与逻辑回归的更多相关文章

  1. 斯坦福CS229机器学习课程笔记 part2:分类和逻辑回归 Classificatiion and logistic regression

    Logistic Regression 逻辑回归 1.模型 逻辑回归解决的是分类问题,并且是二元分类问题(binary classification),y只有0,1两个取值.对于分类问题使用线性回归不 ...

  2. 机器学习算法笔记1_2:分类和逻辑回归(Classification and Logistic regression)

    形式: 採用sigmoid函数: g(z)=11+e−z 其导数为g′(z)=(1−g(z))g(z) 如果: 即: 若有m个样本,则似然函数形式是: 对数形式: 採用梯度上升法求其最大值 求导: 更 ...

  3. 分类和逻辑回归(Classification and logistic regression)

    分类问题和线性回归问题问题很像,只是在分类问题中,我们预测的y值包含在一个小的离散数据集里.首先,认识一下二元分类(binary classification),在二元分类中,y的取值只能是0和1.例 ...

  4. [Machine Learning] 逻辑回归 (Logistic Regression) -分类问题-逻辑回归-正则化

    在之前的问题讨论中,研究的都是连续值,即y的输出是一个连续的值.但是在分类问题中,要预测的值是离散的值,就是预测的结果是否属于某一个类.例如:判断一封电子邮件是否是垃圾邮件:判断一次金融交易是否是欺诈 ...

  5. Andrew Ng机器学习课程笔记--week3(逻辑回归&正则化参数)

    Logistic Regression 一.内容概要 Classification and Representation Classification Hypothesis Representatio ...

  6. Scikit-Learn 机器学习笔记 -- 线性回归、逻辑回归、softma

      import numpy as np from matplotlib import pyplot as plt # 创建线性回归数据集 def create_dataset(): X = 2 * ...

  7. Machine Learning--week3 逻辑回归函数(分类)、决策边界、逻辑回归代价函数、多分类与(逻辑回归和线性回归的)正则化

    Classification It's not a good idea to use linear regression for classification problem. We can use ...

  8. TensorFlow学习笔记2:逻辑回归实现手写字符识别

    代码比较简单,没啥好说的,就做个记录而已.大致就是现建立graph,再通过session运行即可.需要注意的就是Variable要先初始化再使用. import tensorflow as tf fr ...

  9. 逻辑回归(logic regression)的分类梯度下降

    首先明白一个概念,什么是逻辑回归:所谓回归就是拟合,说明x是连续的:逻辑呢?就是True和False,也就是二分类:逻辑回归即使就是指对于二分类数据的拟合(划分). 那么什么是模型呢?模型其实就是函数 ...

随机推荐

  1. 机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN)

    机器学习实战(Machine Learning in Action)学习笔记————02.k-邻近算法(KNN) 关键字:邻近算法(kNN: k Nearest Neighbors).python.源 ...

  2. Linux Ubuntu16.04LTS安装TensorFlow(CPU-only,python3.7)——使用Anaconda安装

    1.安装Anaconda(在此不再赘述) 2.用Conda安装TensorFlow 1)建立TensorFlow运行环境并激活 conda create -n tensorflow pip pytho ...

  3. Android aapt 工具介绍(转)

    目录 AAPT 工具介绍 AAPT 的帮助信息 查看AAPT的版本 使用AAPT列出资源包apk文件列表 使用AAPT打包资源文件 使用AAPT解压资源包apk   来自:http://mmmyddd ...

  4. 灰度发布:灰度很简单,发布很复杂&灰度发布(灰度法则)的6点认识

    什么是灰度发布,其要点有哪些? 最近跟几个聊的来的同行来了一次说聚就聚的晚餐,聊了一下最近的工作情况如何以及未来规划等等,酒足饭饱后我们聊了一个话题“灰度发布”. 因为笔者所负责的产品还没有达到他们产 ...

  5. 转:jQuery选择器大全(48个代码片段+21幅图演示)

    选择器是jQuery最基础的东西,本文中列举的选择器基本上囊括了所有的jQuery选择器,也许各位通过这篇文章能够加深对jQuery选择器的理解,它们本身用法就非常简单,我更希望的是它能够提升个人编写 ...

  6. excel如何冻结首行或首列及首行首列同时冻结

    冻结首行方法: 首先选择首行,在菜单栏选择视图菜单,再选择冻结窗格下拉三角里的冻结首行即可. 效果如下:拖动垂直滚动条 冻结首列方法: 首先选择首列,在菜单栏选择视图菜单,再选择冻结窗格下拉三角里的冻 ...

  7. [Python_6] Python 配置 MySQL 访问

    0. 说明 Python 访问 MySQL 数据库,需要安装 MySQL 的 Python 插件. 1. 安装 MySQL 插件 pip install PyMySQL 2. 编写代码 # -*-co ...

  8. React阻止事件冒泡的正确打开方式

    需求:点击导航list按钮出现侧弹框,点击空白处弹框消失 问题:绑定空白处的点击事件到document上,但是非空白处的点击也会触发这个点击事件,在react中如何阻止事件冒泡? 解决方法:e.sto ...

  9. Visual Studio内存泄露检測工具

    使用简单介绍     在敲代码的过程中.难免会遇到内存泄露的时候.这个时候假设手工查找内存泄露,不说方法没有通用的,就是真的要自己手工查找也是非常耗时间和精力的.诚然.我们能够借助一些工具,并且我们还 ...

  10. 死磕nginx系列--nginx服务器做web服务器

    nginx 做静态服务器 HTML页面如下 <!DOCTYPE html> <html lang="en"> <head> <meta c ...