MachineLearning:二、感知器perception算法

简介

50年代末 F.Rosenblatt提出感知器算法。线性分类器的设计就是利用训练样本来计算线性函数的权向量

问题

设有两类问题的判别函数
         g(X)=w1x1+w2x2+w3=0
训练样本XA,XB∈ω1, XC,XD∈ω2则
           g(XA)>0,g(XB)>0
           g(XC)<0,g(XD)<0
MachineLearning:二、感知器perception算法_第1张图片
即:
           WX>0
其中:
这里写图片描述   权向量
MachineLearning:二、感知器perception算法_第2张图片   各样本特征向量的增1矩阵
该线性联立不等式只对线性可分问题有解,且是多解,因而只有按不同条件取最优解

 赏-罚训练算法是一个迭代过程:
      1)取权向量W(1)为任一初始值;
      2)用训练集X对W进行迭代,在第k步
      3)如Xk∈ ω1 且 Wt(k)X(k) ≤ 0
    如Xk∈ ω2 且 Wt(k)X(k) ≥ 0。则惩罚:
       W(k+1)=W(k)+f(X)
       直之无惩罚  
 #即要设计一个f(X)随着迭代达到最小

  确定f(X)的感知器算法的梯度法,是使得f(X)越迭代越小最后收敛为“0”(梯度下降法)
  设f(X)是向量 X=(x1,x2xn) 的函数,其梯度向量为
这里写图片描述
  它的方向指向自变量(x1,x2…xn)增大时函数f(X)最大增大率方向,反之,负梯度指向f的最陡下降方向。
MachineLearning:二、感知器perception算法_第3张图片
F.Rosenblett 提出的准则函数
J(W,X)=C1(|WtX|WtX)
W(k+1)=W(k)C2J       C2
这样把求线性不等式组转化为一个使函数J极小化,也就是使 J=0
MachineLearning:二、感知器perception算法_第4张图片

这里写图片描述

其中
MachineLearning:二、感知器perception算法_第5张图片
公式表示:
MachineLearning:二、感知器perception算法_第6张图片

注意

原不等式是对第二类样本的特征向量引如符号后得到的,如不引入负号,则算法为:
Xkω1Wt(k)X(k)>0
Xkω2Wt(k)X(k)<0
则不需要修正 反之,须予以“惩罚”:
Xkω1Wt(k)X(k)<=0
W(k+1)=W(k)+CX(k)
Xkω2Wt(k)X(k)>=0
W(k+1)=W(k)CX(k)

例子

例:有4个训练样本如下:
ω1类: (0,0),(0,1)
ω1类: (1,0),(1,1)
试用感知器算法求其判别函数。
MachineLearning:二、感知器perception算法_第7张图片

解:特征向量的增1矩阵
X(1)=(001)t,X(2)=(011)t
X(3)=(101)t,X(4)=(111)t
C=1,Wt(1)=(000)
第一次迭代
  输入样本1
  MachineLearning:二、感知器perception算法_第8张图片
  因 W(1)ω1 类, Wt(1)X(1)0 ,要受惩罚
  MachineLearning:二、感知器perception算法_第9张图片
  
  输入样本2
  MachineLearning:二、感知器perception算法_第10张图片
  因 W(2)ω1 类, W^t(1)X(1)>0,不惩罚
MachineLearning:二、感知器perception算法_第11张图片

输入样本3
MachineLearning:二、感知器perception算法_第12张图片
W(3)ω2,Wt(3)X(3)0 ,要受惩罚
MachineLearning:二、感知器perception算法_第13张图片

输入样本4
MachineLearning:二、感知器perception算法_第14张图片
W(4)ω2,Wt(4)X(4)0,
MachineLearning:二、感知器perception算法_第15张图片
由于W(1),W(2),W(3),W(4)未能收敛,继续迭代,这时
X(5)=X(1);X(6)=X(2)
X(7)=X(3);X(7)=X(4)
再输入4个样本进行计算
Wt(5)X(5)=0,W(6)=W(5)+X(5)=(101)t
Wt(6)X(6)=1,   W(7)=W(6)=(101)t
Wt(7)X(7)=0,W(8)=W(7)X(7)=(200)t
Wt(8)X(8)=2,  W(9)=W(8)=(200)t

仍未收敛,再用4个原始样本进行迭代,这时
X(9)=X(1),X(10)=X(2),X(11)=X(3),X(12)=X(4)

迭代结果:
Wt(9)X(9)=0  W(10)=W(9)+X(9)=(201)t
Wt(10)X(10)=1   W(11)=W(10)=(201)t
Wt(11)X(11)=1  W(12)=W(11)=(201)t
Wt(12)X(12)=1  W(13)=W(12)=(201)t
此时X(2),X(3),X(4)分类全部正确,再检查一下X(1)的分类
MachineLearning:二、感知器perception算法_第16张图片
收敛,结束
g(X)=2x1+1=0

作业

以下述两类模式为样本,用matlab实现感知器算法求判别函数: ω1:(000)t,(100)t,(101)t,(110)t;ω2:(001)t,(011)t,(010)t,(111)t.W(1)=(1220)tC=1.

clc
clear
X = [ 0 0 0 1;
      1 0 0 1;
      1 0 1 1;
      1 1 0 1;
      0 0 -1 -1;
      0 -1 -1 -1;
      0 -1 0 -1;
      -1 -1 -1 -1;
      ];
 W = [-1 -2 -2 0];
 C = 1;
 [n m] = size(X);

 %迭代求出W
 while (1)
     j = 0;%0表示收敛,1表示没有收敛。默认收敛
 for i = 1:n
     g = X(i,:)*W';
     %g = g*X(i, 4);
     if  g <= 0 
         j = 1;%没有收敛
         disp('惩罚');
         W = W + C*X(i,:);
     end
 end
    if j == 0
        break;
    else
        j = 0;
    end
 end

%%%%%%%%%绘图程序
color = ['r', 'b'];
for i = 1:n
    scatter3(X(i,1)*X(i,4), X(i,2)*X(i,4) ,X(i,3)*X(i,4), 16, color(floor((X(i,4)+3)/2)));
    hold on;
end

t=0:0.1:1;

[x,y]=meshgrid(t);

z = -W(1)/W(3)*x-W(2)/W(3)*y-W(4)/W(3);

mesh(x,y,z)

结果:W = [3 -2 -3 1]
MachineLearning:二、感知器perception算法_第17张图片

你可能感兴趣的:(数据结构&算法,数据挖掘,机器学习)