神经网络-感知机原理及其matlab代码实现二分类

版权声明:本文为博主原创文章,未经博主允许不得转载。可联系邮箱[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

猜你喜欢

转载自blog.csdn.net/Justin_bibo/article/details/83992360
今日推荐