单层感知器(附demo)
一 引言
感知器神经网络是一种典型的前馈神经网络,具有分层结果,信息丛输入层进入网络,逐层向前传递至输出层。根据感知器神经元转移函数、隐层数以及权值调整规则的不同,可以形成具有各种功能特点的神经网络
二 定义与理解
单层感知器:1958年,美国心理学家Frank Rosenblatt 提出一种具有单层计算单元的神经网络,成为Perceptron,即感知器。
单层感知器的结构和功能非常简单,以至于目前在解决实际问题时很少被采用,但由于它是神经网络的基础,适合作为神经网络学习的起点。
三 感知器模型
单层感知器:只有一层处理单元的感知器,如果包括输入层在内,应为两层。
结构图如下图一:图中输入层也称为感知层,有n个神经元节点,这些节点只负责引入外部信息,自身没有信息处理能力。每个节点接收一个输入信号,n个输入信号构成输入列向量X。
输出层也称为处理层,有m个神经元节点,每个节点均具有信息处理能力,m个节点向外部输出处理信息,构成输出列向量O。两层之间的连接权值用权值列向量Wj表示,m个权向量构成单层感知器权值矩阵W。
三种列向量分别表示为图二:
X :输入列向量, O输出列向量, W 权列向量
离散型单计算层感知器的转移函数一般采用符号函数(或单极性阀值函数)。公式如下
感知器的输出,计算公式为:
四 感知器给鸳尾花数据分类
1 感知器的转移函数为符号函数,它适用于做离散型的分类问题,鸳尾花数据集是一个很出名的数据集,在R语言中也有这个数据包。这里我们引入的鸳尾花数据为,4种类型的花,每种花有4个属性。我们这里直取两种花,给两种花做分类。
2 程序如下:
1> 引入鸳尾花数据集:
from sklearn.datasets import load_iris
2> 只取两种花的数据,给引入的数据做处理:
dataset = load_iris()
X = np.array(dataset.data) #获取花的属性
Y = np.array(dataset.target) #获取花的种类
X = X[0 : 75, :] #只取两类花
Y = Y[: 75]
3> 把代表类型的值0替换为-1,这里为了配合单层感知器的**函数
array_index = np.where(Y == 0)
Y[array_index] = -1
4 >鸢尾花数据有4个属性,那么输入层有4个输入节点,因为每个输入的值要乘以权向量,所以输入节点变为5个,增加权向量项。
X1= np.ones(X.shape[0]) #神经网络对应的输入x[0]
X = np.insert(X, 0, values=X1.T, axis=1) #把1插入到属性数据的第0列
5> 计算每个节点的输出:
O = np.sign(np.dot(X, W.T))
W_C = lr * ((Y - O.T).dot(X))/int(X.shape[0])
W = W + W_C
五 原来是个ios程序开发,机器学习相关的东西,我选择了python,有其它语言的童鞋请见谅,这里提供下python对应demo的下载地址,如下:demo