感知机与SVM一样都是使用超平面对空间线性可分的向量进行分类,不同的是:感知机的目标是尽可能将所有样本分类正确,这种策略指导下得出的超平面可能有无数个,然而SVM不仅需要将样本分类正确,还需要最大化最小分类间隔,对SVM不熟悉的朋友可以移步我另一篇文章:支持向量机(SVM)之硬阈值 - ZhiboZhao - 博客园 (cnblogs.com)

为了系统地分析二者的区别,本文还是首先介绍感知机模型,学习策略以及求解思路

一、感知机模型

还是假定在 \(p\) 维空间有 \(m\) 组训练样本对,构成训练集 $T = { (x_{1}, y_{1}), (x_{2}, y_{2}),...,(x_{n}, y_{n})} $,其中 \(x_{i} \in R^{1 \times p}\),\(y_{i}\in \{-1, +1\}\),以二维空间为例,在线性可分的情况下,所有样本在空间可以描述为:

在上图中,紫色和蓝色的圆形代表不同的类别,红色的实线表示任意一条能够将这两种区分的超平面,理论上这种超平面有无数条,都有可能是感知机的解,然而SVM的模型解出来的超平面很有可能通过最大化最小间隔的策略得到的黑色的实线。我们将超平面表示为:\(\Phi: b+w_{1}x_{1}+w_{2}x_{2}+...+w_{p}x_{p} = 0\),写成矩阵形式为:\(\Phi: w^{T}x + b = 0\),根据高中数学的知识,可以得出 $ w $ 表示超平面的法向量,\(b\) 表示超平面的截距。感知机的最终目标可以表示为:

\[w^{T}x_{i}+b>0,\quad if \quad y_{i}=1\\
w^{T}x_{i}+b<0,\quad if \quad y_{i}=-1
\]

通过有监督的训练,不断地学习超平面的参数 \((w, b)\),最终找到一个超平面 \(f(x) = w^{T}x + b\) 网络能够根据任意输入 \(x_{i}\) 输出对应的值来区分不同的模型。

二、感知机的学习策略

感知机是根据错误驱动的思想来进行学习,具体来说,先给待学习参数 \((w,b)\) 一个初始值,得到的初始超平面一般无法正确区分类别,我们用集合 \(D\) 来代表被错误分类的样本,那么最终的学习策略就是最小化被错误分类的点的个数,定量表示如下:

\[L(w,b) = \sum_{i=1}^{n}\psi (y_{i}(w^{T}x_{i}+b)
\]

函数 \(\psi(x)\) 定义为:

\[\psi(x) = 1, \quad if\quad x<0\\
\psi(x) = 0, \quad if\quad x>0
\]

因为当 \(y_{i}f(x_{i}) = y_{i}(w^{T}x_{i}+b) <0\) 时,该点被错误分类,于是损失函数 \(L(w,b)\) 就记录了总共被错误分类的个数,最小化loss就能求出超平面参数。

然而随着 \((w,b)\) 的改变,指示函数 \(\psi\) 要么为0,要么为1,是一个不连续的函数,因此损失函数不可导,也就不容易求出极值,需要将 \(L(w,b)\) 转换成 \((w,b)\) 的连续函数。

根据高中知识,我们得到空间内任意一点到超平面的距离为:

\[distance = \dfrac{1}{||w||}|w^{T}x_{i}+b|
\]

那么对于正确分类的正样本点,其到超平面的距离设为正数,对于正确分类的错样本点,其道超平面的距离设为复数,那么所有正确分类的样本到超平面的距离可以表示为:

\[d = y_{i}\dfrac{1}{||w||}(w^{T}x_{i}+b)
\]

因此,所有错误分类的样本的到超平面的总距离就可以表示为:

\[d = -y_{i}\dfrac{1}{||w||}(w^{T}x_{i}+b) \Longleftrightarrow -y_{i}(w^{T}x_{i}+b)
\]

所以,感知机的损失函数最终定义为:

\[L(w,b) = -\sum_{i\in D}y_{i}(w^{T}x_{i}+b)
\]

显然:

当正类样本被分成负类样本时 \(w^{T}x_{i}+b < 0,y_{i}>0\),

当负类样本被分成正类样本时 \(w^{T}x_{i}+b > 0,y_{i}<0\),

因此,损失函数是非负的,且分类错误的点就越少,分类错误的点就离超平面越近,其值越小。

三、感知机的求解算法

由于损失函数 \(L(w,b)\) 是自变量的连续函数,因此可以用随机梯度下降 (SGD) 的方式进行求解。那么损失函数的梯度如下:

\[\nabla_{w}L(w,b) = \dfrac{\partial L(w,b)}{\partial w} = -\sum_{x_{i} \in D}y_{i}x_{i}\\
\nabla_{b}L(w,b) = \dfrac{\partial L(w,b)}{\partial b} = -\sum_{x_{i} \in D}y_{i}
\]

采用随机梯度下降法更新的公式为:

\[w = w+\eta y_{i}x_{i};\quad b = b+\eta y_{i}
\]

感知机与支持向量机 (SVM)的更多相关文章

  1. 【Supervised Learning】支持向量机SVM (to explain Support Vector Machines (SVM) like I am a 5 year old )

    Support Vector Machines 引言 内核方法是模式分析中非常有用的算法,其中最著名的一个是支持向量机SVM 工程师在于合理使用你所拥有的toolkit 相关代码 sklearn-SV ...

  2. [转] 从零推导支持向量机 (SVM)

    原文连接 - https://zhuanlan.zhihu.com/p/31652569 摘要 支持向量机 (SVM) 是一个非常经典且高效的分类模型.但是,支持向量机中涉及许多复杂的数学推导,并需要 ...

  3. 【python与机器学习实战】感知机和支持向量机学习笔记(一)

    对<Python与机器学习实战>一书阅读的记录,对于一些难以理解的地方查阅了资料辅以理解并补充和记录,重新梳理一下感知机和SVM的算法原理,加深记忆. 1.感知机 感知机的基本概念 感知机 ...

  4. 机器学习——支持向量机SVM

    前言 学习本章节前需要先学习: <机器学习--最优化问题:拉格朗日乘子法.KKT条件以及对偶问题> <机器学习--感知机> 1 摘要: 支持向量机(SVM)是一种二类分类模型, ...

  5. 【IUML】支持向量机SVM

    从1995年Vapnik等人提出一种机器学习的新方法支持向量机(SVM)之后,支持向量机成为继人工神经网络之后又一研究热点,国内外研究都很多.支持向量机方法是建立在统计学习理论的VC维理论和结构风险最 ...

  6. 机器学习:Python中如何使用支持向量机(SVM)算法

    (简单介绍一下支持向量机,详细介绍尤其是算法过程可以查阅其他资) 在机器学习领域,支持向量机SVM(Support Vector Machine)是一个有监督的学习模型,通常用来进行模式识别.分类(异 ...

  7. 以图像分割为例浅谈支持向量机(SVM)

    1. 什么是支持向量机?   在机器学习中,分类问题是一种非常常见也非常重要的问题.常见的分类方法有决策树.聚类方法.贝叶斯分类等等.举一个常见的分类的例子.如下图1所示,在平面直角坐标系中,有一些点 ...

  8. 机器学习算法 - 支持向量机SVM

    在上两节中,我们讲解了机器学习的决策树和k-近邻算法,本节我们讲解另外一种分类算法:支持向量机SVM. SVM是迄今为止最好使用的分类器之一,它可以不加修改即可直接使用,从而得到低错误率的结果. [案 ...

  9. 机器学习之支持向量机—SVM原理代码实现

    支持向量机—SVM原理代码实现 本文系作者原创,转载请注明出处:https://www.cnblogs.com/further-further-further/p/9596898.html 1. 解决 ...

随机推荐

  1. 【Azure Developer】使用Microsoft Graph API 如何批量创建用户,用户属性中需要包含自定义字段(如:Store_code,Store_name等)

    Microsoft Graph 是 Microsoft 365 中通往数据和智能的网关. 它提供统一的可编程模型,可用于访问 Microsoft 365.Windows 10 和企业移动性 + 安全性 ...

  2. [Linux] Linux C编程一站式学习 Part.3

    Linux系统编程 文件与I/O C标准I/O库函数与Unbuffered I/O函数 C标准I/O库函数printf().putchar().fputs(),会在用户空间开辟I/O缓冲区 系统函数o ...

  3. 安装SpecCPU2006 on Linux of CentOS6.3, gcc4.4.7

    安装SpecCPU2006 on Linux of CentOS6.3, gcc4.4.7 由于在tools/bin目录中只有ia64-linux,所以在直接运行./install.sh脚本时,系统会 ...

  4. 如果你想设置无人自动升级,我们推荐你将这个值修改为security,它会告诉 yum 仅仅升级修复安全问题的软件包。

    定期升级你的 CentOS 系统,是所有系统安全中最重要的措施之一.如果你不使用最新的安全补丁升级你的操作系统软件包,你将会让你的机器很容易被攻击. 如果你管理者多个 CentOS 机器,手动升级系统 ...

  5. IT菜鸟之计算机硬件

    现在的人们几乎无时无刻都会碰到计算机!不管是桌面计算机.笔记本电脑.平板计算机.智能型手机等等,这些东西都算计算机.虽然接触的怎么多,但是,我们一般很少会专门了解计算机内部的构成,下面就是自己在听课结 ...

  6. 云计算OpenStack---虚拟机获取不到ip(12)

    一.现象描述 openstack平台中创建虚拟机后,虚拟机在web页面中显示获取到了ip,但是打开虚拟机控制台后查看网络状态,虚拟机没有ip地址,下图为故障截图: 二.分析 1.查看neutron服务 ...

  7. python基础之psutil模块和发邮件(smtplib和yagmail)

    除了内建的模块外,Python还有大量的第三方模块. 基本上,所有的第三方模块都会在PyPI - the Python Package Index上注册,只要找到对应的模块名字,即可用pip安装. 此 ...

  8. MyBatis 动态SQL(十二)

    动态条件查询 以下是我们数据库表 tb_user 的记录: 假设现在有一个需求,就是根据输入的用户年龄和性别,查询用户的记录信息.你可能会说,这太简单了,脑袋里立马蹦出如下的 SQL 语句: SELE ...

  9. 如何在idea中将项目生成API文档(超详细)(Day_32)

    1.打开要生成API文档的项目,点击菜单栏中的Tools工具,选择Generate JavaDoc 2.打开如下所示的Specify Generate JavaDoc Scope 界面 3.解释下Ot ...

  10. redis 和 mysql 的主从复制

    1. mysql主从复制 (1) 为什么要做主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写 ...