机器学习-感知机实现(1)

前提

这系列文章不是为了去研究那些数学公式怎么推导,而是为了能将机器学习的思想快速用代码实现。最主要是梳理一下自己的想法。

感知机

感知机,就是接受每个感知元(神经元)传输过来的数据,当数据到达某个阀值的时候就会产生对应的行为
如下图,对应每个感知元有一个对应的权重,当数据到达阀值u的时候就会执行对应的行为。

u = w0 + w1x1 + w2x2 +......wnxn

对应到垃圾邮件处理上,当u > 0时就是正常邮件。相反则为垃圾邮件
对于这样的模型就可以称之为简单的感知机。也就是一个神经网络的基本单位。

权重向量的更新
上面所提到的w1,w2等就是就是对应每个是否是垃圾邮件的衡量标准,而x1,x2...就是邮件中被监测的词组的数目
比如x1和x2相同的时候,w1和w2的绝对值较大的一方对结果,也就是u的影响更大。所以,我们也把w1,w2....称之为x1,x2..的权重值
向量即为权重向量

根据训练数据中的期待结果和预测结果不断的修改权重即可。那么具体到项目中应该怎么修改w呢

1. 随机为w1,w2,...wn设置一个值
2. 不断重复以下步骤
  * 输入训练数据,如果结果不正确就进行修改
  * 当所有的训练数据的结果都正确时就结束运算
思想很简单,那么[不正确就修改]这一句话,在简单的感知机中能够很简单的修改,那么在深度神经网络中的时候该怎么计算呢

梯度下降法
首先介绍一个定义[误差函数(即损失函数)]E,即输出结果和期待结果的差值
为了方便以后的计算这个定义又可以改为变化根据向量w的变化误差函数是否在朝着最小变化的方向递进
w和误差函数的关系如下图所示

曲线最下方的w的值即为一次计算所期望的值,如果仔细分析我们可以知道这种计算就是微分计算
而这种变化趋势就是微分计算的值

那么wi的变化过程即为

简单的理解就是当变化趋势为负时wi朝正直方向移动,反之亦然.但是当变化趋势很大的时候wi的变化就会很大,
而变化趋势很小的时候wi的变化就又会很小。这样的计算会让整个过程很难收敛,因此我们会设置一个比较小的正数参数
来参与计算。

在上面的表达之中p就是学习速率。一般会设置一个比1小的正数。但是如果太小的话同样会让计算量大大增加。
这种通过不断的微分修正权重的方法就是_梯度下降法_。如果想要知道更多关于梯度下降的细节可以参考我之前的[一篇文章]

然后就是误差函数的具体表达形式了。

简单感知机的误差函数
对于一个感知机,我们使用以下的公式来表达他的误差函数

E = max(0,-twx)

max(a,b)就是选取a,b中较大值的运算函数。t就是正确与否的标志
t = 1(正常邮件),t=-1(垃圾邮件)
这里有个细节就是垃圾邮件的判断是-1而不是0.
那么为什么要误差函数要采用max(0,-twx)形式呢。

考虑以下x1,x2的二次元方程。
对于算式wx(w0 + w1x1 + w2x2)的值。在直线wx=0上面的所有值毫无疑问就是0,而在直线上方的就是正值
在直线下方的就是负值。当t=1的所有点都在正值区域,而-1的点都在负值区域的时候训练就结束。
类似于下图。

这种就是学习还没有结束的情况,B和D的区分暂时处于一个错误的区域。

可以着重看一下A的情况 :
A是一个垃圾邮件,而现在的分类情况也是正确的,那么wx>0。也就是t=1。

所以我们可以看到-twx = -wx<0。因此E = max(0,-twx) = 0,误差函数的结果为0。

因此对于误差函数,当点x被正确分类成功的时候可以得到误差值0,相反则是|wx|。

那么|wx|到底代表着什么呢?简单的理解就是这个点和直线wx=0的距离。没记错的话这个距离计算应该是高中知识。

感知机算法的实现
根据上文介绍的权重的更新的函数

对于误差函数E = max(0,-twx),当误差不为0 的时候就返回-twx。我们来简单推算以下。

因此可以得到更新后的运算公式:

权重整体来表达的时候如下:

根据以上的推论我们可以得到一个感知机的伪代码如下:

* 为w1,w2....wn设置随机值
* 输入每一个训练数据
  * 输入的训练数据所得到的结果与期望值是否一致

    * 一致,进行下一组运算
    * 不一致,按照来进行运算
* 在上一组循环运算中w的值是否发生了改变
  * 被改变了,那么再重复一此上述的循环
  * 没有改变(所有的值都是期望值),训练结束

这个伪代码的我用python实现了。如果需要可以参考[这里]

阀值
_提示,这节对于这篇文章没有太多帮助,主要为了下一篇文章,多层感知机做铺垫_
对于每一个感知机都是一个激活阀值,当参数到达了该阀值的时候被能执行某个行为。那么如何确定这个阀值呢?

决定输出值的阀值又被称为激活参数。简单来说激活参数的表达式如下f(u)=u。
类似于垃圾邮件分类我们可以有如下表达式:

用图表示的时候如下:

换成我们上面使用的-1和1 的形式

以上,如果有疑问欢迎讨论。

时间: 2024-10-25 16:03:32

机器学习-感知机实现(1)的相关文章

[机器学习]感知机(Perceptron)算法的MATLAB实现

感知机是一种二类分类的线性分类模型,属于判别类型,它是神经网络和支持向量机的基础. 感知机的算法如图所示: 根据以上的算法,使用MATLAB对一组标签为"1"和"-1"的数据进行训练,得到的分类超平面. 数据为: %%perceptron clc clear %load the data 导入数据 data=load('testSet.txt'); %Sometimes you do not need too precise data % data=roundn(d

机器学习-感知机

摘要: 1.简介 2.模型 3.策略 4.算法 4.1原始问题 4.2对偶问题 内容: 1.简介 感知机是二分类的线性分类模型,输出为+1,-1.感知机对应输入空间的分离超平面,属于判别模型.感知机是神经网络与支持向量机的基础. 2.模型 或,其中 3.策略 4.算法 4.1原始问题 输入:线性可分数据集,学习率a(0<a<=1) (1)选择初值w0,b0=0 (2)在训练集中选择数据(xi,yi) (3)如果 则w:=w+ayixi,b:=b+ayi (4)循环执行(2)~(3)直到没有误分

机器学习--感知机算法原理、方法及代码实现

1.感知器算法原理 两类线性可分的模式类:,设判别函数为:. 对样本进行规范化处理,即类样本全部乘以(-1),则有: 感知器算法通过对已知类别的训练样本集的学习,寻找一个满足上式的权向量. 2.算法步骤 (1)选择N个分属于和类的模式样本构成训练样本集{ X1,  …, XN }构成增广向量形式,并进行规范化处理.任取权向量初始值W(1),开始迭代.迭代次数k=1. (2)用全部训练样本进行一轮迭代,计算WT(k)Xi 的值,并修正权向量.分两种情况,更新权向量的值: ?若   ,分类器对第 i

机器学习---用python实现感知机算法和口袋算法(Machine Learning PLA Pocket Algorithm Application)

之前在<机器学习---感知机(Machine Learning Perceptron)>一文中介绍了感知机算法的理论知识,现在让我们来实践一下. 有两个数据文件:data1和data2,分别用于PLA和Pocket Algorithm.可在以下地址下载: 先回顾一下感知机算法: 1,初始化w 2,找出一个分类错误点 3,修正错误,假设迭代次数为t次(t=1,2,...),那么修正公式为: 4,直至没有分类错误点,返回最终的w 接下来让我们安照算法步骤,一步一步进行. 首先导入需要用到的库,其中

我的机器学习/数据挖掘的书单

李航的<统计学习方法> 这本书开篇第一章写得特别好,各个模型的算法推导也比较全,基本涵盖了比较经典的判别模型和生成模型. <机器学习实战> 这本书代码和应用特别多,了解python用法和机器学习算法的代码实现非常方便. 项亮的<推荐系统实践> 这本书个人感觉偏理论一点,伪代码看着都实现不了,不过关于推荐系统的整个架构讲得挺清楚的,各种推荐引擎的算法设计,基于内容的,基于邻域,基于便签,基于地点和时间(context)等等,最后将这些推荐引擎融合,排序,过滤等等就构成了推

2019-1-10至2019-1-18

1.git git版本控制,设计思想 常规指令 2.linux Linux 不常用指令的学习,三剑客指令的学习 3.机器学习 感知机,朴素贝叶斯,knn,svm,adaboost 4.深度学习 RNN , LSTM ,GAN  正向传播 5.detection RCNN Fast-RCNN Faster-RCNN 6.ResNet 7.二叉树,链表等若干题目 8.MapReduce 9.BitMap 感悟: 你以为只败在了最后一步,却不知压死骆驼的最后一根稻草可以有多轻,轻如鸿毛 原文地址:ht

机器学习-李航-统计学习方法学习笔记之感知机(2)

在机器学习-李航-统计学习方法学习笔记之感知机(1)中我们已经知道感知机的建模和其几何意义.相关推导也做了明确的推导.有了数学建模.我们要对模型进行计算. 感知机学习的目的是求的是一个能将正实例和负实例完全分开的分离超平面.也就是去求感知机模型中的参数w和b.学习策略也就是求解途径就是定义个经验损失函数,并将损失函数极小化.我们这儿采用的学习策略是求所有误分类点到超平面S的总距离.假设超平面s的误分类点集合为M,那么所有误分类点到超平面S的总距离为 显然损失函数L(w,b)是非负的,如果没有误分

机器学习-深度学习之李航-统计学习方法学习笔记之感知机

感知机应该是机器学习里面最简单的模型了.读一遍文章也能理解作者想表达的意思.因为以前像梯度下降,多项式拟合,神经网络都在Andrew Ng的公开课上看过了.但是真正关于书中的公式却不怎么理解.一些简单的作者也没有推导.毕竟这是机器学习,不是微积分,或者线性代数,或者概率论.微积分,概率论,线性代数是 大学期间的基础课程.很多人应该都学过. 关于感知机的几何模型. 感知机有如下几何解释:线性方程: w•x+b=0 对应于特征空间Rn中的一个超平面S,其中w是超平面的法向量,b是超平面的截距. 我们

记一下机器学习笔记 多层感知机的反向传播算法

<神经网络与机器学习>第4章前半段笔记以及其他地方看到的东西的混杂-第2.3章的内容比较古老预算先跳过. 不得不说幸亏反向传播的部分是<神机>里边人话比较多的部分,看的时候没有消化不良. 多层感知机 书里前三章的模型的局限都很明显,对于非线性可分问题苦手,甚至简单的异或都弄不了.于是多层感知机(也就是传说中的神经网络)就被发明了出来对付这个问题. 多层感知机就是由一系列的感知机,或者说神经元组成,每个神经元都接受若干的输入(树突)并产生一个输出(轴突). 这些神经元被分成若干层,每