感知器算法(perceptron algorithm)

算法实现步骤

给定一个增广的训练模式集{y1,y2yN},w1,w2:

  1. 给定初步数始值K=0ρ=C,(C)广W(0)赋任意小的值;
  2. 输入训练模式yK,W(K)TyK;
  3. 校正增广权矢量,校正规则是:
    yKw1W(K)TyK0W(K+1)=W(K)+ρyK;
    yKw2W(K)TyK0W(K+1)=W(K)ρyK;
    否则不需校正即:W(K+1)=W(K).

    w2类各个分量乘(1),则校正规则为:
    W(K)TyK0W(K+1)=W(K)+ρyK;

  4. K=K+1,继续第二步,直到W对所有的样本均稳定不变,即对样本进行正确分类结束。

Matlab代码实现

clear all;
close all;
clc;

%给定样本:
%w1 = (x1,x2) = {(0,0),(0,1)}
%w2 =(x3,x4)= {(1,0),(1,1)}
x1 = [0,0];x2 = [0,1];x3 = [1,0];x4 = [1,1];
%增广型训练模式集
y1 = [x1,1];y2 = [x2,1];y3 = [-x3,-1];y4 = [-x4,-1];
y = [y1;y2;y3;y4];
%给定初始权矢量,增量,步数
W = [1;1;1]; P = 1; K = 0;

d = zeros(4,2000);%用来存储判别函数
for i = 1:2000
    for j = 1:4
        K = K + 1;
        d(j,i) = y(j,:)*W;
        if d(j,i) <= 0     
            W = W + y(j,:)';%当d<=0,需校正;d>0,不校正
        end
    end
    if d(:,i)>0    %迭代到所有训练样本的判别函数大于0时,结束迭代,输出解向量
        disp( '所求的解向量W为:');
        disp( num2str(W));
        break
    end
end

结果图


版权声明:本文为liuzhuomei0911原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。