机器学习-delta法则学习OR问题

来源:互联网 发布:数据透视表英文版 编辑:程序博客网 时间:2024/06/05 11:08

一、  Delta法则实现OR问题

先构造OR问题的输入样本P和教师信号T,基于matlab的编程:

P1=[0;0];

P2=[0;1];

P3=[1;0];

P4=[1;1];

P=[P1,P2,P3,P4];

T=[0,1,1,1];

随机初始化W和b、设定学习速率:

W=[0,0];

b=0;

n=0.05;

    在第i次迭代中,对四个样本点利用Delta法则对W和b进行调整:

j=mod(i,4)+1;    %对四个样本点轮流调整

e(j,:)=T(:,j)-tmp1(:,j);  %计算单个点的误差值

W=W+2*n*e(j,:)*(P(:,j))'; %调整权值

b=b+2*n*e(j,:);  %调整b值

tmp1=W*P+b;  %利用调整后的W和b值计算出新的结果,存在tmp1矩阵中

e=(T-tmp1)';   %计算所有点的结果和教师信号的误差

       以W*P+b=0.5为界,判断只用0或1表示的输出矩阵a,并计算此时tmp1矩阵的均方误差:

for k=1:1:4

    if tmp1(:,k)>0.5

        a(:,k)=1;  %大于0.5则判定为1

    else a(:,k)=0;  %否则判定为0

    end

    tmp2(k,:)=e(k,:)*e(k,:); 计算e^2

end

i=i+1;

record(:,i)=mean(tmp2(:));  %均方误差F(x)=E[e^2]

plot(record);  %画图描点

二、不同学习速率下的收敛速度

当学习速率设定为0.05,进行100次迭代后,得到结果:

tmp1 =

0.3211   0.7603    0.7343    1.1736

决策面为:

W =

0.4133   0.4393

b =

0.3211

均方误差为:

Mean-squared error =

0.0653

         判定结果:

a =

 0     1    1     1

         与正确结果一致,学习成功。以迭代次数i为横坐标,均方误差为竖坐标作图如下,可以观察得到误差比较平稳地下降,在迭代次数较大之后误差没有发生震荡。


2、 当学习速率设定为0.2,进行100次迭代后,得到结果:

tmp1 =

0.4167   0.7500    0.5833    0.9167

决策面为:

W =

0.1667   0.3333

b =

0.4167

均方误差为:

Mean-squared error =

0.1042

         判定结果:

a =

 0     1    1     1

         与正确结果一致,学习成功。以迭代次数i为横坐标,均方误差为竖坐标作图如下,可以观察得到误差在刚开始时快速下降,迭代次数增加后开始发生轻微震荡。


3、当学习速率选择较大,选择为0.5时,进行100次迭代,结果为:

tmp1 =

   12     0   -13  -25

决策面为:

W =

   -25  -12

b =

12

均方误差为:

Mean-squared error =

    254.2500

         判定结果:

a =

     1    0     0     0

         与正确结果不一致,学习不成功。以迭代次数i为横坐标,均方误差为竖坐标作图如下,可以看到误差发生严重震荡,当迭代次数增加时有发散趋势。

       通过比较设定不同的学习速率得到不同的学习结果,可以得出结论当学习速率增大,结果会发生不同程度的震荡,若学习速率继续增大,结果会发散,使得得不到正确的决策面。


0 0
原创粉丝点击