精华内容
下载资源
问答
  • 2021-10-22 14:35:31

    一.感知机的概念

    感知机可以说是最古老的分类方法之一了,在1957年就已经提出。他的思考方法就是在平面画出一条直线,或者在空间画出一个平面,或者可以推广到更高维的向量空间画一个超平面,将两种不同的东西分开。感知机模型虽然古老、简单、基础,但是原理很重要,下一步再学习支持向量机,学习神经网络,深度学习。

    二.感知机模型

    感知机是一个二分类的线性模型,这个模型的输入是向量,输出是1或0(也可以理解为True或False),每一个向量有多个维度,将每一个维度都数值化,用xi来表示向量的一个维度。
    在这里插入图片描述

    这个模型进行二分的逻辑是这样的
    为每一个维度设置相应的权重概念,代表重要程度,用w表示。
    设置一个门限值threshold,作为分界线。
    求每一个向量的各维度的加权和w1 x1+w2 x2 +…+ wn xn
    如果Σwi xi >= threshold,则输出1
    如果Σwi xi < threshold,则输出0
    则得到感知机函数
    h = sign(Σwi xi - threshold)
    用x代表向量,w代表权重组成的向量,w x代表两个向量的内积
    感知机函数简写为
    h = sign(wx+ b)

    sign(x)是一个取符号的函数,x>=0时,函数值为1,反之为-1。

    三.感知机策略

    模型确定了,下面就要求接触模型中的未知数。未知数包括有w1,w2,w3…wn,b。
    例如可以用双输入的感知机做一个与门,w=[0.5,0.5],b=-1。这个例子中决定参数的是人,这样做并没有什么可感觉厉害的。所以我们要设计学习算法,使计算机能够自动的调整权重与偏移。
    感知机是一个有监督的学习算法,所以需要训练集(大量的向量数据以及正确标签)为了求得一个合适的超平面将数据分成两类,需要先确定一个计算损失的函数来表示超平面的靠谱程度,并尽量损失函数取最小值。
    感知机选择的损失函数:是用误分类点到超平面S的总距离来表示。
    在这里插入图片描述空间中任意一个向量x到超平面的距离公式是:
    点到平面的距离
    其中||w||是向量2-范数
    在这里插入图片描述 如果这个函数不好理解,可以对比二维坐标下的点到直线距离公式

    最后,使用梯度下降法求能够使损失函数最小的解(w1,w2,…,b)。

    四.感知机的局限

    1.只能处理线性可分的问题。
    2.需要人工选择特定的特征作为输入。

    更多相关内容
  • 机器学习感知机

    2018-01-17 10:28:53
    主要是机器学习感知机的MATLAB代码,里面带有相关数据
  • 一、感知机(perceptron)的学习: 1. 什么是感知机:是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别,取+1和-1; 2. 模型类型:感知机将对应的输入空间(特征空间)中将实例划分为正负两类的分离...
  • 机器学习感知机算法(PLA)

    千次阅读 2021-11-07 09:37:40
    感知机学习旨在求出将训练数据进行现行划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。 感知机学习算法具有简单而易于实现的优点,分为原始形式和对偶...

    1,概述

    1.1,定义

    感知机(Perceptron):

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

    感知机的缺点:我们在不知道数据的情况下(是否线性可分)PLA就不会停下来,这个时候我们会使用Pocket演算法来找到一根不错的直线。Pocket演算法的基本思想就是找到一根犯错误更小的直线。实务上我们一般会执行到一定的时间或者一定的步数就会停下来。结果是它是一条不错的线,但是可能不是一个最优解。

    1.2,感知机模型

    假设输入空间(特征空间)是 X\subseteq R^n ,输出空间是 y=\left \{ +1,-1 \right \} 。输入 x\in X 表示实例的特征向量,对应输入空间(特征空间)的点,输出 y\in Y 表示实例的类别。由输入空间到输出空间的函数:

    感知机: f(x)=sign(w*x+b)

    w,b 为模型参数,w\in R^n 叫做权值或权值向量,b\in R 叫作偏执。

    符号函数: sign(x)=\begin{Bmatrix} +1,x\geqslant 0\\-1,x< 0 \end{Bmatrix}

    1.3,几何解释

    感知机可以理解为几何中的线性方程:w*x+b=0 对应于特征空间 R^n 中的一个超平面 S ,其中 w 是超平面法向量,b 是超平面的截距。这个超平面将特征空间划分为两个部分。位于两部分的点(特征向量)分别被分为正、负两类。

    2,学习策略

    2.1,损失函数

    假设训练集是线性可分的,感知机学习的目标是求得一个能够将训练集正实例点和负实例点完全正确分开的分离超平面。为了找出这样的超平面,即确定感知机模型参数 w,b ,需要确定一个学习策略,即定义(经验)损失函数并将损失函数极小化。

    损失函数的一个自然选择是误分类点的总数。但是,这样的损失函数不是参数 w,b 的连续可导函数,不易优化。损失函数的另外一个选择是误分类点到超平面 S 的总距离,这是感知机所采用的。为此,首先定义输入空间 R^n 中任一点 x_0 到超平面 S 的距离:

    \frac{|w^T*x_0+b|}{||w||}

    其次,对于误分类的数据 (x_i,y_i) 来说:

    y_i(w^T*x_i+b)<0

    因为:y_i(w^T*x_i+b)>0,\begin{Bmatrix} y_i=+1,w^T*x+b>0\\ y_i=-1,w^T*x+b<0 \end{Bmatrix}

    因此,误分类点到平面 S 的距离:

    -\frac{y_i(w^T*x_i+b)}{||w||}

    这样,假设超平面 S 的误分类点集合为 M ,那么所有误分类点到超平面 S 的总距离为:

    -\frac{1}{||w||}\sum_{x_i\in M}^{}y_i(w^T*x_i+b)

    不考虑 \frac{1}{||w||},就得到感知机学习的损失函数:

    L(w,b)=-\sum_{x_i\in M}^{}y_i(w^T*x_i+b)

    原因:

    • \frac{1}{||w||} 不影响  y_i(w^T*x_i+b) 正负的判断,即不影响学习算法的中间过程。因为感知机学习算法是误分类驱动的,这里需要注意的是所谓的“误分类驱动”指的是我们只需要判断 y_i(w^T*x_i+b) 的正负来判断分类的正确与否,而 \frac{1}{||w||} 并不影响正负值的判断。所以 \frac{1}{||w||}对感知机学习算法的中间过程可以不考虑。
    • \frac{1}{||w||} 不影响感知机学习算法的最终结果。因为感知机学习算法最终的终止条件是所有的输入都被正确分类,即不存在误分类的点。则此时损失函数为0 对应于-\frac{1}{||w||}\sum_{x_i\in M}^{}y_i(w^T*x_i+b),即分子为0.则可以看出 \frac{1}{||w||} 对最终结果也无影响。
    • 总结:PLA的任务是进行二分类工作,它最终并不关心得到的超平面离各点的距离有多少,关心误分类点的数量,而SVM则关心距离。

    由于 y_i(w^T*x_i+b)<0 所以 L(w,b) 是非负的。如果没有误分类点,损失函数值为0。而且由于误分类点越少,误分类点里超平面越近,损失函数值就越小(求和数目减少)。一个特定的样本点的损失函数:在误分类时是参数 w,b 的线性函数,在正确分类时是0。因此,给定训练数据集 T ,损失函数 L(w,b) 是 w,b 的连续可导函数。

    因此感知学习的策略是在假设空间中选取使损失函数 L(w,b) 最小的模型参数 w,b即感知机损失函数目标:

    \underset{min}{L(w,b)}=min(-\sum_{x_i\in M}^{}y_i(w^T*x_i+b))

    2.2,优化函数

    首先,任意选取一个超平面 w_0, b_0,然后用梯度下降法不断极小化目标函数 \underset{min}{L(w,b)}。极小化的过程不是一次使 M 中所有误分类点的梯度下降,而是一次又一次随机选取一个误分类点使其梯度下降。

    假设误分类点集合 M 是固定的,那么损失函数 L(w,b) 的梯度:

    \Delta_wL(w,b) = -\sum_{x_i\in M}y_ix_i

    \Delta_bL(w,b) = -\sum_{x_i\in M}y_i

    随机采取一个误分类点 (x_n(t),y_n(t)) ,对 w,b 进行更新:

    w_{t+1}=w_{t}+y_n(t)x_n(t)

    采用这种方法的原因:简单。但不限于这一种方法。

    修正:

    整体修正过程:

    3,收敛性

    3.1,向量持续修正

    每次修改后的 w 向量逐渐趋向于最终的完美的 w_f(向量的乘积不断变大):

    更新:w_{t+1}=w_{t}+y_n(t)x_n(t)

    缩放:y_{n(t)}w_f^Tx_{n(t)}\geqslant \underset{n}{min}y_nw_f^Tx_n

    线性可分:存在 w_f 使得,y_n=sgn(w_f^Tx_n)

    完美的 w_f 下不会分类错误:\underset{n}{min}\left ( y_nw_f^Tx_n \right )> 0 

    w_f^Tw_{t+1}=w_f^T(w_t+y_{n(t)}x_{n(t)})

    \geqslant w_f^Tw_t+\underset{n}{min}y_nw_f^Tx_n

    >w_f^Tw_t+0 =w_f^Tw_t

    确实发现它们的内积在不断地增大,内积的增大原因有向量的模长在增大或者是夹角在变小。但是证明两个向量的相关性增大需要证明的是两个向量的夹角在变小,所以需要排除向量模长的不确定性。

    3.2,修正幅度上限

    在这个推导中,更加关心的是 w 与 w_f(最终的 w )之间的角度,观察分类错误的点:

    ||w_{t+1}||^2 = ||w_t+y_{n(t)}x_{n(t)}||^2

    =||w_t||^2+2y_{n(t)}w_t^Tx_{n(t)}+||y_{n(t)}x_{n(t)}||^2

    \leqslant ||w_t||^2+0+||y_{n(t)}x_{n(t)}||^2

    \leqslant ||w_t||^2+\underset{n}{max}||y_nx_n||^2

    即:

    ||w_t+1||^2 \leqslant ||w_t||^2+\underset{n}{max}||y_nx_n||^2

    ||w_{t+1}||^2 - ||w_{t}||^2 \leqslant\underset{n}{max}||y_nx_n||^2

    修正之后权向量的长度,相较于修正之前的增加有一个上限,或者说它的长度增长是较慢的。这个上限由 S 中距离坐标原点最远的那个点决定,所以 w_t 和 w_{t+1} 差别不会太大,所以现在还不能证明夹角在变小。

    3.3,优化证明

    用 w_f 与 w_t 的模向量直接相乘(乘出来的结果即为两个向量的角度)

    即:cos\theta =\displaystyle \frac{w_f^T}{||w_f||}\frac{w_t}{||w_t||} 的值的变化

    过程如下:

    由前面可知,w 更新:w_{t+1}=w_{t}+y_{n(t)}x_{n(t)}

    w_f^Tw_t=w_f^T(w_{t-1}+y_{n(t-1)}x_{n(t-1)})

    \geqslant w_f^Tw_{t-1}+\underset{n}{min}\, y_nw_f^Tx_n

    \geqslant w_f^Tw_0+T*\underset{n}{min}\, y_nw_f^Tx_n

    \geqslant T*\underset{n}{min}\, y_nw_f^Tx_n

    即:w_f^Tw_t \geqslant T*\underset{n}{min}\, y_nw_f^Tx_n

    -----------------------------------------------------------------------------------

    ||w_t||^2=||w_{t-1}+y_{n(t-1)}x_{n(t-1)}||^2

    =||w_{t-1}||^2+2y_{n(t-1)}w_{t-1}^Tx_{n(t-1)}+||y_{n(t-1)}x_{n(t-1)}||^2

    \leqslant ||w_{t-1}||^2+0+||y_{n(t-1)}x_{n(t-1)}||^2

    \leqslant ||w_{t-1}||^2+\underset{n}{max}||x_{n}||^2

    \leqslant ||w_{0}||^2+T*\underset{n}{max}||x_{n}||^2

    =T*\underset{n}{max}||x_{n}||^2

    即:||w_t||\leqslant \sqrt{T}*\underset{n}{max}||x_n||

    -----------------------------------------------------------------------------------

    1\geqslant cos\theta =\displaystyle \frac{w_f^T}{||w_f^T||}\frac{w_t}{||w_t||}\geqslant \frac{T*\underset{n}{min}\, y_nw_f^Tx_n}{||w_f^T||||w_t||}

    \geqslant \frac{T*\underset{n}{min}\, y_nw_f^Tx_n}{||w_f^T||*\sqrt{T}*\underset{n}{max}||x_n||} = \frac{\sqrt{T}*\underset{n}{min}\, y_nw_f^Tx_n}{||w_f^T||*\underset{n}{max}||x_n||}=\sqrt{T}*constant

    即:随着 T 的增加,\sqrt{T} 不断增大,cos\theta 的下限不断增加,在 \left [ -\pi, \pi\right ] 区间(向量夹角不可能大于180),\theta 角度上限不断减小,总体来看角度变小(机器学习不确定因素大,没法保证每一步都比上一步角度小,参考上面2.2节图)。

    3.4,修正次数上限

    即:\frac{w_f^T}{||w_f^T||}\frac{w_t}{||w_t||}\geqslant \frac{\sqrt{T}*\underset{n}{min}\, y_nw_f^Tx_n}{||w_f^T||*\underset{n}{max}||x_n||}=\sqrt{T}*constant

    因为  \frac{w_f^T}{||w_f^T||}\frac{w_t}{||w_t||} \leqslant 1,可得:

    \frac{\sqrt{T}*\underset{n}{min}\, y_nw_f^Tx_n}{||w_f^T||*\underset{n}{max}||x_n||}\leqslant 1

    即:T\leqslant \frac{\underset{n}{max}||x_n||^2*||w_f^T||^2}{\underset{n}{min}^2\, y_nw_f^Tx_n}=\frac{R^2}{\rho ^2}

    3.4,线性不可分(Pocket PLA)

    如果数据集是线性不可分的,那么对PLA进行改进,类似贪心算法:在pocket中保留一条当前最好的线,如果改进后的线更好(错分的样本数少),则更新最好的线,这样的缺点是需要遍历完空间内所有点的才能得到最好的结果。

    对 n 个样本进行遍历,遇到错误就更新 w_t 为临时变量 w_{t+1} 。如果 w_{t+1} 的错误个数比 w_t的错误个数少的话,就更新 w_t 为 w_{t+1},否则不进行更新。

    展开全文
  • 机器学习感知机模型

    千次阅读 2020-07-22 21:37:13
    机器学习感知机模型写在前面感知机模型的初步理解自我理解 写在前面 这部分主要是基于李航老师的《统计学习方法》以及参考部分博客完成,写出来让自己更好理解。 感知机模型的初步理解 感知机模型应该是机器学习中...

    写在前面

    这部分主要是基于李航老师的《统计学习方法》以及参考部分博客完成,写出来让自己更好理解。

    感知机模型的初步理解

    感知机模型应该是机器学习中最简单的模型,是一种二分类的线性分类模型。感知机学习旨在求出将训练数据进行线性划分的超平面。

    自我理解

    以苹果为例子,现在我们面前有一堆苹果要卖,我们需要将苹果分成两部分,一部分又大又好看的,卖的贵一点,一部分又小又不好看的分为另一部分,卖的便宜点。对于我们来说,我们需要将两个,尽可能的分开,因为如果不好看的掺杂在好看的苹果中,影响口碑。好看的掺杂在不好看的中间,会影响收入。那么,我们现在根据苹果的颜色和体积,得到一个数据集如下:
    在这里插入图片描述
    上面的数据咱们一眼就看出来,中间有个很明显的分界,有人会问,如果两边的数据集有交叉呢?那就是线性不可分的数据集,不在我们研究的范围内。感知机模型研究的是求得一个能够将训练集正实例点负实例点 完全正确分开的分离超平面。
    好,继续回到分苹果。我们得到数据集之后,可以很明显在中间将数据分为两部分,但是如果这个操作让计算机来,他怎么确认哪一个是我们需要的直线?或者说计算机通过什么标准,来确定划分直线的优劣。比如,我们现在得到如下图的三条分割线:在这里插入图片描述
    从直观上,我们能看出A和B将数据集完全的分开了,C分割后还存在误分类点。现在如果新来了一批苹果,将新来的数据放入这个图中,哪个直线能更好的将数据分开?对于感知机模型来说,它是没办法找到一个最优直线的,它的要求是,只要这条直线可以将数据集完全正确的分为两部分,就是一条好的直线。也就是A和B对于感知机模型来说,都是一个好的直线。
    对于计算机来说,我们需要将这个评判过程进行量化,也就是,给个标准,告诉计算机,什么时候这个直线足够好了。那么根据感知机模型的定义,将数据集完全正确分类,也就是不存在误分类点,那么,我们很容易想到,我们将一条直线划分数据集后,误分类的点数作为评判标准。误分类点越多,这条直线越差,误分类点为0,就是一条好直线。

    感知机模型建立

    模型: 既然我们打算量化误分类点,那么首先,我们需要对于该点是否正确分类有一个定义。我们定义如下函数:
    在这里插入图片描述
    在这里插入图片描述
    在这个函数中,wx + b = 0 为对应特征空间中的一个超平面,将数据集完全隔离开来。sign(x)是一个符号函数。我们知道,在一个二维平面上,wx + b = 0 表示该平面上的一条直线,那么,数据就分布在直线的两侧。符号函数的作用,就是判断,对应数据点,位于直线的哪侧。

    思想: 模型建立完成之后,那么我们需要确定一个思想,也就是我们通过什么方法,去找到最后的结果。根据我们上面的描述,我们需要找到一条直线,将数据完全分离开来。假设我们现在随机初始化一条直线C(如上面的图),我们会发现,这条直线,有误分类的情况。那么我们需要调整直线的斜率和截距,最终将误分类点的数目降到零。这条直线就是我们想得到的直线(如A和B)。那么我们的整体思想就是,将误分类点的数目降到零。也就是错误驱动

    策略: 明确了建立感知机模型的思想,我们需要针对以上的描述,建立感知机学习策略。
    (1)数据集的线性可分性
    这是感知机模型建立的最基础条件,书中定义如下:
    在这里插入图片描述
    说的简单点,就是在特征空间中,这些数据必须能被一个超平面完整的分隔开。否则这个数据集就是线性不可分的。
    (2)感知机的学习策略:
    我们前面随机生成了直线C,然后将直线C进行调整,得到最后的直线。但是直线C应该怎么调整呢?根据上述的思想,我们定义损失函数如下:
    在这里插入图片描述
    这是按照我们的思想,建立的损失函数,其中L(w)表示误分类点的个数。接下来,我们对这个函数,进行处理,求得L(w)的最小值。我们常用的方法,就是对这个函数求导,但是我们会发现以下的问题:
    在这里插入图片描述
    那么,我们需要转变思路,不能单纯的用误分类点的个数作为损失函数。在书中,感知机模型选择了另一种思路,也就是误分类点到超平面的总距离。首先,我们写出输入空间任一点x0到超平面的距离为:
    在这里插入图片描述
    接下来,我们针对误分类点进行分析。
    在这里插入图片描述
    这一步的主要目的,是针对误分类点的特性,将原式中的绝对值符号去除。感知机模型的最终目的是没有误分类点。也就是L(w) = 0。那么为了简化运算,我们对最终结果没有影响的||w||去除,也就得到了感知机的损失函数:
    在这里插入图片描述
    那么,这个损失函数是否可导呢?当直线在进行调整时,每个点对于直线的距离是线性函数,最小值为。在我们的定义中,误分类点与直线间的距离为正值。所以,损失函数L(w,b)是w和b的连续可导函数。

    算法: 针对损失函数,我们采用常用的随机梯度下降法(SGD),来求得最终的极值。
    首先任意选取一个超平面,然后利用梯度下降不断地极小化目标函数(2.5)。最理想地状态,我们使所有的误分类点的梯度下降,但是一口吃不成胖子。感知机模型中是定义随机选取一个误分类点使其梯度下降。
    在这里插入图片描述
    在这里插入图片描述

    对偶形式

    通过上述的梳理,针对感知机模型的形式有了一定的了解。但是存在一个问题。每一次的感知模型的循环,我们都需要针对w和xi进行内积运算,针对小批量的数据,现在的计算机的计算能力并没有很吃力。但是如果特征空间维度很高时,则感知机模型的算法会很慢。于是,感知机模型的对偶形式被提出了。
    算法:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    那么为什么对偶形式可以提高运算速度呢?
    首先对于原始形式来说,每一次的参数改变,所有的矩阵计算全部需要重新计算。但是对偶形式的存在,将参数展开成样本之间的点乘形式。这样,随着更新迭代,样本之间的内积不会改变,我们就可以提前将Gram矩阵算出,在程序中,如果用到就直接查找就好,提高了运算速度。

    展开全文
  • 机器学习感知机

    千次阅读 2019-04-27 16:56:08
    # 多层感知机 from sklearn.datasets import make_moons from sklearn.neural_network import MLPClassifier import numpy as np import matplotlib.pyplot as plt # 生成数据 x, y = make_moons(n_samples=800, ...

    感知机是二分类的线性分类模型,其输入是样本的特征向量,输出是样本的类别。感知机对应于输入空间中将样本划分为两个类别,属于判别模型。感知机学习旨在求出将训练数据进行线性划分的分离超平面,为此,导入基于误分类的损失函数,利用梯度下降法对损失函数进行极小化,求得感知机模型。
    1、感知机模型
    假设输入空间是 X ⊆ R n X\subseteq \mathbb{R}^{n} XRn,输出空间是 Y = { + 1 , − 1 } Y=\left \{ +1,-1 \right \} Y={+1,1}。输入 x ∈ X x\in X xX表示样本的特征向量,对应于输入空间的点,输出 y ∈ Y y\in Y yY表示样本的类别。由输入空间到输出空间的函数如下:

    称为感知机,其中权值 ω \omega ω和偏置b是感知机模型的参数。
    感知机是一种线性分类模型,属于判别模型,感知机的假设空间定义在特征空间中所有线性分类模型。
    2、多层感知机及其BP算法
    Deep Learning 近年来在各个领域都取得了 state-of-the-art 的效果,对于原始未加工且单独不可解释的特征尤为有效,传统的方法依赖手工选取特征,而 神经网络可以进行学习,通过层次结构学习到更利于任务的特征。得益于近年来互联网充足的数据,计算机硬件的发展以及大规模并行化的普及。本文主要简单介绍 MLP ,也即为Full-connection Neural Network ,网络结构如下,分为输入,隐层与输出层,除了输入层外,其余的每层激活函数均采用 sigmod ,MLP 容易受到局部极小值与梯度弥散的困扰,如下图所示:
    在这里插入图片描述
    MLP 的 BP 算法基于经典的链式求导法则,首先看前向传导,对于输入层有 I I I 个单元, 对于输入样本 (x,z) ,隐层的输入为:


    这里函数f为 非线性激活函数,常见的有sigmod 或者是 tanh,本文选取 sigmod 作为激活函数。计算完输入层向第一个隐层的传导后,剩下的隐层计算方式类似,用 h l h_{l} hl 表示第 l l l层的单元数:


    对于输出层,若采用二分类即 logistic regression ,则前向传导到输出层:


    这里 y 即为 MLP 的输出类别为 1 的概率,输出类别为 0 的概率为 1−y,为了训练网络,当 z=1 时,y 越大越好,而当 z=0 时, 1−y越大越好 ,这样才能得到最优的参数 w ,采用 MLE 的方法,写到一起可以得到 y z ( 1 − y ) 1 − z y^{z}(1-y)^{1-z} yz(1y)1z ,这便是单个样本的似然函数,对于所有样本可以列出 log 似然函数 O = ∑ x , z z l o g y + ( 1 − z ) l o g ( 1 − y ) O=∑_{x,z}zlogy+(1−z)log(1−y) O=x,zzlogy+(1z)log(1y) ,直接极大化该似然函数即可,等价于极小化以下的 −log 损失函数:

    对于多分类问题,即输出层采用softmax,假设有K个类别,则输出层的第k个单元计算过程如下:


    则得到类别 k 的概率可以写为$$ ,注意标签z中只有第k维为 1,其余为 0,所以现在只需极大化该似然函数即可:

    同理等价于极小化以下损失:

    以上便是softmax的损失函数,这里需要注意的是以上优化目标O均没带正则项,而且 logistic 与 softmax 最后得到的损失函数均可以称作交叉熵损失,注意和平方损失的区别。
    反向传播过程
    有了以上前向传导的过程,接下来看误差的反向传递,对于sigmod来说,最后一层的计算如下: α = ∑ h ω h ⋅ b h , y = f ( α ) = σ ( α ) \alpha=\sum_{h}\omega_{h}\cdot b_{h},y=f(\alpha)=\sigma (\alpha) α=hωhbh,y=f(α)=σ(α)这里 b h b_{h} bh 为倒数第二层单元h的输出,σ为sigmod激活函数,且满足 σ′(a)=σ(a)(1−σ(a)),对于单个样本的损失 :

    可得到如下的链式求导过程:

    显而易见对于后半部分 ∂ α ∂ ω h \frac{\partial \alpha}{\partial\omega _{h}} ωhα b h b_{h} bh,对于前半部分 ∂ O ∂ α \frac{\partial O}{\partial \alpha} αO
    在这里插入图片描述
    以上,便得到了logistic的残差,接下来残差反向传递即可,残差传递形式同softmax,所以先推导softmax的残差项,对于单个样本,softmax的log损失函数为:

    其中:

    根据以上分析,可得到 y k ′ y_{k^{&#x27;}} yk关于 α k \alpha_{k} αk的导数:
    在这里插入图片描述
    现在能得到损失函数O对于 α k \alpha_{k} αk的导数:
    在这里插入图片描述
    这里有 ∑ i z i = 1 \sum_{i}z_{i}=1 izi=1,即只有一个类别,到这一步,softmax和sigmod的残差均计算完成,可用 σ \sigma σ来表示,对于单元j,其形式如下:

    这里可以得到softmax层向倒数第二层的残差反向传递公式:
    在这里插入图片描述
    其中 a k = ∑ h w h k b h a_{k}=\sum_{h}w_{hk}b_{h} ak=hwhkbh ,对于sigmod层,向倒数第二层的反向传递公式为:
    在这里插入图片描述
    以上公式的 δ 代表sigmod层唯一的残差,接下来就是残差从隐层向前传递的传递过程,一直传递到首个隐藏层即第二层(注意,残差不会传到输入层,因为不需要,对输入层到第二层的参数求导,其只依赖于第二层的残差,因为第二层是这些参数的放射函数):
    在这里插入图片描述
    整个过程可以看下图:
    在这里插入图片描述
    最终得到关于权值的计算公式:

    至此完成了backwark pass 的过程,注意由于计算比较复杂,有必要进行梯度验证。对函数O关于参数 ω i j \omega_{ij} ωij 进行数值求导即可,求导之后与与上边的公式验证差异,小于给定的阈值即认为我们的运算是正确的。

    # 多层感知机
    from sklearn.datasets import make_moons
    from sklearn.neural_network import MLPClassifier
    import numpy as np
    import matplotlib.pyplot as plt
    
    # 生成数据
    x, y = make_moons(n_samples=800, noise=0.15, random_state=42)
    
    # 多层感知机模型
    mlp = MLPClassifier(hidden_layer_sizes=(100, 100)).fit(x, y)
    
    # 可视化分类边界
    x_min, x_max = x[:, 0].min() - 1, x[:, 0].max() + 1
    y_min, y_max = x[:, 1].min() - 1, x[:, 1].max() + 1
    
    xx, yy = np.meshgrid(np.arange(x_min, x_max, 0.02), np.arange(y_min, y_max, 0.02))
    z = mlp.predict(np.c_[xx.ravel(), yy.ravel()])
    
    zz = z.reshape(xx.shape)
    
    plt.contourf(xx, yy, zz)
    plt.scatter(x[:, 0], x[:, 1], c=y)
    plt.show()
    

    在这里插入图片描述

    展开全文
  • 感知机于1957年由Rosenblatt提出,是神经网络与支持向量机的基础。感知机二类分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,取+1和-1二值,该模型属于判别模型,旨在求出将训练数据进行线性划分的...
  • 机器学习 --- 感知机

    千次阅读 2022-01-20 19:52:12
    第1关:感知机 - 西瓜好坏自动识别 本关任务:使用感知机算法建立一个模型,并根据感知机算法流程对模型进行训练,得到一个能够准确对西瓜好坏进行识别的模型。 #encoding=utf8 import numpy as np #构建感知机算法 ...
  • 机器学习感知机原理详解

    千次阅读 多人点赞 2019-01-13 11:24:48
      感知机(perceptron)是二分类的线性分类模型,属于监督学习算法。输入为实例的特征向量,输出为实例的类别(取+1和-1)。感知机旨在求出将输入空间中的实例划分为两类的分离超平面。为求得超平面,感知机导入了...
  • 机器学习(七):解读感知机模型

    千次阅读 2022-02-19 21:56:20
    神经网络算法属于机器学习领域中比较热门的内容,而谈到神经网络算法的历史,就不得不提到M-P神经元和基于其构建的感知机模型,虽然该算法有巨大的不足,但是对于我们深入理解复杂的神经网络也是很有帮助的,为此...
  • 感知机模型的对偶形式 点击链接可了解简单感知机模型推导过程及其实现python代码 [https://blog.csdn.net/weixin_52762273/article/details/124027702] 感知机模型的对偶形式也称累积形式,相对于之前的感知机多了一...
  • [机器学习]感知机内容体系

    千次阅读 2022-04-18 15:09:46
    机器学习感知机部分基本介绍。
  • 机器学习感知机(Perceptron)

    万次阅读 多人点赞 2019-02-01 16:59:05
    今天来学习下机器学习的敲门砖——感知机模型。网上查了很多中英文资料,得知感知机是在1957年由Frank Rosenblatt提出的,它被成为机器学习领域最为基础的模型。虽然是最为基础的,但是它在机器学习的领域中,有着...
  • 机器学习 —— 感知机简单入门

    千次阅读 2021-10-12 08:08:58
    机器学习 —— 感知机简单入门第1关:感知机 - 西瓜好坏自动识别1. 感知机原理简介1.1 举例1.2 数学原理/公式1.3 算法流程实现代码第2关:scikit-learn感知机实践 - 癌细胞精准识别1. 数据集介绍及使用2. 使用 ...
  • 机器学习理论学习:感知机

    千次阅读 2021-11-15 22:58:55
    文章目录机器学习理论学习:感知机一、感知机模型二、感知机的学习策略三、感知机学习算法3.1、感知机算法的原始形式3.2、感知机算法的对偶形式 机器学习理论学习:感知机 感知机 (Perceptron)是二分类的线性分类...
  • 机器学习也不然,入门机器学习的第一个程序就是感知机啦。感知机是二类线性分类模型,输出的值为{+1, -1}两种类型,感知机是利用超平面将两类分离,多个不同的感知机就可以组成一张神经元网络,再往上就是人工智能...
  • 机器学习感知机算法原理及python实现

    千次阅读 多人点赞 2020-09-12 01:17:10
    一、感知机的定义 感知机是二分类的线性分类模型,输入多个信号,输出一个信号(类别),属于... 假设训练数据是线性可分的,感知机学习目标是求得一个能够将数据集正实例点和负实例点完全正确分开的超平面。为找出
  • 感知机实战代码

    2018-11-05 17:24:57
    感知机线性可分下的实战代码,内含有丰富的注释以供学习
  • 机器学习算法之感知机算法

    千次阅读 2019-10-29 09:19:34
    感知机算法是一个比较古老的机器学习算法了,是Rosenblatt在1957年提出的,是神经网络和支持向量机的基础。感知机算法只能解决线性分类模型。 算法原理 1. 感知机算法的原始形式 感知机模型可以表示为:f(x)=sign...
  • 机器学习--感知机理论知识(一)

    千次阅读 2020-10-10 12:39:25
    今天我们一起来学习感知机方法的理论知识。 感知机(perceptron)是用于二分类的线性分类模型,它是神经网络与支持向量机的基础。它的输入是实例的特征向量,输出为实例的类别,用-1和1表示。感知机属于判别模型,它...
  • python实现感知机学习算法原理

    千次阅读 2022-03-31 16:39:34
    一、感知机(perceptron)的学习: 什么是感知机:是二分类的线性分类模型,输入为实例的特征向量,输出为实例的类别,取+1和-1; 模型类型:感知机将对应的输入空间(特征空间)中将实例划分为正负两类的分离超...
  • 感知机算法python实现

    2020-05-10 21:11:23
    感知机(perceptron)是线性分类的二分类模型,感知机算法使用Python实现含数据集,输出的是测试集的类别
  • 机器学习感知机python实现

    千次阅读 2017-09-04 14:01:40
    机器学习感知机python实现机器学习感知机python实现 一 理论基础损失函数 更新参数 二 python实现代码 结果 一. 理论基础1. 损失函数L(w,b)=−∑i=0myi(wxi+b)L(w,b) = -\sum_{i = 0}^{m}{y_i(w x_i + b)}2. ...
  • 机器学习实战——感知机

    千次阅读 2015-04-23 00:57:44
    感知机 ...感知机学习到一个线性划分的分离超平面,属于判别模型。感知机输入空间为RnR^n空间,nn是特征数目,输出空间y={+1,−1}y=\{+1,-1\}。感知机学习一个如下的符号函数: f(x)=sign(wx+b)f(x) =
  • 机器学习感知机(Perceptron)模型

    万次阅读 2018-01-11 10:47:25
    本文主要介绍机器学习领域最为基础的模型,感知机模型: 1、感知机模型介绍 2、感知机数学原理 3、算法及Python代码实现 4、小结 1、感知机模型介绍 定义(感知机) 假设输入空间(特征空间)是,输出空间...
  • 感知机学习主要是求出将训练数据能够进行线性划分的分离超平面,所以就有了基于误分类的损失函数,利用梯度下降法对损失函 数进行极小化,求得感知机模型 感知机学习算法具有简单而易于实现的优点,分为 原始形式和...
  • 机器学习笔记】——感知机(Perceptron)

    万次阅读 多人点赞 2019-06-24 21:19:14
    1 感知机(Perceptron)1.1 定义1.2 几何解释1.3 学习策略1.4 算法1.4.1 原始形式1.4.2 对偶形式2 算法实现2.1 实现原始形式算法2.2 实现对偶形式算法2.3 sklearn练习——自定义数据二分类2.4 对比练习——鸢尾花...
  • 感知机是这一种二类线性分类模型,其输入实例的特征向量,输出为实例的类别,取+1和-1二值。感知机模型和LR模型(https://blog.csdn.net/u014571489/article/details/83387681) 一样都是二分模型,但是目标函数...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 63,709
精华内容 25,483
关键字:

机器学习感知机