精华内容
下载资源
问答
  • 在这个例子中,输入空间所有可能的身高、体重组合(二维特征向量),记作 X⊆R2\mathcal{X} \subseteq R^2X⊆R2 ;输出空间所有可能的性别(只有两个取值的离散变量),记作Y⊆{+1,−1}\mathcal{Y} \subseteq \{...

    首先,我们来看下面的例子。

    【例1】通过给定的身高、体重组合与对应性别的数据,实现对未知身高、体重组合的性别预测。

    在这个例子中,输入空间为所有可能的身高、体重组合(二维特征向量),记作 X ⊆ R 2 \mathcal{X} \subseteq R^2 XR2 ;输出空间为所有可能的性别(只有两个取值的离散变量),记作 Y ⊆ { + 1 , − 1 } \mathcal{Y} \subseteq \{+1,-1\} Y{+1,1}

    输入实例 x x x的特征向量记作 x = ( x ( 1 ) , x ( 2 ) ) T ∈ X x = (x^{(1)},x^{(2)})^T \in \mathcal{X} x=(x(1),x(2))TX x ( 1 ) x^{(1)} x(1) x ( 2 ) x^{(2)} x(2)分别表示实例的第一个特征(身高)和第二个特征(体重)。

    因为输入变量为连续变量,输出变量为只有两个取值的离散变量,所以这是一个二类分类问题。

    我们希望得到一个由输入空间到输出空间的函数 f ( x ) f(x) f(x)(决策函数),可以将输入的实例 x x x划分到两类中。


    身高作为X轴,体重作为Y轴,不同性别用不同颜色表示,将输入的实例绘制到平面直角坐标系中(如下图)。

    在这里插入图片描述

    上图ECharts源码 : ECharts示例图001:二维感知机示例图(2维/散点+折线图)

    可以看到,女性(蓝色)样本点主要集中于左下区域,男性(绿色)样本点主要集中于右上区域。

    于是很自然地想到:或许可以通过构造一条直线(例如上图中的黄线),将平面划分为左下、右上两个区域。将所有位于左下区域的未知样本点估计为女性,将所有位于右上区域的样本点估计为男性。当存在某条直线可以将女性样本点和男性样本点正确地划分到直线两侧时,则必然有无穷多条满足要求的直线。

    根据直线的一般式 w 1 x ( 1 ) + w 2 x ( 2 ) + b = 0 w_1 x^{(1)} + w_2 x^{(2)} + b =0 w1x(1)+w2x(2)+b=0,这个思路可以表示为由输入空间到输出空间的函数:
    f ( x ) = { + 1 , w 1 x ( 1 ) + w 2 x ( 2 ) + b ≥ 0 − 1 , w 1 x ( 1 ) + w 2 x ( 2 ) + b < 0 f(x) = \begin{cases} +1, & w_1 x^{(1)} + w_2 x^{(2)} + b \ge 0\\ -1, & w_1 x^{(1)} + w_2 x^{(2)} + b < 0\\ \end{cases} f(x)={+1,1,w1x(1)+w2x(2)+b0w1x(1)+w2x(2)+b<0
    当特征向量为二维时, 感知机对应于输入空间(二维欧式空间)中将实例划分为正负两类的分离直线,函数 f ( x ) f(x) f(x)即为感知机的定义式。

    将输入的特征向量一般化到n维,则感知机对应于将输入空间(n维欧式空间)划分为正负两类的分离超平面。

    用向量表示特征向量和参数,输入实例 x x x的特征向量记作 x = ( x ( 1 ) , x ( 2 ) , ⋯   , x ( n ) ) T ∈ X ⊆ R n x=(x^{(1)},x^{(2)},\cdots,x^{(n)})^T \in \mathcal{X} \subseteq R^n x=(x(1),x(2),,x(n))TXRn,参数记作 w = ( w 1 , w 2 , ⋯   , w n ) T ∈ R n w=(w_1,w_2,\cdots,w_n)^T \in R^n w=(w1,w2,,wn)TRn,此时分离超平面可以表示为 w ⋅ x + b = 0 w·x+b=0 wx+b=0,感知机可以表示为由输入空间到输出空间的函数:
    f ( x ) = { + 1 , w ⋅ x + b ≥ 0 − 1 , w ⋅ x + b < 0 f(x) = \begin{cases} +1, & w·x + b \ge 0\\ -1, & w·x + b < 0\\ \end{cases} f(x)={+1,1,wx+b0wx+b<0

    此时, w w w为分离超平面的法向量, b b b为分离超平面的截距。

    下面给出n维特征向量时感知机的标准定义。

    【定义1】感知机 (来自李航的《统计学习方法》P. 35)

    假设输入空间(特征空间)是 X ⊆ R n \mathcal{X} \subseteq R^n XRn ,输出空间是 Y ⊆ { + 1 , − 1 } \mathcal{Y} \subseteq \{+1,-1\} Y{+1,1} 。输入 x ⊆ X x \subseteq \mathcal{X} xX 表示实例的特征向量,对应于输入空间(特征空间)的点;输出 y ∈ Y y \in\mathcal{Y} yY表示实例的类别。由输入空间到输出空间的如下函数:
    f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign(w·x+b) f(x)=sign(wx+b)
    称为感知机。其中, w w w b b b 为感知机模型参数, w ∈ R n w \in R^n wRn 叫作权值或权值向量, b ∈ R b \in R bR 叫作偏置, w ⋅ x w·x wx 表示 w w w x x x 的内积。 s i g n sign sign 是符号函数,即
    s i g n ( x ) = { + 1 , x ≥ 0 − 1 , x < 0 sign(x)=\begin{cases} +1, & x \ge 0\\ -1, & x < 0\\ \end{cases} sign(x)={+1,1,x0x<0


    感知机模型对数据的要求:训练数据集中需存在某个超平面能够将数据集的正实例点和负实例点完全正确地划分到超平面的两侧,即训练数据集是线性可分的。因为只有当训练数据集是线性可分时,感知机学习算法才是收敛的;如果训练数据集线性不可分,则感知机学习算法不收敛,迭代结果会发生震荡。当训练数据集线性不可分时,可以使用线性支持向量机。

    感知机模型的学习过程:依据训练数据集求得感知机模型,即求得模型参数 w w w b b b

    感知机模型的预测过程:通过学习得到的感知机模型,计算新的输入实例所对应的输出类别。

    感知机模型的类别划分

    • 用于解决二类分类问题的监督学习模型
    • 非概率模型:模型取函数形式(而非概率模型的条件概率分布形式)
    • 线性模型:模型函数为线性函数
    • 参数化模型:模型参数的维度固定
    • 判别模型:直接学习决策函数 f ( x ) f(x) f(x)

    感知机模型的主要优点:算法简单,易于实现。

    感知机模型的主要缺点:要求训练数据集线性可分。

    展开全文
  • 机器学习基础篇(十二)——多层感知机 一、概述 多层感知机(MLP:Multi-Layer Perceptron)由感知机(PLA: Perceptron Learning Algorithm)推广而来。它最主要的特点是有多个神经元层,因此也深度神经网络(DNN: ...

    机器学习基础篇(十二)——多层感知机

    一、概述

    多层感知机(MLP:Multi-Layer Perceptron)由感知机(PLA: Perceptron Learning Algorithm)推广而来。它最主要的特点是有多个神经元层,因此也叫深度神经网络(DNN: Deep Neural Networks)。

    感知机是单个神经元模型,是较大神经网络的前身。神经网络的强大之处在于它们能够学习训练数据中的表示,以及如何将其与想要预测的输出变量联系起来。从数学上讲,它们能够学习任何映射函数,并且已经被证明是一种通用的近似算法。

    神经网络的预测能力来自网络的分层或多层结构。而多层感知机是指具有至少三层节点,输入层,一些中间层和输出层的神经网络。给定层中的每个节点都连接到相邻层中的每个节点。输入层接收数据,中间层计算数据,输出层输出结果

    下面让我们来简单的看一下多层感知机的推导过程吧。

    二、多层感知机的定义

    1. 首先我们先看一下感知机(PLA)是什么? 在这里插入图片描述
      如图所示,感知机只有输入和输出层,这两层共同组成了一个简单的神经元。首先加权输入信号,然后使用激活功能,最终产生输出信号。
      ω将输入的变量映射到了一个新的维度空间中,b的存在使得映射后的数据具有平移能力。(称为偏置量)
      在这里插入图片描述
      3.显然,PLA是一个线性的二分类器,但它对非线性的数据并不能进行有效的分类。因此我们可以加深这个神经元的网络层次,理论上来说,多层网络可以模拟任何复杂的函数。
    2. 当我们加深到很多层的时候,我们就得到了一个多层感知机(MLP)
    3. 我们将第一层称之为输入层,最后一层称之有输出层,中间的层称之为隐层。
    4. MLP并没有限定隐层的数量,对于输出层神经元的个数也没有限制,所以我们可以根据各自的需求选择合适的隐层层数。

    举个栗子:我们在输入层输入三个变量[x1,x2,x3]以及一个偏置量b,偏置量的作用是给网络分类增加平移的功能。 然后我们设置隐层为1层,输出神经元个数为3个。可以得到如下的神经网络结构:

    在这里插入图片描述

    三、节点

    每层的神经元被称为节点,那么针对于一个多层感知机,我们应该如何选择层数和隐层节点数呢?

    通常情况下,我们只需要一个隐层,就可以模拟任何我们想要的函数。所以,大多情况下我们使用一个三层的感知机即可(包含输入层,一个隐层,一个输出层)。

    那么,节点又该怎么选择呢?

    如果隐层节点过少,网络结构简单,学习能力不够。如果隐层节点过多,不仅会大大增加网络结构的复杂性,而且学习过程中更易陷入局部极小点,学习速度会变得很慢。

    我们一般有以下几种方法来选择隐层的节点数:

    • m:隐层节点数
    • n:输入层节点数
    • I:输入层节点数
    • α:1-10之间的整数

    我们一般可以使用以下几个公式来选择节点数(当然也可以自己选择)
    在这里插入图片描述
    对于每个隐层的节点,我们都将会使用激活函数激活此节点。
    通常情况下,节点根据前一层节点的加权总和来激活,即每个连接点的权重乘以该节点的激活函数的总和。
    每个节点仅从前一层获取输入值,因此权重是同一层中节点的唯一区分依据。
    常见的激活函数有:sigmoid函数,tanh函数

    • sigmoid函数:
      在这里插入图片描述
    • tanh函数
      在这里插入图片描述

    四、反向传播

    在训练神经网络时,我们预期的输出是输出层中每个节点的激活级别。根据实际激活情况,我们可以找到每个节点的cost(损失成本)。并根据损失成本的不同,相应地调整权重。

    反向传播的算法就是根据每个节点的损失成本调整确定每个节点激活的权重。简单来说,在上文中,我们已经了解了如何选择隐层数目和节点数目的相关知识了。那么问题来了,我们应该如何去选择每个节点的权重呢?

    这就要用到我们所说的反向传播算法了。

    1. 首先可以定义一个损失函数。(损失函数的相关知识见第一节相关知识
    2. 然后我们可以计算出每个节点的损失函数(该函数与该点的权重以及偏置量b有关)。选择合适的权重值以及偏置量b,使得损失函数达到最小值。
    3. 具体的数学知识不再赘述
    4. 请看下面这张截图,来自tensorflow测试站点。这里正在训练一个神经网络来对蓝色和橙色点进行分类。这里对节点所做的选择是任意的,读者可以做不同的尝试
      在这里插入图片描述
    5. 讨论反向传播,让我们考虑一下这个网络第一步将做什么。
    6. 它将在网络中测试一些训练数据,期望在(隐藏的)正确输出节点上看到完全激活,而在错误输出节点上没有激活。
    7. 当模型不正确时,它将从输出层向后查看,发现错误。
    8. 然后,它会相应地改变权重,所以离得远的权重会比离得近的权重变化更大。
    9. 在这些前期步骤中,它将具有较高的学习率,这使权重不稳定。
    10. 经过几次迭代之后,权重会更加稳定。
    11. 记住这一点,让我们向前跳一步。
      在这里插入图片描述
    12. 现在,网络对如何分类数据有一个模糊的概念。它有一个大致的圆圈,随着步骤的继续,分类会变得更加清晰。
    13. 让我们再向前跳几步
      在这里插入图片描述
    14. 如你所见,该模型已经开发出了更好的性能,可以准确地对大多数点进行分类。
    15. 在这一点上,网络减慢了学习速度,因为它经过了足够多的迭代才取得了现在的精确度。

    五、小结

    在本节中,我们了解了多层感知机(MLP)神经网络以及其他神经网络的相关知识。我们了解了节点是什么,掌握了节点的计算方法。最后我们立即饿了反向传播的含义,知道了如何去选择节点的权重。
    自学自用,希望可以和大家积极沟通交流,小伙伴们加油鸭。创作不易,动起可爱的双手,来个赞再走呗 (๑◕ܫ←๑)

    展开全文
  • 多层感知机MLP(Multi Layer Perceptron )是一种特定的人工神经网络(Artificial Neural Networks) 在认识MLP之前,我们先回顾下前馈神经网络。 1、 前馈神经网络 前馈神经网络是最先发明也是最简单的人工神经网络...

    在这里插入图片描述

    多层感知机MLP(Multi Layer Perceptron )是一种特定的人工神经网络(Artificial Neural Networks)

    在认识MLP之前,我们先回顾下前馈神经网络。

    1、 前馈神经网络

    前馈神经网络是最先发明也是最简单的人工神经网络 。它包含了安排在多个层中的多个神经元(节点)。相邻层的节点有连接或者边(edge)。所有的连接都配有权重。
    下面是一个例子:在这里插入图片描述一个前馈神经网络可以包含三种节点:

    1. 输入节点(Input Nodes):输入节点从外部世界提供信息,总称为「输入层」。在输入节点中,不进行任何的计算——仅向隐藏节点传递信息。

    2. 隐藏节点(Hidden Nodes):隐藏节点和外部世界没有直接联系(由此得名)。这些节点进行计算,并将信息从输入节点传递到输出节点。隐藏节点总称为「隐藏层」。尽管一个前馈神经网络只有一个输入层和一个输出层,但网络里可以没有也可以有多个隐藏层。

    3. 输出节点(Output Nodes):输出节点总称为「输出层」,负责计算,并从网络向外部世界传递信息。

    在前馈网络中,信息只单向移动——从输入层开始前向移动,然后通过隐藏层(如果有的话),再到输出层。在网络中没有循环或回路 (前馈神经网络的这个属性和递归神经网络不同,后者的节点连接构成循环)。

    下面是两个前馈神经网络的例子

    1. 单层感知器——这是最简单的前馈神经网络,不包含任何隐藏层

    2. 多层感知器——多层感知器有至少一个隐藏层。我们在下面会只讨论多层感知器,因为在现在的实际应用中,它们比单层感知器要更有用。

    2、多层感知器

    多层感知器(Multi Layer Perceptron,即 MLP)包括至少一个隐藏层(除了一个输入层和一个输出层以外)单层感知器只能学习线性函数,而多层感知器也可以学习非线性函数。

    下面是有一个隐藏层的多层感知机
    在这里插入图片描述
    上图 表示了含有一个隐藏层的多层感知器。注意,所有的连接都有权重,但在图中只标记了三个权重(w0,,w1,w2)。

    输入层:输入层有三个节点。偏置节点值为 1。其他两个节点从 X1 和 X2 取外部输入(皆为根据输入数据集取的数字值)。和上文讨论的一样,在输入层不进行任何计算,所以输入层节点的输出是 1、X1 和 X2 三个值被传入隐藏层。

    隐藏层:隐藏层也有三个节点,偏置节点输出为 1。隐藏层其他两个节点的输出取决于输入层的输出(1,X1,X2)以及连接(边界)所附的权重。上图 显示了隐藏层(高亮)中一个输出的计算。其他隐藏节点的输出计算同理。需留意 f指代激活函数。这些输出被传入输出层的节点。

    输出层:输出层有两个节点,从隐藏层接收输入,并执行类似高亮出的隐藏层的计算。这些作为计算结果的计算值(Y1 和 Y2)就是多层感知器的输出。

    给出一系列特征 X = (x1, x2, …) 和目标 Y,一个多层感知器可以以分类或者回归为目的,学习到特征和目标之间的关系。

    3、训练我们的多层感知器:反向传播算法

    反向传播误差,通常缩写为「BackProp」,是几种训练人工神经网络的方法之一。这是一种监督学习方法,即通过标记的训练数据来学习(有监督者来引导学习)。

    简单说来,BackProp 就像「从错误中学习」。监督者在人工神经网络犯错误时进行纠正。

    一个人工神经网络包含多层的节点;输入层,中间隐藏层和输出层。相邻层节点的连接都有配有「权重」。学习的目的是为这些边缘分配正确的权重。通过输入向量,这些权重可以决定输出向量。

    在监督学习中,训练集是已标注的。这意味着对于一些给定的输入,我们知道期望 / 期待的输出(标注)。

    反向传播算法:最初,所有的边权重(edge weight)都是随机分配的。对于所有训练数据集中的输入,人工神经网络都被激活,并且观察其输出。这些输出会和我们已知的、期望的输出进行比较,误差会「传播」回上一层。该误差会被标注,权重也会被相应的「调整」。该流程重复,直到输出误差低于制定的标准

    上述算法结束后,我们就得到了一个学习过的人工神经网络,该网络被认为是可以接受「新」输入的。该人工神经网络可以说从几个样本(标注数据)和其错误(误差传播)中得到了学习。

    4、通过一个例子来理解MLP

    1、题目

    假设我们有这样一个学生分数数据集:
    在这里插入图片描述
    两个输入栏表示了学生学习的时间和期中考试的分数。最终结果栏可以有两种值,1 或者 0,来表示学生是否通过的期末考试。例如,我们可以看到,如果学生学习了 35 个小时并在期中获得了 67 分,他 / 她就会通过期末考试。

    现在我们假设我们想预测一个学习了 25 个小时并在期中考试中获得 70 分的学生是否能够通过期末考试。
    在这里插入图片描述
    这是一个二元分类问题,多层感知器可以从给定的样本(训练数据)进行学习,并且根据给出的新的数据点,进行准确的预测。在下面我们可以看到一个多层感知器如何学习这种关系。

    2、MLP学习的具体过程

    第一步 MLP的前向传播

    MLP输入层有两个节点(除了偏置节点以外),两个节点分别接收「学习小时数」和「期中考试分数」。感知器也有一个包含两个节点的隐藏层(除了偏置节点以外)。输出层也有两个节点——上面一个节点输出「通过」的概率,下面一个节点输出「不通过」的概率。

    在分类任务中,我们通常在感知器的输出层中使用 Softmax 函数作为激活函数,以保证输出的是概率并且相加等于 1。Softmax 函数接收一个随机实值的分数向量,转化成多个介于 0 和 1 之间、并且总和为 1 的多个向量值。所以,在这个例子中:

    概率(Pass)+概率(Fail)=1

    接下来看下图:
    在这里插入图片描述
    网络中所有的权重都是随机分配的。我们现在考虑图 5 中标注 V 的隐藏层节点。假设从输入连接到这些节点的权重分别为 w1、w2 和 w3(如图所示)。

    神经网络会将第一个训练样本作为输入(我们已知在输入为 35 和 67 的情况下,通过的概率为 1)。

    网络的输入=[35, 67]

    期望的网络输出(目标)=[1, 0]

    涉及到的节点的输出 V 可以按如下方式计算(f 是类似 Sigmoid 的激活函数):

    V = f(1w1 + 35w2 + 67*w3)

    同样,隐藏层的其他节点的输出也可以计算。隐藏层两个节点的输出,是输出层两个节点的输入。这让我们可以计算输出层两个输出的概率值。

    假设输出层两个节点的输出概率分别为 0.4 和 0.6(因为权重随机,输出也会随机)。我们可以看到计算后的概率(0.4 和 0.6)距离期望概率非常远(1 和 0),所以上图中的网络被视为有「错误输出」。

    第二步 反向传播和权重更新

    我们计算输出节点的总误差,并将这些误差用反向传播算法传播回网络,以计算梯度。接下来,我们使用类似梯度下降之类的算法来「调整」网络中的所有权重,目的是减少输出层的误差。图 6 展示了这一过程(暂时忽略图中的数学等式)。

    假设附给节点的新权重分别是 w4,w5 和 w6(在反向传播和权重调整之后)

    下图为多层感知机中的反向传播和更新步骤:
    在这里插入图片描述
    如果我们现在再次向网络输入同样的样本,网络应该比之前有更好的表现,因为为了最小化误差,已经调整了权重。如图 7 所示,和之前的 [0.6, -0.4] 相比,输出节点的误差已经减少到了 [0.2, -0.2]。这意味着我们的网络已经学习了如何正确对第一个训练样本进行分类

    在同样的输入下,多层感知器网络有更好的表现:
    在这里插入图片描述
    这里回避了数学公式和类似「梯度下降(Gradient Descent)」之类概念的解释,而是培养了一种对于算法的直觉。

    最后说下MLP,全连接网络以及DNN的关系:
    FullyConnected(FC)layer = 一层layer
    MLP = 多层 FC layer构成的NN
    DNN = MLP和CNN的集合相并,通常包括多个卷积layer和FC layer

    展开全文
  • 感知机(perceptron)算法与模型

    千次阅读 2021-09-29 14:12:03
    感知机对应于输入空间(特征空间)中将实例划分正负两类的分离超平面,属于判别模型,感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小...

    感知机(perceptron)算法与模型

    本文仅讨论两类的问题
    参考文献:【感知机学习算法及其Python实现】【基于sklearn的感知机python3】,【统计学习方法 第二版】

    1. 前言

    感知机(perception)是二类分类的线性模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值。感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判别模型,感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。感知机学习算法具有简单而易于实现的优点,分为原始形式和对偶形式。感知机预测是用学习得到的感知机模型对新的输入实例进行分类。

    2. 感知机模型

    假设输入空间(特征空间)是 χ ⊆ R n \chi \subseteq R^n χRn,输出空间是 γ = { + 1 , − 1 } \gamma=\{+1,-1\} γ={+1,1}。输入 x ∈ χ x \in \chi xχ表示实例的特征向量,对应于输入空间(特征空间)的点;输出 y ∈ γ y \in \gamma yγ表示实例的类别。由输入空间到输出空间的如下函数:
    f ( x ) = s i g n ( w ⋅ x + b ) (1) f(x)=sign(w·x+b) \tag 1 f(x)=sign(wx+b)(1)
    称为感知机。其中, w w w b b b为感知机模型参数, w ∈ R n w \in R^n wRn叫作权值或权值向量(weight vector), b ∈ R b \in R bR叫做偏置(bias), w ⋅ x w·x wx表示 w w w x x x的内积。 s i g n sign sign符号函数(若 x ≥ 0 x \geq 0 x0,取值为+1;若 x < 0 x < 0 x<0,取值为-1)。
    感知机是一种线性分类模型,属于判别模型。感知机模型的假设空间是定义在特征空间中的所有线性分类模型(linear classification model)或线性分类器(linear classifier),即函数集合 { f ∣ f ( x ) = w ⋅ x + b } \{f|f(x)=w·x+b\} {ff(x)=wx+b}
    感知机有如下几何解释:线性方程
    w ⋅ x + b = 0 (2) w·x+b=0 \tag 2 wx+b=0(2)
    对应于特征空间 R n R^n Rn中的一个超平面 S S S,其中 w w w是超平面的法向量, b b b是超平面的截距。这个超平面将特征空间划分为两个部分。位于两部分的点(特征向量)分别被划分为正、负两类。因此,超平面 S S S得名为**分离超平面(separating hyperplane),如图所示:

    在这里插入图片描述
    感知机学习,由训练数据集(实例的特征向量及类别)
    T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } (3) T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} \tag 3 T={(x1,y1),(x2,y2),...,(xN,yN)}(3)
    其中, x i ∈ χ = R n x_i \in \chi=R^n xiχ=Rn y i ∈ γ = { + 1 , − 1 } y_i \in \gamma=\{+1,-1\} yiγ={+1,1} i = 1 , 2 , . . . , N i=1,2,...,N i=1,2,...,N,求得感知机模型 ( 1 ) (1) (1),即求得模型参数 w , b w,b w,b。感知机预测,通过学习得到的感知机模型,对于新的输入实例给出其对应的输出类别。

    3. 感知机学习策略

    假设数据集是线性可分的,感知机学习的目标是求得一个能够将训练集正实例点和负实例点完全正确分开的分离超平面。为了找出这样的超平面,即确定感知机模型参数 w , b w,b w,b,需要确定一个学习策略,即定义(经验)损失函数并将损失函数极小化。
    损失函数的一个自然选择是误分类点的总数。但是,这样的损失函数不是参数 w , b w,b w,b连续可导函数,不易优化。损失函数的另一选择是误分类点到超平面 S S S的总距离,这时感知机所采用的。为此,首先写出输入空间 R n R^n Rn中任一点 x 0 x_0 x0到超平面 S S S的距离:
    1 ∣ ∣ w ∣ ∣ ∣ w ⋅ x 0 + b ∣ (4) \frac{1}{||w||}|w·x_0+b| \tag 4 w1wx0+b(4)
    这里, ∣ ∣ w ∣ ∣ ||w|| w w w w L 2 L_2 L2范数。
    其次,对于误分类的数据 ( x i , y i ) (x_i,y_i) (xi,yi)来说,
    − y i ( w ⋅ x i + b ) > 0 (5) -y_i(w·x_i+b) > 0 \tag 5 yi(wxi+b)>0(5)
    成立。因为当 w ⋅ x i + b > 0 w·x_i+b > 0 wxi+b>0时, y i = − 1 y_i=-1 yi=1;而当 w ⋅ x i + b < 0 w·x_i+b < 0 wxi+b<0时, y i = + 1 y_i=+1 yi=+1。因此,误分类点 x i x_i xi到超平面 S S S的距离是
    − 1 ∣ ∣ w ∣ ∣ y i ( w ⋅ x i + b ) (6) -\frac{1}{||w||}y_i(w·x_i+b) \tag 6 w1yi(wxi+b)(6)
    这样,假设超平面 S S S的误分类点集合为 M M M,那么所有误分类点到超平面 S S S的总距离为
    − 1 ∣ ∣ w ∣ ∣ ∑ x i ∈ M y i ( w ⋅ x i + b ) (7) -\frac{1}{||w||}\sum_{x_i \in M} y_i(w·x_i+b) \tag 7 w1xiMyi(wxi+b)(7)
    不考虑 1 ∣ ∣ w ∣ ∣ \frac{1}{||w||} w1,就得到感知机学习的损失函数。
    给定一个训练数据集
    T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)}
    其中, x i ∈ χ = R n x_i \in \chi=R^n xiχ=Rn y i ∈ γ = { + 1 , − 1 } y_i \in \gamma=\{+1,-1\} yiγ={+1,1} i = 1 , 2... , N i=1,2...,N i=1,2...,N。感知机 s i g n ( w ⋅ x + b ) sign(w·x+b) sign(wx+b)学习的损失函数定义为:
    L ( w , b ) = − ∑ x i ∈ M y i ( w ⋅ x i + b ) (8) L(w,b)=-\sum_{x_i \in M} y_i(w·x_i+b) \tag 8 L(w,b)=xiMyi(wxi+b)(8)
    其中 M M M为误分类点的集合。该函数为非负函数,且误分类点越少,函数值越小。

    4. 感知机学习算法的原始形式

    感知机学习算法是误分类驱动的,具体采用随机梯度下降法(stochastic gradient descent)。首先,任意选取一个超平面 w 0 , b 0 w_0,b_0 w0,b0,然后用梯度下降法不断地极小化目标函数。极小化过程不是一次使所有误分类点的梯度下降,而是一次随机选取一个误分类点使其梯度下降。
    假设误分类点集合 M M M是固定的,那么损失函数 L ( w , b ) L(w,b) L(w,b)的梯度由:
    ∇ w L ( w , b ) = − ∑ x i ∈ M y i x i ∇ b L ( w , b ) = − ∑ x i ∈ M y i (9) \nabla_wL(w,b)=-\sum_{x_i \in M} y_ix_i \\ \nabla_bL(w,b)=-\sum_{x_i \in M} y_i \tag 9 wL(w,b)=xiMyixibL(w,b)=xiMyi(9)
    给出。
    随机选取一个误分类点 ( x i , y i ) (x_i,y_i) (xi,yi),对 w , b w,b w,b进行更新:
    w ← w + η y i x i (10) w \leftarrow w+\eta y_ix_i \tag {10} ww+ηyixi(10)
    b ← b + η y i (11) b \leftarrow b+\eta y_i \tag {11} bb+ηyi(11)
    式中 η ( 0 ≤ η ≤ 1 ) \eta(0 \leq \eta \leq 1) η(0η1)是步长,在统计学习中又称为学习率(learning rate)。这样,通过迭代可以期待损失函数 L ( w , b ) L(w,b) L(w,b)不断减小,直到为0.综上所述,得到如下算法:
    算法
    输入:训练数据集 T = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , . . . , ( x N , y N ) } T=\{(x_1,y_1),(x_2,y_2),...,(x_N,y_N)\} T={(x1,y1),(x2,y2),...,(xN,yN)},其中 x i ∈ χ = R n , y i ∈ γ = { + 1 , − 1 } , i = 1 , 2... , N x_i \in \chi = R^n,y_i \in \gamma =\{+1,-1\},i=1,2...,N xiχ=Rn,yiγ={+1,1},i=1,2...,N;学习率 η ( 0 ≤ η ≤ 1 ) \eta(0 \leq \eta \leq 1) η(0η1)
    输出: w , b w,b w,b;感知机模型 f ( x ) = s i g n ( w ⋅ x + b ) f(x)=sign(w·x+b) f(x)=sign(wx+b)

    1. 选取初值 w 0 , b 0 w_0,b_0 w0,b0
    2. 在训练集中选取数据 ( x i , y i ) (x_i,y_i) (xi,yi)
    3. 如果 y i ( w ⋅ x i + b ) ≤ 0 y_i(w·x_i+b) \leq 0 yi(wxi+b)0
      w ← w + η y i x i b ← b + η y i w \leftarrow w+\eta y_ix_i \\ b \leftarrow b+\eta y_i ww+ηyixibb+ηyi
    4. 转至 ( 2 ) (2) (2),直至训练集中没有误分类点。

    直观解释
    当一个实例点被误分类时,即位于分离超平面的错误一侧时,则调整 w , b w,b w,b的值,使分离超平面向该误分类点的一侧移动,以减少该误分类点与超平面间的距离,直至超平面越过该误分类点使其被正确分类。

    感知机算法的收敛性证明

    Perceptron.py

    import operator
    import os
    
    # 感知机分类
    def perceptronClassify(trainGroup,trainLabels):
        global w, b
        isFind = False  # 是否找到最佳参数w和b的标志
        numSamples = trainGroup.shape[0]
        mLenth = trainGroup.shape[1]
        w = [0]*mLenth
        b = 0
        while(not isFind):
            for i in range(numSamples):
                if cal(trainGroup[i],trainLabels[i]) <= 0:
                    print(w,b)
                    update(trainGroup[i],trainLabels[i])
                    break
                elif i == numSamples-1:
                    print(w,b)
                    isFind = True
    
    def cal(row,trainLabel):
        global w, b
        res = 0
        for i in range(len(row)):
            res += row[i] * w[i]
        res += b
        res *= trainLabel
        return res
    
    def update(row,trainLabel):
        global w, b
        for i in range(len(row)):
            w[i] += trainLabel * row[i]
        b += trainLabel
    

    testPerceptron.py

    import numpy as np
    
    # 构建数据集(数据集来源于统计学习方法第二版)
    def createDataSet():
        # create a matrix: each row as a sample
        group = np.array([[3,3], [4,3], [1,1]])
        labels = [1, 1, -1]
        return group, labels
    
    import Perceptron
    g,l =createDataSet()
    Perceptron.perceptronClassify(g,l)
    

    5. 感知机学习算法的对偶形式

    在这里插入图片描述
    DualPerceptron.py

    import numpy as np
    import operator
    import os
    
    # 感知机分类
    def dualPerceptionClassify(trainGroup,trainLabels):
        global a,b
        isFind = False
        numSamples = trainGroup.shape[0]
        #mLenth = trainGroup.shape[1]
        a = [0]*numSamples
        b = 0
        gMatrix = cal_gram(trainGroup)
        while(not isFind):
            for i in range(numSamples):
                if cal(gMatrix,trainLabels,i) <= 0:
                    cal_wb(trainGroup,trainLabels)
                    update(i,trainLabels[i])
                    break
                elif i == numSamples-1:
                    cal_wb(trainGroup,trainLabels)
                    isFind = True
    
    # 计算Gram矩阵
    def cal_gram(group):
        mLenth = group.shape[0]
        gMatrix = np.zeros((mLenth,mLenth))
        for i in range(mLenth):
            for j in range(mLenth):
                gMatrix[i][j] =  np.dot(group[i],group[j])
        return gMatrix
    
    def update(i,trainLabel):
        global a,b
        a[i] += 1
        b += trainLabel
    
    def cal(gMatrix,trainLabels,key):
        global a,b
        res = 0
        for i in range(len(trainLabels)):
            res += a[i]*trainLabels[i]*gMatrix[key][i]
        res = (res + b)*trainLabels[key]
        return res
    
    # 计算w和b,并输出
    def cal_wb(group,labels):
        global a,b
        w=[0]*(group.shape[1])
        h = 0
        for i in range(len(labels)):
            h +=a[i]*labels[i]
            w +=a[i]*labels[i]*group[i]
        print (w,h)
    

    testDualPerceptron.py

    import numpy as np
    
    # 构建数据集
    def createDataSet():
        # create a matrix: each row as a sample
        group = np.array([[3,3], [4,3], [1,1]])
        labels = [1, 1, -1] # four samples and two classes
        return group, labels
    
    import DualPerceptron
    g,l = createDataSet()
    DualPerceptron.dualPerceptionClassify(g,l)
    

    6. 基于digits数据集的感知机预测分析

    导入数据

    from sklearn.datasets import load_digits
    digits=load_digits()
    

    数据标准化处理

    from sklearn.preprocessing import StandardScaler
    scaler=StandardScaler()
    scaler.fit(digits.data)
    x_scaled=scaler.transform(digits.data)
    

    将数据分别赋予X,y

    X=x_scaled
    y=digits.target
    

    划分训练集、测试集

    from sklearn.model_selection import train_test_split
    X_train,X_test,y_train,y_test=train_test_split(X,y)
    

    调用sklearn,使用感知机预测

    from sklearn.neural_network import MLPClassifier
    mlp=MLPClassifier(hidden_layer_sizes=(30,30,30),activation='logistic',max_iter=100)
    mlp.fit(X_train,y_train)
    

    进行预测,并观察效果

    from sklearn.metrics import classification_report
    predicted=mlp.predict(X_test)
    print(classification_report(y_test, predicted))
    
       precision    recall  f1-score   support
    
               0       0.93      0.93      0.93        40
               1       0.93      0.83      0.88        47
               2       0.88      0.88      0.88        43
               3       0.76      0.85      0.80        48
               4       0.98      0.98      0.98        43
               5       0.82      0.67      0.74        46
               6       0.95      0.97      0.96        37
               7       0.86      0.92      0.89        52
               8       0.77      0.74      0.76        50
               9       0.71      0.77      0.74        44
    
        accuracy                           0.85       450
       macro avg       0.86      0.86      0.85       450
    weighted avg       0.85      0.85      0.85       450
    
    展开全文
  • 文章目录前言红豆与绿豆感知机模型感知机的学习策略原始形式算法步骤例2.1小结 本课程来自深度之眼,部分截图来自课程视频以及李航老师的《统计学习方法》第二版。 公式输入请参考:在线Latex公式 前言 理解感知机...
  • 感知机的缺陷:不能处理异或运算(为什么处理不了?),但是可以处理与、或、非逻辑运算。 感知机其实就是分类的工具,只能处理二分类的问题,而且只能进行线性划分。比如现在的数据集是身高和体重这二维属性,那么...
  • 首先,我们抛开晦涩的学术定义,当我们第一次听到感知机这个名词的时候你的第一反应是什么?也许是某个机器人、某个装置又或者是别的稀奇古怪的想法。 在不查相关资料的情况下,我们自己先望文生义一下。 感...
  • 多层感知机实现XOR门

    2021-08-09 15:53:48
    单层感知机无法实现XOR门(即,无法求解非线性问题),这个也不是什么大问题,其实可以通过“叠加层”来表示,先不管叠加层的物理意义是什么,实现了再说! XOR门通过NAND,AND,OR配置就能实现。 先看下面一张表...
  • 感知机:多个 二.几何意义 一元线性回归:二维 感知机:多维度 三. 一元可以把线性回归看成感知机的特殊情况。 只进行一次数据计算, 四. 一元线性回归的权值是确定的 感知机:不确定,会随数据的计算轮数发生变化 ...
  • (书面内容参考《统计学习方法》李航) 感知机(perceptron)是二分类的线性模型,旨在求...其中,w和b为感知机模型参数,w∊Rn作权值(weight)或权值向量(weight vector),b∊R作偏置(bias),w·x表示w和...
  • 深度学习之感知机

    2021-02-19 18:41:06
    在人工智能领域,有一个方法机器学习。在机器学习这个方法里,有一类算法神经网络。神经网络如下图所示: 上图中每个圆圈都是一个神经元,每条线表示神经元之间的连接。我们可以看到,上面的神经元被分成了多层...
  • 感知机(Perception)原理小结1....感知机是二类分类的 线性分类模型,对应于特征空间中将实例划分正负两类的 分离超平面,属于判别模型。感知机学习算法有 原始形式 和 对偶形式。 适用问题:二类分类 模型特点:
  • 一、感知机的直观理解 感知机应该属于机器学习算法中最简单的一种算法,其原理可以看下图: 比如说我们有一个坐标轴(图中的黑色线),横的x1轴,竖的x2轴。图中的每一个点都是由(x1,x2)决定的。如果我们将这...
  • 什么是神经网络?为了fangbian开始,我将解释一种叫做感知器的...但是要理解为什么乙状结肠神经元是以其方式定义的,首先要花时间去理解感知器是值得的。 那么感知器是如何工作的呢?感知器接收几个二进制输入x1,x...
  • 感知机只有输出层神经元进行激活函数处理,即只有一层功能神经元)其模型公式:其中 感知机模型损失定义: 其中M表示误分类结点的集合; 多层感知机就是含有至少一个隐藏层的由全连接层组成的神经网络,...
  • 5. 感知机分类与序列标注 第4章我们利用隐马尔可夫模型实现了第一个基于序列标注的中文分词器,然而效果并不理想。事实上,隐马尔可夫模型假设人们说的话仅仅取决于一个隐藏的{B.M,E,S序列,这个假设太单纯了,不...
  • sign又sgn,意思是符号。符号函数(一般用sign(x)表示)是很有用的一类函数,能够帮助我们在几何画板中实现一些直接实现有困难的构造。 符号函数 能够把函数的符号析离出来 。如下图, 在数学和计算机运算中,其...
  • 感知机学习策略2.1 数据集的线性可分2.2 感知机学习策略3: 感知机学习算法3.1 感知机学习算法的原始形式3.2 算法的收敛性3.3 感知机python实现3.4 感知机学习算法的对偶形式4:参考文献感知机:输入实例的特征...
  • 背景 由于隐马尔可夫模型实现的基于序列标注的中文分词器,效果不理想。 隐马尔可夫模型将语言取决与一个 {B,M,...基于线性模型推导的训练算法就是感知机算法(感知机序列标注是基于分类的)。 一、 分类问题 ...
  • 感知机原理 感知机是二分类的线性模型,其输入是实例的特征向量,输出的是事例的类别,分别是+1和-1,属于判别模型。 假设训练数据集是线性可分的,感知机学习的目标是求得一个能够将训练数据集 正实例点和负实例...
  • 感知机(perceptron) 是二类分类的线性分类模型,其输入实例的特征向量,输出实例的类别,取+1 和一1 二值。 感知机对应于输入空间(特征空间)中将实例划分正负两类的分离超平面,属于判别模型。感知机学习旨在...
  • 六、多层感知机 多层感知机使用隐藏层和激活函数来得到非线性模型 先进性蓝色线,再进行橙色线,对于两者结果相同正,不同负解决XOR问题 单分类最终输出结果是一个标量 σ是一个非线性函数,因为是线性函数的话...
  • 感知机

    2021-03-29 12:46:07
    感知机特点:(1)二类分类线性模型。 (2)输入实例的特征向量,输出实例的类别。...其中,w和b是感知机模型参数,w属于R”作权值或权值向量,b属于R作偏置,wx表示w和x的内积。sign是符号函数。
  • 机器学习:感知机算法(PLA)

    千次阅读 2021-11-07 09:37:40
    感知机对应于输入空间中将实例划分正负两类的分离超平面,属于判别模型; 感知机学习旨在求出将训练数据进行现行划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得...
  • 本博客介绍了感知机和多层感知机,模型选择,过拟合和欠拟合。参考书籍:《动手学深度学习V2》
  • 为什么神经网络能够工作,怎么样理解神经网络可以工作? 往往会得到这些答案: 神经网络很难解释为什么能够工作。 不用管他为什么能够工作,只要知道怎么用就好了。 到现在为止,还不能很好地解释神经网络...
  • 文章目录原始形式回顾感知机的对偶形式总结 本课程来自深度之眼,部分截图来自课程视频以及李航老师的《统计学习方法》第二版。 公式输入请参考:在线Latex公式 原始形式回顾 输入:训练数据集T={(x1,y1),(x2,y2),⋯...
  • 文章目录多层感知机从线性到非线性激活函数ReLU函数sigmoid函数tanh函数模型选择、欠拟合和过拟合训练误差和泛化误差统计学习理论模型复杂性模型选择验证集KKK折交叉验证权重衰减范数与权重衰减Dropout正向传播、...
  • 作者|Harper审核|gongyouliu编辑|auroral-L感知机的兴衰本期内容仍然来自这本《认识AI,人工智能如何赋能商业》,这本书是我们数据与智能创始人刘强翻译的。...
  • 第二章 感知机

    2021-10-26 14:44:23
    感知机(perceptron)是二类分类的线性分类模型,其输入实例的特征向量,输出实例的类别,取 +1+1+1 和−1-1−1二值。感知机对应于输入空间(特征空间)中将实例划分正负两类的分离超平面,属于判别模型。感知...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 33,405
精华内容 13,362
关键字:

为什么叫感知机