目录
一、感知器模型
1.感知器的组成
感知器模型包括:
(1)输入权值W
(2)激活函数
激活函数由多种选择,最常用、最简单的一种是:
该模型中,感知器的输入为:
(3)输出Output
2.常见的另外两种感知器模型的表示
(1)偏置型
该模型与第一种模型的区别在于W和偏执项b;
该模型中,激活函数的输入为: 。
(2)阈值型
该模型的输入为:;
该模型的激活函数为:。
3.三种感知器模型的比较
权值型W | 偏置型b | 阈值型? | |
输入 | 输入X是(n+1)维,![]() | 输入为n维, | 输入为n维, |
激活函数 | ![]() | ![]() | |
关系 | ![]() |
三种模型本质上是一样的,只是表现形式不同。
从应用意义上理解感知器:以二分类为例,在训练时,感知器的初始权重是任意给的,之后根据感知器的训练规则不断更新感知器的权重,直到感知器可以将所有的训练样本正确分类。
二、感知器的训练规则
或
其中,ŋ :学习速率,t:目标函数输出,y:感知器输出,:第i个样本
三、Matlab实现
Perceptron.m
第一种实现:
function W=Perceptron(X,y,learnRate,Maxiter)
%输出:权重W=[w0,w1,w2,...,wn];
%输入:样本数据X(m*n),样本标签y(m*1),learnRate学习速率,最大迭代次数Maxiter
%y的取值{-1,1}
%选取的激活函数为sign(z)
[m,n]=size(X);
%将样本扩充至m*(n+1)维
X=[ones(m,1),X];
%初始化权重
W=zeros(n+1,1);
for step=1:Maxiter
flag=true;
for j=1:m
output=sign(X(j,:)*W);
if(output~=y(j))
flag=false;
W=W+learnRate*(y(j)-output)*X(j,:)';
end
end
if(flag==true)
break;
end
end
end
第二种实现:
function [W,b]=Perceptron(X,y,learnRate,Maxiter)
%输出:权重W=[w1,w2,...,wn],偏置项b
%输入:样本数据X(m*n),样本标签y(m*1),learnRate学习速率,最大迭代次数Maxiter
%y的取值{-1,1}
%选取的激活函数为sign(z)
[m,n]=size(X);
%初始化权重
W=zeros(n,1);
%初始化偏置项
b=0;
for step=1:Maxiter
flag=true;
for j=1:m
output=sign(X(j,:)*W+b);
if(output~=y(j))
flag=false;
W=W+learnRate*(y(j)-output)*X(j,:)';
b=b+learnRate*(y(j)-output);
end
end
if(flag==true)
break;
end
end
end
test_Perceptron.m
clear; clc;
close all;
%样本数据X
x=[0,0;0,1;1,0;1,1];
%样本标签
y=[-1;-1;-1;1];
%学习速率
n=0.1;
%最大迭代次数
iter=150;
%感知器
w=Perceptron(x,y,n,iter);
%[w,b]=Perceptron(x,y,n,iter);
%绘制样本散点图
pos=find(y==1);
neg=find(y==-1);
figure;
hold on;
plot(x(pos,1),x(pos,2),'k+');
plot(x(neg,1),x(neg,2),'ko');
xlabel('x(0)');
ylabel('x(1)');
title('样本散点图及分类结果')
%绘制直线
xline=linspace(0,5,50);
yline=-w(2)/w(3)*xline-w(1)/w(3);
%yline=-w(1)/w(2)*xline-b/w(2);
plot(xline,yline);