**
一.感知机的原理
感知机是二分类的线性分类模型,其输入为实例的特征向量,输出为实例的类别,分
别取+1和−1二值。如果要处理的数据是线性可分的,则该模型能取得很好的效果,如
果数据不是线性可分的,则该模型不能取得很好的效果。以二维平面为例,如果要分
类 的点,能被一条直线分开,直线的一侧是正类,直线的另一侧是负类,则说明数据
是线性可分的。如果数据需要一个圆来分开则说明数据不是线性可分的。
二.感知机模型
感知机对应于输入空间(特征空间)中将实例划分为正负两类的分离超平面,属于判
别模型。以二维平面为例,假设平面中存在着′∘′′∘′和′×′′×′两种形状的点,感知机要做
的是就是找到一条直线,将两类点分割开,感知机只适合于线性可分的数据,所以它
是一个线性模型。
2.1 感知机形式
感知机就是为了确定一条直线WX+b,让直线的一侧为正类,直线的另一侧是负类。当WX+b运算大于0时为+1,WX+b运算小于0时为-1,为此引入了sign函数.
假设平面中存在着′∘′和′×′两种形状的点,感知机要做的是就是找到一条直线,将两类点分割开
*三.感知机算法
3.1 感知机原始算法
输入:训练数据集T=(x1,y1),(x2,y2),…,(xN,yN),yi∈{−1,+1},学习率η(0<η<1)
输出:w,b;感知机模型f(x)=sign(w⋅x+b)
- 赋初值 w0,b0
- 选取数据点(xi,yi)
- 判断该数据点是否为当前模型的误分类点,即判断若yi(w⋅xi+b)<=0则更新
w=w+ηyixi
b=b+ηyi - 转到2,直到训练集中没有误分类点
3.2 代码执行
3.2.1. 感知器神经网络的构建
% 1.1 生成网络
net=newp([0 2],1); %单输入,输入值为[0,2]之间的数
inputweights=net.inputweights{1,1}; %第一层的权重为1
biases=net.biases{1}; %阈值为1
% 1.2 网络仿真
net=newp([-2 2;-2 2],1);%两个输入,一个神经元,默认二值激活
net.IW{1,1}=[-1 1];%权重,net.IW{i,j}表示第i层网络第j个神经元的权重向量
net.IW{1,1}
net.b{1}=1;
net.b{1}
p1=[1;1],a1=sim(net,p1)
p2=[1;-1],a2=sim(net,p2)
p3={[1;1] [1 ;-1]},a3=sim(net,p3) %两组数据放一起
p4=[1 1;1 -1],a4=sim(net,p4)%也可以放在矩阵里面
net.IW{1,1}=[3,4];
net.b{1}=[1];
a1=sim(net,p1);
% 1.3 网络初始化
net=init(net);
wts=net.IW{1,1}
bias=net.b{1}
% 改变权值和阈值为随机数
net.inputweights{1,1}.initFcn='rands';
net.biases{1}.initFcn='rands';
net=init(net);
bias=net.b{1}
wts=net.IW{1,1}
a1=sim(net,p1)
运行结果:
ans =
-1 1
ans =
1
p1 =
1
1
a1 =
1
p2 =
1
-1
a2 =
0
p3 =
1×2 cell 数组
{2×1 double} {2×1 double}
a3 =
1×2 cell 数组
{[1]} {[0]}
p4 =
1 1
1 -1