版权声明:本文为博主原创文章,未经博主允许不得转载。可联系邮箱[email protected] https://blog.csdn.net/Justin_bibo/article/details/83992360
感知机简介
感知机是最简单的神经网络,结构如下图所示:
感知机由输入层和输出层组成,输入层可以有多个,输入的结果等于每个输入神经元和权值的乘积xw的和:
y=x1w1+x2w2-θ
其中θ可以固定为-1,因此感知机通过不断训练来优化权值
感知机用于分类
如图,分类的目的是找到一个直线(超平面)将两个类别分开,感知机通过不断训练寻找合适的直线来分类,但是只适用于线性可分问题。
matlab代码
matlab版本:R2017a
function perceptron()
clear all;
clc;
learnrate=0.5;%学习率
maxtrainnumber=100;%最大训练次数
trainset=[2,4,5,1;1,2,1,-1;4,5,6,1;0,1,3,-1]; %获取训练集
testset=[5,6,4,1;1,2,1,-1];%获取测试集
[testm,~]=size(testset);
[trainm,trainn]=size(trainset);
w=unifrnd(-1, 1, 1, trainn-1); %初始化权值
for i=1:maxtrainnumber %开始训练感知机
mark=1;
for j=1:trainm
y=sign(sum(trainset(j,1:trainn-1).*w)+1); %%计算感知机的输出
if y~=trainset(j,end)
mark=0;
w=w+learnrate*(trainset(j,end)-y).*trainset(j,1:trainn-1);%修正w
end
end
if mark==1
break;
end
end
numel(find((sign(sum((testset(:,1:trainn-1).*w)')+1)-testset(:,end)')==0))/testm%测试测试集上面预测的正确率
end