机器学习-最小最大模块化学习非线性问题
2014-04-03 19:19
218 查看
经过前一篇的delta法则的应用,我们知道如何学习一个线性可分问题,但delta法则并不能学习非线性问题,我们可以利用最小最大模块化学习的方法,先将非线性问题分解成线性可分的几个子问题,利用delta法则分别对子问题进行学习,假设分成n个子问题,则我们可以得到n个决策面,将n个决策面两两取最小值,聚合成n/2个决策面,再两两取最大值,得到最终决策面。
以一个简单的问题为例,分别用perception和LMS两种方法学习:
原问题: 输入值从左到右为1,2,3,4 黑色方块的输出值为1,白色原型的输出值为0,求出这个问题的决策面
1、Perceptron学习规则实现最小最大化:
(1) 先将问题分解为以下四个子问题:
(2) 对于每个子问题进行学习:
w=[0.5,0.5,0.5,0.5,0.5]; %
每个子问题的权值都初始化为0.5,b初始化为-0.5
b=[-0.5,-0.5,-0.5,-0.5];
P=[1,2;1,4;2,3;3,4]; % 4个子问题的输入信号
T=[1,0;1,0;0,1;1,0]; % 4个子问题的教师信号
i=1; % 循环次数
while i<100
for k=1:1:4 %
对每个子问题分别进行训练
j=mod(i,2)+1;
a=P(k,j)*w(:,k)+b(:,k); %
计算估算值
if (a<=0) %
以Perceptron规则判定a的值
a=0;
else
a=1;
end
e=T(k,j)-a; %计算误差
w(:,k)=w(:,k)+e*P(k,j); %调整w和b值
b(:,k)=b(:,k)+e;
end
i=i+1;
end
display(w);
display(b);
x=linspace(0,5);
y1=x*w(:,1)+b(:,1); %构造函数
y2=x*w(:,2)+b(:,2);
y3=x*w(:,3)+b(:,3);
y4=x*w(:,4)+b(:,4);
plot(x,y1,'r',x,y2,'b',x,y3,'g',x,y4,'k');
%描点作图
axis([0,5,0,5]);
得到的权值和b为:
w = -1.5000 -0.5000 1.5000 -1.5000 0.5000
b = 2.5000 1.5000 -3.5000 5.5000
作出决策面为:(红色为子问题1,蓝色为子问题2,绿色为子问题3,黑色为子问题4)
(3) 将各模块进行最小化:
min_1=y1.*(y1<y2)+y2.*(y1>=y2);
% 构造取两个函数最小值的分段函数
min_2=y3.*(y3<y4)+y4.*(y3>=y4);
plot(x,min_1,'r',x,min_2,'m');
axis([0,5,0,5]);
作出决策面为:
(4) 将最小模块进行最大化
max_total=min_1.*(min_1>=min_2)+min_2.*(min_1<min_2);%构造取最大值的分段函数
plot(x,max_total);
axis([0,5,0,5]);
最后的决策面为:
2、LMS算法实现最小最大化:
(1) 对各个子问题的学习大致与perceptron一样,计算a值和误差时略有不同:
n=0.05; % 设置步长
while i<500
for k=1:1:4
j=mod(i,2)+1;
a=P(k,j)*w(:,k)+b(:,k); %直接计算a
e=T(k,j)-a;
w(:,k)=w(:,k)+2*n*e*P(k,j);
%w的变化与步长有关
b(:,k)=b(:,k)+2*n*e;
end
i=i+1;
end
最终得到的w和b值为:
w = -0.9792 -0.3333 0.9591 -0.9263 0.5000
b = 1.9633 1.3333 -1.8772 3.6193
作图得:
(2) 子问题最小模块化,过程与之前一致,得到决策面为:
(3) 将最小化得到的模块最大化,得到最终决策面:
从结果中可以看到,无论是perception还是LMS方法,都能较准确地学习出问题的决策面。
以一个简单的问题为例,分别用perception和LMS两种方法学习:
原问题: 输入值从左到右为1,2,3,4 黑色方块的输出值为1,白色原型的输出值为0,求出这个问题的决策面
1、Perceptron学习规则实现最小最大化:
(1) 先将问题分解为以下四个子问题:
(2) 对于每个子问题进行学习:
w=[0.5,0.5,0.5,0.5,0.5]; %
每个子问题的权值都初始化为0.5,b初始化为-0.5
b=[-0.5,-0.5,-0.5,-0.5];
P=[1,2;1,4;2,3;3,4]; % 4个子问题的输入信号
T=[1,0;1,0;0,1;1,0]; % 4个子问题的教师信号
i=1; % 循环次数
while i<100
for k=1:1:4 %
对每个子问题分别进行训练
j=mod(i,2)+1;
a=P(k,j)*w(:,k)+b(:,k); %
计算估算值
if (a<=0) %
以Perceptron规则判定a的值
a=0;
else
a=1;
end
e=T(k,j)-a; %计算误差
w(:,k)=w(:,k)+e*P(k,j); %调整w和b值
b(:,k)=b(:,k)+e;
end
i=i+1;
end
display(w);
display(b);
x=linspace(0,5);
y1=x*w(:,1)+b(:,1); %构造函数
y2=x*w(:,2)+b(:,2);
y3=x*w(:,3)+b(:,3);
y4=x*w(:,4)+b(:,4);
plot(x,y1,'r',x,y2,'b',x,y3,'g',x,y4,'k');
%描点作图
axis([0,5,0,5]);
得到的权值和b为:
w = -1.5000 -0.5000 1.5000 -1.5000 0.5000
b = 2.5000 1.5000 -3.5000 5.5000
作出决策面为:(红色为子问题1,蓝色为子问题2,绿色为子问题3,黑色为子问题4)
(3) 将各模块进行最小化:
min_1=y1.*(y1<y2)+y2.*(y1>=y2);
% 构造取两个函数最小值的分段函数
min_2=y3.*(y3<y4)+y4.*(y3>=y4);
plot(x,min_1,'r',x,min_2,'m');
axis([0,5,0,5]);
作出决策面为:
(4) 将最小模块进行最大化
max_total=min_1.*(min_1>=min_2)+min_2.*(min_1<min_2);%构造取最大值的分段函数
plot(x,max_total);
axis([0,5,0,5]);
最后的决策面为:
2、LMS算法实现最小最大化:
(1) 对各个子问题的学习大致与perceptron一样,计算a值和误差时略有不同:
n=0.05; % 设置步长
while i<500
for k=1:1:4
j=mod(i,2)+1;
a=P(k,j)*w(:,k)+b(:,k); %直接计算a
e=T(k,j)-a;
w(:,k)=w(:,k)+2*n*e*P(k,j);
%w的变化与步长有关
b(:,k)=b(:,k)+2*n*e;
end
i=i+1;
end
最终得到的w和b值为:
w = -0.9792 -0.3333 0.9591 -0.9263 0.5000
b = 1.9633 1.3333 -1.8772 3.6193
作图得:
(2) 子问题最小模块化,过程与之前一致,得到决策面为:
(3) 将最小化得到的模块最大化,得到最终决策面:
从结果中可以看到,无论是perception还是LMS方法,都能较准确地学习出问题的决策面。
相关文章推荐
- 机器学习(一):统计学习问题概述
- 最大最小值问题
- WPF DynamicDataDisplay Chart图形控制最大最小可缩放避免崩溃的问题解决代码
- ie6最大宽度最小宽度问题
- POJ 3615 牛的最小最大起跳高度问题 Floyd算法的变形应用
- 面试笔试整理3:深度学习机器学习面试问题准备(必会)
- 算法导论学习笔记之五--同时得到最大和最小值复杂度3(n/2)
- 最大流, 最小割问题及算法实现
- ACM学习历程23——最小周期串问题
- [洛谷P1029]最大公约数与最小公倍数问题 题解(辗转相除法求GCD)
- JavaScript学习笔记之取数组中最大值和最小值
- 【codevs 1904】最小路径覆盖问题(最大流)
- 深度学习解决多视图非线性数据特征融合问题
- 《算法导论》学习心得(一)——分治求最大子数问题
- 最大最小蚂蚁的TSP问题的实现
- MatLab建模学习笔记8——非线性规划问题求解
- 二叉树求最大最小权值问题的面试题
- [题解] [网络流二十四题(三)] 最小路径覆盖问题(二分图最大匹配)
- 深度学习,机器学习面试问题
- 机器学习-delta法则学习OR问题