逻辑回归

对于一个二分类(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. 13 款惊艳的 Node.js 框架——第1部分

    [编者按]本文作者为 Peter Wayner,主要介绍13款至精至简的 Node.js 框架,帮助你简化高速网站.丰富 API 以及实时应用的开发流程.本文系国内 ITOM 管理平台 OneAPM ...

  2. LeetCode题解之N-ary Tree Level Order Traversal

    1.题目描述 2.问题分析 利用先进先出队列解决问题. 3.代码 vector<vector<int>> levelOrder(Node* root) { vector< ...

  3. maven+spring+junit测试要注意的事情

    使用maven方式创建webapp工程的资料网上一大堆,在这里也不详细说了.在创建完成之后,里面说到要转动态web工程时要切换为3.0版本,但是我本地切换不了,网上的方法好像也没用,暂时也没用到这块. ...

  4. .net 页面传参方式总结

    一.使用Querystring Querystring是一种非常简单的传值方式,其缺点就是:安全性低.会把要传送的值显示在浏览器的地址栏中(也就是不需要保密得参数),并且在此方法中不能够传递对象,参数 ...

  5. 通用视图-分开处理GET、POST请求

    1.编辑urls.py: url(r'^vmmgmt-vms/$', views.vmmgmt,{'model':models.hvvms,'GET': views.vmmgmt_get_view,' ...

  6. SSH批量分发管理

    ssh服务认证类型主要有两个: 基于口令的安全验证: 基于口令的安全验证的方式就是大家一直在用的,只要知道服务器的ssh连接账户.口令.IP及开发的端口,默认22,就可以通过ssh客户端登陆到这台远程 ...

  7. Python实例---模拟微信网页登录(day1)

    第一步:创建Django项目 创建Django项目,添加App 创建静态文件夹static 修改settings.py文件 1. 取消csrf注释 2. 添加静态文件路径 # 添加静态文件路径 STA ...

  8. linux禁止非法用户试探登录

    当我们的linux主机一旦暴露在互联网上,就会遭受到来自网络上的一些非法用户的骚扰.如弱口令扫描,试探性登录:这些行为对linux主机构成一定的威胁.那怎样防范此类的攻击了,这里写了一个脚本,功能就是 ...

  9. 原生JS简单的无缝自动轮播

    最近在不断的加强巩固js.在学习jq和vue之后发现很多东西其实都是不明所以,有些底层的东西自己不懂,到头来也只是一昧的使用,一直在用别人的东西,对自己的成长帮助也不大. 万丈高楼平地起,基础打扎实了 ...

  10. swift类型擦除的定义-swift的类型擦除只是一个类型高低阶转换的游戏。

    所谓swift的类型擦除是指: moand转换: 通过技术手段(通常是包装器),将具体类型的类型信息擦除掉了,只将类型的(某一个侧面的)抽象信息(通常指的是类型尊从的协议.接口.或基类)暴露出来. A ...