单层感知器(附demo)

一 引言

      感知器神经网络是一种典型的前馈神经网络,具有分层结果,信息丛输入层进入网络,逐层向前传递至输出层。根据感知器神经元转移函数、隐层数以及权值调整规则的不同,可以形成具有各种功能特点的神经网络

二 定义与理解

    单层感知器:1958年,美国心理学家Frank Rosenblatt 提出一种具有单层计算单元的神经网络,成为Perceptron,即感知器。

    单层感知器的结构和功能非常简单,以至于目前在解决实际问题时很少被采用,但由于它是神经网络的基础,适合作为神经网络学习的起点。

三  感知器模型

      单层感知器:只有一层处理单元的感知器,如果包括输入层在内,应为两层。

      结构图如下图一:图中输入层也称为感知层,有n个神经元节点,这些节点只负责引入外部信息,自身没有信息处理能力。每个节点接收一个输入信号,n个输入信号构成输入列向量X。

        输出层也称为处理层,有m个神经元节点,每个节点均具有信息处理能力,m个节点向外部输出处理信息,构成输出列向量O。两层之间的连接权值用权值列向量Wj表示,m个权向量构成单层感知器权值矩阵W。

单层感知器(附demo)_第1张图片

三种列向量分别表示为图二:

单层感知器(附demo)_第2张图片

 

X :输入列向量, O输出列向量, W 权列向量

离散型单计算层感知器的转移函数一般采用符号函数(或单极性阀值函数)。公式如下

单层感知器(附demo)_第3张图片

感知器的输出,计算公式为:

 

四 感知器给鸳尾花数据分类

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

 

 

 

 

 

你可能感兴趣的:(机器学习)