机器学习与神经网络(二):感知器的介绍和Python代码实现
来源:互联网 发布:nba本赛季数据 编辑:程序博客网 时间:2024/05/16 01:55
前言:本篇博文主要介绍感知器的相关知识,采用理论+代码实践的方式,进行感知器的学习。本文首先介绍感知器的模型,然后介绍感知器学习规则(Perceptron学习算法),最后通过Python代码实现单层感知器,从而给读者一个更加直观的认识。
1.单层感知器模型
单层感知器是一种具有单层计算单元的神经网络,他的结构和功能都非常的简单,以至于现在在实际问题中很少被采用,但是感知器(Perceptron)首次提出了自组织、自学习的思想,所以他在神经网络的学习中起着基础性的作用。
1.1感知器模型
下图是一个单层感知器的模型图,他包含多个输入节点X0-Xn,权值向量W0-Wn(注意,这里X0和W0代表的是偏置因子,一般X0=1,图中X0处应该是Xn),一个输出节点o,激活函数是sgn函数。(ps图片均来自网络)
根据上图,我们可以看出,神经元的输出为:
2.感知器的学习规则:
前面说过,感知器具有自学习,自适应的能力,那么他是怎么学习的呢,我们看下图
这里我们解释一下他的流程:
首先,我们输入训练样本X和初始化权重向量W,将其进行向量的点乘,然后将点乘求和的结果作用于激活函数sgn(),得到实际的输出O,现在我们根据实际输出O和期望输出d之间的差距error,来调整初始化的权重向量W。如此反复,直到W调整到合适的结果为止。
那么,我们接着来看一下,我们怎么根据实际输出和期望输出之间的差异进行权重向量W的调整呢?这就是所谓的Perceptron学习规则:
这里还是补充一点:公式中2.19a中的eta代表学习率,他表示每次调整的幅度,这是人为设置的一个参数,一般根据经验值或者通过实验得出。
3.感知器的Python代码实现
好了,我们已经知道了感知器的模型以及相关的学习规则,那么,我们就可以利用Python来实现他(代码基于Python2.7,Anaconda实现)
#! /usr/bin/env python#coding=utf-8import numpy as np#感知器分类的学习class Perceptron: ''' eta:学习率 n_iter:权重向量的训练次数 w_:权重向量 errors_:记录神经元判断出错的次数 ''' def __init__(self,eta=0.01,n_iter=10): self.eta=eta self.n_iter=n_iter def fit(self,X,y): ''' 输入训练数据X,训练神经元,X输入样本,y为样本分类 x=[[1,2],[4,5]] y=[-1,1] ''' #初始化权重向量,加1是因为W0 self.w_=np.zeros(1+X.shape[1]) #print(self.w_)#w_=[0,0,0] self.errors_=[] for i in range(self.n_iter): errors=0 ''' zip(X,y)=[[1,2,-1],[4,5,1]] ''' for xi,target in zip(X,y):#每次迭代使用一个样本去更新W #相当于update=$*(y-y'),这里使用预测的结果进行误差判断 update=self.eta*(target-self.predict(xi)) ''' xi是一个向量[1,2] update是一个数字 update*xi等价于 w1'=x1*update;w2'=x2*update ''' self.w_[1:]+=update*xi self.w_[0]+=update*1 #打印更新的W_ #print self.w_ #统计 判断的正确与否次数 errors+=int(update!=0) self.errors_.append(errors) def net_input(self,X): ''' z=w0*1+w1*x1+w2x2+...+wm*xm 其中x0=1(一般w0=0,x0=1) ''' return np.dot(X,self.w_[1:])+self.w_[0]*1 def predict(self,X):#相当于sign()函数 ''' y>=0--->1 y<0---->-1 ''' return np.where(self.net_input(X)>=0.0,1,-1)
- 机器学习与神经网络(二):感知器的介绍和Python代码实现
- 机器学习与神经网络(四):BP神经网络的介绍和Python代码实现
- 机器学习与神经网络(三):自适应线性神经元的介绍和Python代码实现
- 神经网络-感知器算法python代码实现
- 机器学习算法练习之(二):Python和Tensorflow分别实现简单的神经网络
- 人工神经网络的设计与实现(二) 感知机
- 机器学习基础(一)——人工神经网络与简单的感知器
- 深度学习笔记一:BP神经网络的介绍和Python代码实现(1)
- 深度学习笔记一:BP神经网络的介绍和Python代码实现(2)
- 神经网络与机器学习笔记——Rosenblatt感知器
- Python机器学习-感知机原理及代码实现
- 机器学习之 神经网络的实现(二)-->手写识别
- 机器学习中使用的神经网络第二讲笔记:神经网络的结构和感知机
- 神经网络读书笔记:《神经网络与机器学习/Simon Haykin》第一章:感知器
- 机器学习:神经网络、正则化、多分类问题与Python代码实现
- 人工神经网络(三)单层感知器代码实现
- 人工神经网络(三)单层感知器代码实现
- 机器学习——感知器算法及python实现
- VS下QT学习笔记-使用.qrc资源文件
- linux/Centos下查看和修改网卡Mac地址(ifconfig命令)
- 单链表反转的递归与非递归实现
- PDF文件添加页眉页脚需要如何去操作
- hdu 6162 离线树链剖分
- 机器学习与神经网络(二):感知器的介绍和Python代码实现
- OpenCV+ZBar实现条码识别(Windows32位和64位)
- ReactNative入门
- JavaScript Date 比较
- 机器学习入门——recall与precision的解释
- HDU 1867 A + B for you again 【KMP】
- 测试访问量
- hdu 6165 FFF at Valentine(强连通分量缩点+dfs)
- bzoj4977 -- 线段树模拟费用流