逻辑回归

对于一个二分类(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. 从外部导入django模块

    import os import sys sys.path.append("D:\\pyweb\\sf"); # 项目位置(不是app) os.environ.setdefault ...

  2. 【转】Java学习---线程间的通信

    [原文]https://www.toutiao.com/i6572378564534993415/ 两个线程间的通信 这是我们之前的线程. 执行效果:谁抢到资源,谁运行~ 实现线程交替执行: 这里主要 ...

  3. JDK5新特性之 可变参数的方法

    可变参数的方法:不知道这个方法该定义多少个参数 注意: > 参数实际上是数组 > 必须写在参数列表最后一个 package cn.itcast.day24.varparam; import ...

  4. COM动态添加删除成员,类似JavaScript中调用的对象

    在JavaScript中调用对象时,可动态添加删除成员如: var obj=new Object; obj.member1='aaaaa'; obj.fun1=function() { alert(' ...

  5. [LOJ 6031]「雅礼集训 2017 Day1」字符串

    [LOJ 6031] 「雅礼集训 2017 Day1」字符串 题意 给定一个长度为 \(n\) 的字符串 \(s\), \(m\) 对 \((l_i,r_i)\), 回答 \(q\) 个询问. 每个询 ...

  6. [LOJ 6030]「雅礼集训 2017 Day1」矩阵

    [LOJ 6030] 「雅礼集训 2017 Day1」矩阵 题意 给定一个 \(n\times n\) 的 01 矩阵, 每次操作可以将一行转置后赋值给某一列, 问最少几次操作能让矩阵全为 1. 无解 ...

  7. SDN负载均衡

    我负责的工作: (1).前期工作思路设计及方案选定.讲解 (2).后期代码修正 (3).视频制作 负载均衡程序 程序流程图 代码 from mininet.topo import Topo class ...

  8. 【Alpha 冲刺】 7/12

    今日任务总结 人员 今日原定任务 完成情况 遇到问题 贡献值 胡武成 建立数据库 已完成 孙浩楷 完成作业列表界面 已完成 胡冰 完成作业展示页面 已完成 练斐弘 完成课件列表页面 未完成 时间不够 ...

  9. ansible(一)

    Ansible简介 Ansible:Ansible的核心程序Host Lnventory:记录了每一个由Ansible管理的主机信息,信息包括ssh端口,root帐号密码,ip地址等等.可以通过fil ...

  10. os.path.md

    os.path 我们可以利用os.path模块提供的函数更容易地在跨平台上处理文件. 即使我们的程序不是用于夸平台, 也应该使用os.path来让路径名字更加可靠. Parsing Paths os. ...