我通过这段代码创建了两类点
clf;
%# random points
N = 1000;
a1=-1; b1=4;
a2=-4; b2=4;
x1 = a1 + (b1-a1).*rand(N,1);
y1 = a2 + (b2-a2).*rand(N,1);
x2 = a1 + (b1-a1).*rand(N,1);
y2 = a2 + (b2-a2).*rand(N,1);
hold all;
% Plot line y=-3/2*x+3
t = -1:.1:4;
z = -3/2*t+3;
plot(t,z)
n=300;
x1new=zeros(n,1);
y1new=zeros(n,1);
error1=zeros(n,1);
x2new=zeros(n,1);
y2new=zeros(n,1);
error2=zeros(n,1);
p1=rand(N,1); % make error distribution for class 1
d1=0;
d2=0;
i=1;
while d1<n && i<N
if (3*x1(i)+2*y1(i)<=6)
if p1(i) > 0.2
d1=d1+1;
x1new(d1)=x1(i);
y1new(d1)=y1(i);
error1(d1)=0;
plot(x1new(d1), y1new(d1),'-bs', 'MarkerFaceColor','b', 'MarkerSize',5)
else
d2=d2+1;
x2new(d2)=x1(i);
y2new(d2)=y1(i);
error2(d2)=1;
plot(x2new(d2), y2new(d2),'-bs', 'MarkerFaceColor','r', 'MarkerSize',5)
end
end
i=i+1;
p2=rand(N,1); % make error distribution for class 2
if (3*x2(i)+2*y2(i)>6)
if p2(i) > 0.2
d2=d2+1;
x2new(d2)=x2(i);
y2new(d2)=y2(i);
error2(d2)=0;
plot(x2new(d2), y2new(d2),'-bs', 'MarkerFaceColor','r', 'MarkerSize',5)
else
d1=d1+1;
x1new(d1)=x2(i);
y1new(d1)=y2(i);
error1(d1)=1;
plot(x1new(d1), y1new(d1),'-bs', 'MarkerFaceColor','b', 'MarkerSize',5)
end
end
i=i+1;
end
% Export to workplace
assignin('base', 'Class1', [x1new,y1new,error1]);
assignin('base', 'Class2', [x2new,y2new,error2]);
这是结果 http://i.stack.imgur.com/nBK8D.png
每门课得300分。生成的数据不是线性可分的——每个类别中有 20% 的数据违反了线性可分性。
但是,现在我必须使用 Delta Rule:
使用感知器,使用 Delta Rule (Widrow-Hoff) 对 200 个点进行训练以确定权重和偏差,并对剩余的 100 个点进行分类。
使用 adaline,使用 Delta Rule (Widrow-Hoff) 对 200 个点进行训练以确定权重和偏差,并对剩余的 100 个点进行分类。
*对于每种类型的单位,绘制显示收敛速度的图表(垂直轴的均方误差与水平轴的训练示例数,)
*对于每种类型的单元,绘制显示正确分类示例与训练集中示例数量的比率(百分比)的图表(使用 100 个示例进行学习并对剩余的 200 个进行分类——计算正确分类数据的百分比; 然后使用 125 个样本进行训练并对剩余的 175 个样本进行分类;使用 150 个样本进行训练并对剩余的 150 个样本进行分类;使用 175 个样本进行训练并对剩余的 125 个样本进行分类;使用 200 个样本进行训练并对剩余的 100 个样本进行分类)
你能帮我处理 Matlab 中的 Delta Rule 吗?