利用MATLAB实现感知器算法

利用MATLAB实现感知器算法

% 感知器算法
clc;clear;close all;
[Number,X11,X12,X21,X22]=textread('data2.txt','%f%f%f%f%f'); 
%% 数据预处理
One_mat=ones(10,1);
Aug_W1=[X11 X12 One_mat];
Aug_W2=-1.*[X21 X22 One_mat];
%Aug_W1=[Aug_W1;10,20,1];% 样本修改
Aug_Mat=[Aug_W1;Aug_W2];
%% 迭代分类
W1=[10;8;2];
c=1;
num=1;
times=0;
while(num>0)
    times=times+1;
    num=0;
    for i=1:size(Aug_Mat,1)
        Temp=W1'*Aug_Mat(i,:)';
        if Temp<=0
            W1=W1+c*Aug_Mat(i,:)';
            num=num+1;
        end
    end
    disp(['迭代出现W*K<=0的次数= ',num2str(num)])
    % 迭代长时间不收敛则退出
    if times>100
        break;
    end
end
disp(['迭代次数= ',num2str(times)])
Final_W=W1;
disp(['判别函数为d(x)=',num2str(Final_W(1,1)),'x1',num2str(Final_W(2,1)),'x2+',num2str(Final_W(3,1))]);
% 画图
%'unit','normalized',unit测量单位,这些单位依据父容器进行归一化。
% 容器的左下角映射到 (0,0),右上角映射到 (1,1)。
figure('color','w','unit','normalized','Position',[0.1,0.1,0.8,0.8])
x01=linspace(-6,10,200);
y01=-Final_W(1,1)./Final_W(2,1)*x01-Final_W(3,1)./Final_W(2,1);
p1=plot(X11,X12,'r*','linewidth',2);hold on
p2=plot(X21,X22,'g*','linewidth',2);hold on
% p4=plot(10,20,'k*','linewidth',2);hold on
p3=plot(x01,y01,'b','linewidth',2);hold on
title('感知器算法分类结果')
legend([p1 p2 p3],'第一类','第二类','判别面','Location','southeast');
xlabel('X1');
ylabel('X2');

% 判断类别
mx1=[2;8];
mx2=[-0.6;7];
my1=Final_W(1:2,1)'*mx1+Final_W(3,1);
my2=Final_W(1:2,1)'*mx2+Final_W(3,1);
if my1>0
    disp(['(',num2str(mx1(1)),',',num2str(mx1(2)),')','属于第二类'])
else
    disp(['(',num2str(mx1(1)),',',num2str(mx1(2)),')','属于第一类'])
end
if my2>0
    disp(['(',num2str(mx2(1)),',',num2str(mx2(2)),')','属于第二类'])
else
    disp(['(',num2str(mx2(1)),',',num2str(mx2(2)),')','属于第一类'])
end

在这里插入图片描述
原始样本 C=1迭代次数= 6 判别函数为d(x)=9.1x1-7x2+12

在这里插入图片描述
原始样本 C=0.1 迭代次数= 17 判别函数为d(x)=4.76x1-3.67x2+4.1

在这里插入图片描述
增加样本(10,20) C=0.1 迭代次数>100 训练失败 判别函数为d(x)=4.72x1-2.41x2+2.9

  • 2
    点赞
  • 47
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值