用matlab通过感知器算法程序实现2分类

代码直接复制到matlab就可以直接运行,如下:

%编写感知器算法程序,求下列模式分类的解向量:(三维,8个样本,二分类的题)
%8个样本分别是
x1=[0;0;0],x2=[1;0;0],x3=[1;0;1],x4=[1;1;0]
x5=[0;0;1],x6=[0;1;1],x7=[0;1;0],x8=[1;1;1]
%放入一个2维数组里面,方便计算
x=[[0;0;0],[1;0;0],[1;0;1],[1;1;0],[0;0;1],[0;1;1],[0;1;0],[1;1;1]]
%初始w
w1=[-1,-2,-2,0]
%转变成增广向量
x(4,:)=1
x1=x
%属于第二类样本*(-1)
for i=5:8
    x1(:,i)=-1*x1(:,i)
end

% 初始化参数,c是校正增量,这里设置为1,W是存储每次更新后的权向量参数w,
% D表示存储计算准则函数后的结果
% flag:表示如果准则函数为大于0的值,就会+1,一共8个样本,一轮过后如果都满足要求的话
%       flag=8,则可以退出循环了,如果不满足的话,就会flag清零,并继续迭代
% j表示迭代数次数

c=1
W=[]
D=[]
flag=0
j=0
while flag<8 %记录是否都大于0
    for i =1:8
        d = w1*x1(:,i);

        if d <= 0
            w1 = w1 + c*x1(:,i).';
        else
            w1 = w1;
            flag = flag+1
        end
        W = [W;w1];
        D = [D;d]
    end
    j=j+1 
    if flag<8
        flag=0
    end
end
%画图,x,y都取值在[-1,1],去了50个
x3 = linspace(-1,1,50);
y3 = x3; %设置y轴范围
[X,Y] = meshgrid(x3,y3); %将其x,y轴网格化
%由得出的w1将公式化简得到Z
Z3=(1+3*X-2*X)/3
%绘制曲面
Fig = mesh(X,Y,Z3); %绘制三维曲面图
hold on;%保留图形
%将样本点画在幕布上,实心点
x2=x(1,:);y2=x(2,:);z=x(3,:);
scatter3(x2,y2,z,'filled')%散点图
saveas(gcf,'result.jpg');

 

结果如图所示:

  • 8
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值