【python与机器学习实战】感知机和支持向量机学习笔记(一)
对《Python与机器学习实战》一书阅读的记录,对于一些难以理解的地方查阅了资料辅以理解并补充和记录,重新梳理一下感知机和SVM的算法原理,加深记忆。
1.感知机
感知机的基本概念
感知机是运用梯度下降学习过程的最简单的机器学习算法之一,是神经网络和支持向量机的基础。具体提出是由Rosenblatt这个人提出的,具体背景略。这里仅对感知机算法进行介绍:
对于二分类问题,假设一个数据集D={(x1,y1),...,(xN,yN)},存在一个平面(超平面)wx+b=0将数据分成两类,使得:

则称数据为线性可分的,否则为线性不可分。那么,感知机的算是函数可以表示为:

其中E表示误分类的集合,即:

那么利用梯度下降法,对参数进行更新,更新过程如下:

值得一提的是,考虑到计算速度问题,可采用随机梯度下降(SGD)或批量梯度下降(BGD)进行参数更新,若为随机梯度下降,随机选取一个被误分类的样本进行参数的更新,则偏导数为:

上述即为感知机的学习算法过程,最终学习的模型为:

感知机的对偶形式
对偶形式通常是为了解决原始问题较为复杂,经转换为对偶形式后能够方便求解,对于特定问题原始算法的对偶形式存在一些共性。虽然感知机的原始形式比较简单,但为了便于后面SVM算法的对偶形式的理解,这里对感知机的对偶形式的转化过程进行讲述。
上述参数更新过程每一次选取一个分错的样本点对参数进行更新,假设在最终训练结束后,样本点(xi,yi)共被选取到了ni次,那么最终参数更新为:

设αi=ηni,则上式改写为:

那么误分类集合E可表示为:

当存在有误分类的点时,随机选取xi对应下标的αi进行更新(随机梯度下降),从而对α进行更新:


这里需要说明的是:

即实际上参数的更新就是对选取到样本点xi的次数ni进行更新。
2.从感知机到支持向量机
在二分类情况下,感知机所关注的主要是将样本分成两类即可,理论上讲,只要是线性可分的数据集,只要迭代次数足够大,就一定能够将样本分开。但这对于最终模型的泛化能力没有保证,换句话说就是“虽然分开了,但是哪种分开的情况下才是最好呢?”,如图所示:

图中蓝线和红线都将样本分成两类(假设红色为class1,蓝色为class2),但对于一个新的样本(绿色),采用蓝线时,新样本属于class1,而采用红线划分时,新样本属于class2。
因此,SVM就是为了解决这样的问题的一种改进的方法。显然对于上图中直觉上红线的划分效果最好,保证了两边的数据点被划分时有较大的“间隔”,这也是SVM算法的主旨思想,即:在进行划分的过程中使距离分离超平面最近的点的距离最大。具体数学描述如下:
假设分离超平面为wx+b=0,那么样本点(xi,yi)距离平面的距离(这里距离指的是几个间隔,区别于函数间隔,该距离还有一个推导过程,某度可查)可以表示为:

(因在正侧为正,在负一侧为负,因此乘以yi即可)
那么,使得距离分离超平面距离最小的样本点的距离最大的数学描述为:

这里不妨令函数间隔为1(具体为什么设为1,一方面是便于推导,另一方面对于目标函数的优化没有影响,详细证明过程暂不考究),即:

那么问题转化为:


上述即为SVM算法的基本概述,至于如何求解,后文再说。
对于线性可分的数据采用上述约束条件能够将数据完美分开,这就是硬间隔SVM基于该假设进行的,而通常数据中存在一定的噪音,并不能完全是线性可分的,此时将采用软间隔的方法对数据进行训练。所谓软间隔,就是在划分数据时给予一定的容忍,同时为了限制这个容忍度,在目标函数中加上一定的惩罚,来制衡这种容忍程度,这里容忍度称之为松弛变量,记为ξ,具体描述如下:
将约束条件加上一个松弛变量,即为:

同时在目标函数中加入惩罚项,来约束松弛变量:

那么,根据约束条件,引入Hinge损失,记为l,则l可以表示为:

那么最终的目标函数变为:

接下来就是如何求解SVM的问题,一种是采用梯度下降的直接进行参数迭代求解,另一种是转换为求解问题的对偶形式,在进行求解。
利用梯度下降算法求解SVM
将上式作为损失函数进行求解,记为:

那么分别对w,b进行求导,则有:

根据每一次迭代的误差项e,误差项计算公式为:

选择误差项最大的一项对应的样本点进行参数更新,即:

然后选取(xi,yi)对参数进行更新,更新过程为:

最终输出模型:

SVM初步的介绍就先写到这里,后续将对SVM的对偶形式及其求解,以及核方法在SVM的运用进一步进行梳理。
参号文献:
何宇健 《Python与机器学习实战》
【python与机器学习实战】感知机和支持向量机学习笔记(一)的更多相关文章
- 【Python机器学习实战】感知机和支持向量机学习笔记(三)之SVM的实现
前面已经对感知机和SVM进行了简要的概述,本节是SVM算法的实现过程用于辅助理解SVM算法的具体内容,然后借助sklearn对SVM工具包进行实现. SVM算法的核心是SMO算法的实现,首先对SMO算 ...
- 《Node.js开发实战详解》学习笔记
<Node.js开发实战详解>学习笔记 ——持续更新中 一.NodeJS设计模式 1 . 单例模式 顾名思义,单例就是保证一个类只有一个实例,实现的方法是,先判断实例是否存在,如果存在则直 ...
- 《Cocos2d-x游戏开发实战精解》学习笔记4--实战一个简单的钢琴
上一节学习了使用Cocos2d-x播放音乐的方法,但是那种方法一般只适合于播放较大的音乐,而一般比较短小的音乐(如游戏中的打斗.按键音效等)则要通过playEffect来播放.本节使用该方法以及之前学 ...
- 《Cocos2d-x游戏开发实战精解》学习笔记3--在Cocos2d-x中播放声音
<Cocos2d-x游戏开发实战精解>学习笔记1--在Cocos2d中显示图像 <Cocos2d-x游戏开发实战精解>学习笔记2--在Cocos2d-x中显示一行文字 之前的内 ...
- Spring实战第六章学习笔记————渲染Web视图
Spring实战第六章学习笔记----渲染Web视图 理解视图解析 在之前所编写的控制器方法都没有直接产生浏览器所需的HTML.这些方法只是将一些数据传入到模型中然后再将模型传递给一个用来渲染的视图. ...
- Spring实战第五章学习笔记————构建Spring Web应用程序
Spring实战第五章学习笔记----构建Spring Web应用程序 Spring MVC基于模型-视图-控制器(Model-View-Controller)模式实现,它能够构建像Spring框架那 ...
- Spring实战第四章学习笔记————面向切面的Spring
Spring实战第四章学习笔记----面向切面的Spring 什么是面向切面的编程 我们把影响应用多处的功能描述为横切关注点.比如安全就是一个横切关注点,应用中许多方法都会涉及安全规则.而切面可以帮我 ...
- K近邻 Python实现 机器学习实战(Machine Learning in Action)
算法原理 K近邻是机器学习中常见的分类方法之间,也是相对最简单的一种分类方法,属于监督学习范畴.其实K近邻并没有显式的学习过程,它的学习过程就是测试过程.K近邻思想很简单:先给你一个训练数据集D,包括 ...
- Python、机器学习、计算机视觉、深度学习入门
1.简明Python教程 2.Python计算机视觉编程 3.机器学习实践 4.吴恩达机器学习 5.李飞飞深度学习与计算机视觉
随机推荐
- 使用A Star 算法实现自动寻路详解
@ 目录 1.什么是A Start算法 2.A Star算法的原理和流程 2.1 前提 2.1.1 从起点开始扩散的节点 2.1.2 最短距离计算公式:F = G + H 2.1.3 欧几里得距离计算 ...
- 开发小技巧之:unicode的排序和正则匹配
目录 简介 ASCII字符的排序 本地字符的排序 为什么不使用unicode进行排序 emoji的正则匹配 总结 简介 我们知道计算机最先兴起是在国外,出于当时计算机性能的考虑和外国常用字符的考虑,最 ...
- Jquery手机点击其他地方隐藏控件问题
因为不太懂mui的底部导航栏的操作,所以自己写了用很普通的方法实现手机底部导航栏,遇到了很多问题.比如:要实现点击底部菜单栏上某一个菜单,显示子菜单,然后点击手机空白处,隐藏菜单. 实现方法是: // ...
- Gym - 101128E Wooden Signs DP
题目大意: 一共n块木板,前两个数给出最底下木块的两个端点,后面n-1个数给出第i层的一个固定端点,问你木块的所有放置情况. 分析: 状态: d[i][j]表示第i个木块,第i-1块木板的未固定端点为 ...
- liunx驱动之字符设备的注册
上一篇文章学习了如何编写linux驱动,通过能否正常加载模块进行验证是否成功,有做过liunx应用开发的小伙伴都知道驱动会在'/dev'目录下以文件的形式展现出来,所以只是能加载驱动模块不能算是完成驱 ...
- WPF教程二:理解WPF的布局系统和常用的Panel布局
WPF的布局系统 了解元素的测量和排列方式是理解布局的第一步.在测量(measure)阶段容器遍历所有子元素,并询问子元素它们所期望的尺寸.在排列(arrange)阶段,容器在合适的位置放置子元素.理 ...
- 等了半年,m1芯片原生支持的.NET IDE出现了
m1芯片是苹果2020年发布的一款基于arm的桌面芯片,目前已经应用在MacBook Air .MacBook Pro.IMac.Ipad等设备上.可以说整个苹果生态圈都在去intel化. 今年年初跟 ...
- Helm Template初体验,方便管理多环境
我最新最全的文章都在南瓜慢说 www.pkslow.com,文章更新也只在官网,欢迎大家来喝茶~~ 1 简介 Helm作为一个优秀的包管理器,这部分我们之前已经做了介绍,文章如下: 用Helm部署Ku ...
- java001-泛型
泛型出现的意义: 为编码阶段的不确定性和转化做视觉设计 将运行期遇到的问题转移到编译期,省去了强转的麻烦 package com.xiaolin.basic; /** * 泛型:将运行期遇到的问题转移 ...
- C语言:模拟密码输入显示星号
一个安全的程序在用户输入密码时不应该显示密码本身,而应该回显星号或者点号,例如······或******,这在网页.PC软件.ATM机.POS机上经常看到.但是C语言没有提供类似的功能,控制台上只能原 ...