机器学习-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为横坐标,均方误差为竖坐标作图如下,可以看到误差发生严重震荡,当迭代次数增加时有发散趋势。
通过比较设定不同的学习速率得到不同的学习结果,可以得出结论当学习速率增大,结果会发生不同程度的震荡,若学习速率继续增大,结果会发散,使得得不到正确的决策面。
- PHP 局域网其他机器无法访问的问题
- 黑马程序员——【java】StringBuffer——常用方法
- WINDOWS7下修改androidSDK创建模拟器的存储路径
- iOS study Day6-数字转英文
- iScroll 下拉刷新
- 机器学习-delta法则学习OR问题
- Caused by: android.view.InflateException: Binary XML file line #11: Error inflating class
- 建造者模式--学习
- Android 当前时间的获取
- JAVA操作Hbase基础例子
- 黑马程序员——【Java】基本数据类型对象包装类
- 矩阵相乘
- 关于CocoaWebResource加载进度的方法
- RAC安装二