0

我通过这段代码创建了两类点

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:

  1. 使用感知器,使用 Delta Rule (Widrow-Hoff) 对 200 个点进行训练以确定权重和偏差,并对剩余的 100 个点进行分类。

  2. 使用 adaline,使用 Delta Rule (Widrow-Hoff) 对 200 个点进行训练以确定权重和偏差,并对剩余的 100 个点进行分类。

*对于每种类型的单位,绘制显示收敛速度的图表(垂直轴的均方误差与水平轴的训练示例数,)

*对于每种类型的单元,绘制显示正确分类示例与训练集中示例数量的比率(百分比)的图表(使用 100 个示例进行学习并对剩余的 200 个进行分类——计算正确分类数据的百分比; 然后使用 125 个样本进行训练并对剩余的 175 个样本进行分类;使用 150 个样本进行训练并对剩余的 150 个样本进行分类;使用 175 个样本进行训练并对剩余的 125 个样本进行分类;使用 200 个样本进行训练并对剩余的 100 个样本进行分类)

你能帮我处理 Matlab 中的 Delta Rule 吗?

4

1 回答 1

2

Will Dwinnell 为 DeltaRule 学习做了这个,并建议输入可能的参数:

% B = DeltaRuleBatchTrain(X,Y,LearningRate,MaximumPasses,MinimumWeightChange,B0)
%
% B                    = Discovered coefficients
%
% X                    = Predictors (exemplars in rows, variables in columns)
% Y                    = Target variable (0/1 values)
% LearningRate         = Learning rate                             (try 0.05)
% MinimumWeightChange  = Minimum change in weight norm to continue (try 0.01)
% MaximumPasses        = Maximum number of training passes         (try 50)
% B0                   = Initial guess for coefficients (optional, NaN for none)

他给出了以下示例(我已对其进行了修改以使用您创建的数据:

% Generate some random data
X = [Class1; Class2]  %Now 600x3
Y = ones(size(X,1),1);
Y(1:size(Class1,1)) = 0;

% Train single neuron model using delta rule
B = DeltaRule(X,Y,0.05,0.01,50);

% Recall using discovered model
Z = Logistic(B(1) + X * B(2:end));

% Measure resubstitution accuracy
mean(Y == (Z > 0.5))
于 2012-05-13T22:06:09.193 回答