当前位置: 首页 > news >正文

第二章 感知机

2.1  感知机模型

        感知机是二分类的线性分类模型。

        感知机有如下的几何解释:线性方程wx+b=0,对应于特征空间R^{n}中的一个超平面S,其中w是超平面的法向量,b是超平面的截距。通过这个超平面就可以将整个特征空间分成两部分,一部分是正类,实例所对应的y值为+1;一部分为负类,实例所对应的y值为-1。因此超平面S称为分离超平面。 

        在几何中,如果环境空间是n维的,那么它所对应的超平面就是n-1维的子空间。换句话说,超平面就是比它所处的环境空间小一维的子空间。如果特征空间是一维的,那么一个实例其实就是一个实数,用来区分正负类的就是实数轴上的一个点;如果特征空间是二维的,其中的实例就是二维空间中的一个点,它的分离超平面是一条直线;特征空间是三维的,分离超平面就是一个平面。

        现在我们看一个例子了,其中特征向量是二维的,圆点是正类,叉点代表负类,分离超平面就是wx+b=0-\frac{b}{\begin{Vmatrix} w \end{Vmatrix}}表示原点到超平面的距离:

         通过前面对感知机模型的介绍,我们可以得到它的流程图:

2.2  感知机学习策略 

2.2.1  数据集的线性可分性

        对于感知机模型,它有一个比较严苛的条件:要求数据集必须是线性可分的。

        数据集的线性可分性是指:T=\begin{Bmatrix} (x_{1},y_{1},x_{2},y_{2},...,x_{n},y_{n}) \end{Bmatrix},若存在某个超平面S为wx+b=0,使得将数据集的正负实例点完全正确的划分到超平面两侧,即\left\{\begin{matrix} y_{i}=+1,\; \; \; \; \; wx_{i}+b> 0\\ y_{i}=-1,\; \; \; \; \; wx_{i}+b< 0 \end{matrix}\right.,那么,称T为线性可分数据集;否则,称T为线性不可分。

2.2.2  感知机学习策略

        假设训练数据集是线性可分的,感知机学习的目标是希望寻找到一个很好的分离超平面,将实例点完全划分为正类、负类。求得这样一个超平面需要确定模型的参数,此时就需要制定一定的学习策略,即定义(经验)损失函数并将损失函数极小化。

        首先定义输入空间R^{n}中的任意一点x_{0}到超平面S的距离:\frac{1}{\begin{Vmatrix} w \end{Vmatrix}}\begin{vmatrix} wx_{0}+b \end{vmatrix}。如果x_{0}是正确分类点,则\frac{1}{\begin{Vmatrix} w \end{Vmatrix}}\begin{vmatrix} wx_{0}+b \end{vmatrix}=\left\{\begin{matrix} \frac{w\cdot x_{0}+b}{\begin{Vmatrix} w \end{Vmatrix}},y_{0}=+1\\-\frac{w\cdot x_{0}+b}{\begin{Vmatrix} w \end{Vmatrix}},y_{0}=-1 \end{matrix}\right.;如果x_{0}是错误分类点,则\frac{1}{\begin{Vmatrix} w \end{Vmatrix}}\begin{vmatrix} wx_{0}+b \end{vmatrix}=\left\{\begin{matrix} -\frac{w\cdot x_{0}+b}{\begin{Vmatrix} w \end{Vmatrix}},y_{0}=+1\\\frac{w\cdot x_{0}+b}{\begin{Vmatrix} w \end{Vmatrix}},y_{0}=-1 \end{matrix}\right.=\frac{-y_{0}(w\cdot x_{0}+b)}{\begin{Vmatrix} w \end{Vmatrix}}

        误分类点x_{i}到S的距离是:-\frac{1}{\begin{Vmatrix} w \end{Vmatrix}}y_{i}(w\cdot x_{i}+b),所有误分类点到S的距离是:-\frac{1}{\begin{Vmatrix} w \end{Vmatrix}}\sum_{i=0}^{m}y_{i}(w\cdot x_{i}+b),其中m代表误分类点的集合,当m中所含的误分类点越少的时候,总距离应该越小;当没有误分类点的时候,m代表空集,总距离为0.所以,我们希望通过最小化总距离来求得相应的参数w和b。

        这里大家可能会好奇,\frac{1}{\begin{Vmatrix} w \end{Vmatrix}}并不是一个固定的值,为什么不会影响最后的结果呐?原因一:\frac{1}{\begin{Vmatrix} w \end{Vmatrix}}并不会影响正值还是负值的判断;二:它不会影响感知机算法的最终结果。于是我们定义了损失函数L(w,b)=-\sum_{x_{i}\in M}y_{i}(w\cdot x_{i}+b)

2.3  准备知识:梯队下降法

        梯度下降法在机器学习中应用十分广泛,它是求解无约束最优化问题的一种最常用方法。

2.3.1  直观理解

        在左图中,是连绵起伏的山脉,而且云雾缭绕,这时候如果我们位于山顶的话,不知道地貌如何,而且也不知道山底在什么方向,这时候该如何下山,怎么下山最快呐?最简单的方法就是走一步看一步。我们每走一步就涉及到方向和步长的问题,我们可以每到一处感受一下当前的所处位置的往下最陡的方向,然后迈一小步,接着在新的位置感受最陡的方向,再往前迈一小步,就这样一小步一小步,我们就能到山脚下了,这就是梯度下降法的直观理解。

        现在我们假设有一个可微函数,我们想找到这个可微函数的最小值,也就是相当于想找一下山的山底。根据下山过程的情景假设,我们最快的下山过程就是每次都要找当前位置最陡峭的方向,沿着这个方向往下走。那么对于函数来说,我们每次都要找到该定点相应的梯度,然后沿着梯度下降的方向往下走,这样就是使函数值下降最快的方向了。

2.3.2  概念

        梯度是指某一函数在该点处最大的方向导数,沿着该方向可取得最大的变化率。\bigtriangledown =\frac{\partial f(\theta )}{\partial \theta }

        如果f(\theta )是凸函数,可通过梯度下降法进行优化:\theta ^{(k+1)}=\theta ^{(k)}-\eta \bigtriangledown f(\theta ^{(k)})

        梯度下降法的算法:

2.4  感知机----学习算法之原始形式

2.4.1  学习问题

        给定一个训练数据集T=\begin{Bmatrix} (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N}) \end{Bmatrix},其中x_{i}\subseteq R^{n}y_{i}=\begin{Bmatrix} +1,-1 \end{Bmatrix};损失函数L( w,b)=-\sum_{i=0}^{M}y_{i}(w\cdot x_{i}+b),其中,M代表所有误分类点的集合。

        对于感知机问题,我们想求得一个分离超平面,这个分离超平面是由参数w和b构成,那么如何求w和b呐,这是一个最优化问题,也就是寻找使损失函数L最小的参数w和b,即

2.4.2  原始形式

       我们知道损失函数是L( w,b)=-\sum_{i=0}^{M}y_{i}(w\cdot x_{i}+b)。它对参数w的梯度是:\bigtriangledown _{w}L(w,b)=-\sum_{i=0}^{M}y_{i}x_{i};对参数b的梯度是:\bigtriangledown _{b}L(w,b)=-\sum_{i=0}^{M}y_{i}。需要注意的是:这些都是对误分类点M进行的。

        对于感知机模型,我们选取的是随机梯度下降法:每次随机选择一个误分类点,每一轮的迭代速度快。如果样本点(x_{1},y_{1})是误分类点,(x_{2},y_{2})是误分类点,我们先选择了(x_{1},y_{1})进行参数更新,有可能在参数更新后所得到的感知机模型,它对于(x_{2},y_{2})就不是误分类点了,这也是我们选择随机梯度下降法的原因。具体来看就是w=w+\eta \cdot y_{i}x_{i}b=b+\eta \cdot y_{i}

        梯度下降法的原始形式,我们也称之为批量梯度下降法:每次迭代使用所有误分类点来进行参数更新,每一轮的迭代速度慢。即w=w+\eta \sum_{i=0}^{M}y_{i}x_{i}b=b+\eta \sum_{i=0}^{M}y_{i},其中,\eta (0< \eta \leq 1)代表步长。

        还有一种梯度下降法:小批量梯度下降法。它既不像批量梯度下降法选择所有的误分类点,也不像随机梯度下降法随机选择一个误分类点,而是选择部分样本点进行参数更新,但是对于小批量梯度下降法,它所面临的问题是:我们每次选择多少个样本点,选择哪些样本点合适。

        现在我们来看一下算法:

输入原始训练集:T=\begin{Bmatrix} (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N}) \end{Bmatrix},其中x_{i}\subseteq R^{n}y_{i}=\begin{Bmatrix} +1,-1 \end{Bmatrix};输出w,b;感知机模型f(x)=sign(w\cdot x+b),我们假设右图中蓝色的直线对应于选取的初始值所对应的分离超平面,具体步骤如下:

       对于感知机模型,参数w对应于分离超平面的旋转程度,而b对应于位移量,所以不停地迭代就可以使得分离超平面越来越接近于能够正确将所有样本点分类的那个超平面,这有可能是橙色的直线,也有可能是黑色的直线,这就说明我们最后得到的分离超平面是不唯一的。

2.4.3  例题分析

        假设训练集T=\begin{Bmatrix} (x_{1},+1),(x_{2},+1),(x_{3},-1) \end{Bmatrix},其中x_{1}=(3,3)^{T}x_{2}=(4,3)^{T}x_{3}=(1,1)^{T},假设\eta =1。输出:w,b;感知机模型f(x)=sign(w\cdot x+b)

此时学习问题就是通过使得损失函数达到最小,来求得相应的参数w,b,即:

如果选择初始值w_{0}=(0,0)^{T}b_{0}=0,对于点x_{1},有y_{1}(w_{0}\cdot x_{1}+b_{0})=-1\times ((0,0)^{T}\cdot (3,3)^{T}+0)=0 ,根据之前的步骤可知,x_{1}是误分类点,我们用x_{1}来进行参数的更新,更新后的参数w_{1}=w_{0}+\eta y_{1}x_{1}=(3,3)^{T}b_{1}=b_{0}+\eta y_{1}=1。知道了w_{1}b_{1},我们可以得到一个新的模型:w_{1}\cdot x+b=3x^{(1)}+3x^{(2)}+1。得到新的模型之后,对于点x_{1}有:y_{1}(w_{1}\cdot x_{1}+b_{1})=+1\times (3x_{1}^{(1)}+3x_{1}^{(2)}+1)=19> 0;对于点x_{2}有:y_{2}(w_{1}\cdot x_{2}+b_{1})=+1\times (3x_{2}^{(1)}+3x_{2}^{(2)}+1)=22> 0;对于点x_{3}有:y_{3}(w_{1}\cdot x_{3}+b_{1})=-1\times (3x_{3}^{(1)}+3x_{3}^{(2)}+1)=-7< 0。由以上的计算可知:x_{1}x_{2}可以被正确分类,x_{3}是是误分类的点,用点x_{3}进行参数更新:w_{2}=w_{1}+\eta y_{3}x_{3}=(2,2)^{T}b_{2}=b_{1}+\eta y_{3}=0,此时的模型就更新为:w_{2}\cdot x+b_{2}=2x^{(1)}+2x^{(2)},重复以上的步骤,直到没有误分类点,

此时得到的参数是:w_{7}=(1,1)^{T}b_{7}=-3,模型为:w_{7}\cdot x+b_{7}=x^{(1)}+x^{(2)}-3

        对于这个例子,分离超平面是:x^{(1)}+x^{(2)}-3=0,因此感知机模型是:f(x)=sign(x^{(1)}+x^{(2)}-3)

        在之前的误分类点中,误分类点依次取得是x_{1},x_{3},x_{3},x_{3},x_{1},x_{3},x_{3},此时得到的超平面是x^{(1)}+x^{(2)}-3=0;若误分类点依次取x_{1},x_{3},x_{3},x_{3},x_{2},x_{3},x_{3},x_{3},x_{1},x_{3},x_{3},得到的超平面是2x^{(1)}+x^{2}-5=0

2.5  感知机----学习算法之对偶形式

2.5.1  对偶形式

        在原始形式中,若(x_{i},y_{i})为误分类点,可如下更新参数:w=w+\eta y_{i}x_{i}b=b+\eta y_{i},假设初始值w_{0}=\mathbf{0},b_{0}=0对误分类点(x_{i},y_{i})通过上述公式更新参数,修改n_{i}次之后,w,b的增量分别为\alpha _{i}y_{i}x_{i}\alpha _{i}y_{i},其中\alpha _{i}=n_{i}\eta,最后学习到的参数是:w=\sum_{i=1}^{N}\alpha _{i}y_{i}x_{i}b=\sum_{i=1}^{N}\alpha _{i}y_{i}

        以上述的原始算法求解的迭代过程为例:

x_{1}出现2次,所以n_{1}=2; x_{2}出现0次,所以n_{2}=0; x_{3}出现5次,所以n_{3}=5。我们可以看出n_{1}+n_{3}=7,这也就是实际迭代的次数。n_{1}代表了x_{1}在迭代中的次数,n_{3}代表了x_{3}在迭代中的次数。

        关于误分类点(x_{i},y_{i})会带来一个w和b的增量,如果1\leq i\leq N,那么每一个实例对于参数的增量都可以写出来,我们将其求和,就得到了最后学习到的参数:w=\sum_{i=1}^{N}\alpha _{i}y_{i}x_{i}b=\sum_{i=1}^{N}\alpha _{i}y_{i}

  因为更新次数:n_{1}=2,n_{2}=0,n_{3}=5,最后 学习到的参数为:w=\alpha _{1}y_{1}x_{1}+\alpha _{3}y_{3}x_{3}=(1,1)^{T}b=\alpha _{1}y_{1}+\alpha _{3}y_{3}=-3,因此最后的模型为:w_{7}\cdot x+b_{7}=x^{(1)}+x^{(2)}-3

        我们通过最终参数的表达式可以看出:对偶形式的学习算法,它的基本思想就是将参数通过y_{i}x_{i}的线性组合表达出来,然后求解这个线性组合前的系数,比如\alpha _{i},而\alpha _{i}=n_{i}\eta。某个点的迭代次数越多,就说明这个点越难被分类,它对最终的结果就会影响很大。

        现在我们看一下对偶形式学习算法的具体步骤:

假如训练数据集T=\begin{Bmatrix} (x_{1},y_{1}),(x_{2},y_{2}),...,(x_{N},y_{N}) \end{Bmatrix},步长\eta (0< \eta \leq 1);输出:\alpha ,b;感知机模型f(x)=sign(\sum_{j=1}^{N}\alpha _{j}y_{j}x_{j}\cdot x+b),其中\alpha =(\alpha _{1},\alpha _{2},...,\alpha _{N})^{T}

        迭代步骤如下:

        这里,我们关注一下算法中的第三步,如果满足y_{i}(\sum_{j=1}^{N}\alpha _{j}y_{j}x_{j}\cdot x_{i}+b)\leq 0就说明(x_{i},y_{i})是误分类点,我们需要通过(x_{i},y_{i})对参数进行一个更新。将这个迭代条件具体展开来看:y_{i}(\sum_{j=1}^{N}\alpha _{j}y_{j}x_{j}\cdot x_{i}+b)=y_{i}\begin{bmatrix} (\alpha _{1}y_{1}x_{1}+\alpha _{2}y_{2}x_{2}+...+\alpha _{N}y_{N}x_{N}) \cdot x_{i}+b\end{bmatrix}=y_{i} (\alpha _{1}y_{1}x_{1}\cdot x_{i}+\alpha _{2}y_{2}x_{2}\cdot x_{i}+...+\alpha _{N}y_{N}x_{N}\cdot x_{i}+b)\leq 0

        在上述的公式中,有很多的内积运算,为了计算的方便,我们现在将实例两两之间的内积都计算出来,储存在一个Gram矩阵里,记作G

2.5.2  例题分析

 第一步:选取初始值\alpha ^{(0)}=(0,0,0)^{T}b ^{(0)}=0

第二步:计算Gram矩阵  G=\begin{bmatrix} x_{1}\cdot x_{1} &x_{1}\cdot x_{1} &x_{2}\cdot x_{3} \\ x_{2}\cdot x_{1}& x_{2}\cdot x_{2} & x_{2}\cdot x_{3}\\ x_{3}\cdot x_{1}& x_{3}\cdot x_{2} & x_{3}\cdot x_{3} \end{bmatrix}=\begin{bmatrix} 18 &21 &6 \\ 21&25 &7 \\ 6&7 & 2 \end{bmatrix}

第三步:看一下(x_{i},y_{i})是否满足误分类条件,满足y_{i}(\sum_{j=1}^{N}\alpha _{j}y_{j}x_{j}\cdot x_{i}+b)\leq 0就说明(x_{i},y_{i})是误分类点,需要进行参数更新。对于点x_{1},有y_{1}(\sum_{j=1}^{N}\alpha _{j}^{(0)}y_{j}x_{j}\cdot x_{1}+b^{(0)})=0,说明点x_{1}是误分类点,更新参数\alpha _{1}^{(1)}=\alpha _{1}^{(0)}+\eta =1b^{(1)}=b^{(0)}+\eta y_{1} =1,此时我们得到一个新的模型,

        对于这个模型,我们重新看一下实例点x_{1},x_{2},x_{3}哪个是误分类点。

对于点x_{1},有y_{1}(\sum_{j=1}^{N}\alpha _{j}^{(1)}y_{j}x_{j}\cdot x_{1}+b^{(1)})=y_{1}(\alpha _{1}^{(1)}y_{1}x_{1}\cdot x_{1}+b^{(1)})=19> 0

对于点x_{2},有y_{2}(\sum_{j=1}^{N}\alpha _{j}^{(1)}y_{j}x_{j}\cdot x_{2}+b^{(1)})=y_{2}(\alpha _{1}^{(1)}y_{1}x_{1}\cdot x_{2}+b^{(1)})=22> 0

对于点x_{3},有y_{3}(\sum_{j=1}^{N}\alpha _{j}^{(1)}y_{j}x_{j}\cdot x_{3}+b^{(1)})=y_{1}(\alpha _{1}^{(1)}y_{1}x_{1}\cdot x_{3}+b^{(1)})=-7< 0

        由以上计算可以x_{1}x_{2}是正确分类点,x_{3}是误分类点,我们需要对参数进行更新:\alpha _{3}^{(2)}=\alpha _{3}^{(1)}+\eta =1b^{(2)}=b^{(1)}+\eta y_{3} =0

第四步:重复以上步骤,直到没有误分类点:

        最后的系数\alpha =(2,0,5),因此参数w^{(7)}=\alpha _{1}\eta y_{1}x_{1}+\alpha _{2}\eta y_{2}x_{2}+\alpha _{3}\eta y_{3}x_{3}=2\cdot 1\cdot1\cdot(3,3)^{T}+5\cdot1\cdot(-1)\cdot(1,1)^{T}=(1,1)^{T} 

b^{(7)}=-3

        最终,分离超平面就是x^{(1)}+x^{(2)}-3=0;感知机模型就是f(x)=sign(x^{(1)}+x^{(2)}-3)

        我们可以看出,无论是原始形式还是对偶形式,如果迭代的过程是一样的,最后得到的分离超平面还是感知机模型是不变的。同样地,类似于原始形式的学习算法,对偶形式的学习算法也是收敛的,而且存在多种解。如果我们要确定唯一解,需要加约束条件。

相关文章:

  • 火山 RTC 引擎10 ----远端视频 转网易视频格式
  • Houdini POP入门学习07 - 分组
  • 算法岗面试经验分享-大模型篇
  • 学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
  • 软件开发工程师如何在项目开发中了解学习 ISO 13485
  • WPS2024 软件下载及安装教程!
  • Java多线程实现之Thread类深度解析
  • AI电销机器人智能的发展趋势是什么?
  • 无需改造业务系统,数据导出行为也能“可控、可审、可溯”
  • 验证回文串
  • 根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
  • Docker拉取MySQL后数据库连接失败的解决方案
  • 解决:Android studio 编译后报错\app\src\main\cpp\CMakeLists.txt‘ to exist
  • 如何在Android Studio中导出apk文件
  • 使用LangGraph和LangSmith构建多智能体人工智能系统
  • 快速排序算法改进:随机快排-荷兰国旗划分详解
  • Python异步编程:深入理解协程的原理与实践指南
  • AI辅助办公让公司陷入数据泄密危机
  • 今日行情明日机会——20250609
  • Prometheus+ Grafana 监控系统入门
  • php商城建站系统/网站建设营销型
  • 贵阳企业自助建站/平台推广计划
  • 谷歌官方建站服务/阿里云空间+1对1私人专属设计师
  • 电子商务网站的类型/天津关键词优化网排名
  • 广告公司怎么做业务/键词优化排名
  • 亦庄网站开发公司/厦门seo哪家强