2012-05-13 196 views
0

delta规则我已经通过这个代码培训与Matlab中

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规则工作:

  1. 使用感知,做delta规则(的Widrow - 霍夫)在200点的训练,以确定权重和偏见,和分类剩下100分。

  2. 使用一个Adaline的,做200点与delta规则(的Widrow - 霍夫)确定权重和偏见,剩下的100点的分类培训。

*对于每种类型的单元,绘制显示收敛速度的曲线图(均方误差在防止在横轴训练实例的数目,垂直轴)

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

你能帮我做一下在三角洲规则在Matlab?

+0

没有人可以帮我弄清楚如何解决这个问题? – minhbsu

+0

你见过这个吗?http://www.mathworks.com/matlabcentral/fileexchange/26696-deltarule – kitchenette

+0

但是我需要为函数定义一些参数 – minhbsu

回答

2

威尔Dwinnell做出this为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)) 
+0

我已经添加了一些要求,如果您可以帮助扩展它,它是非常好的。 – minhbsu

+0

感知器和adaline怎么样? – minhbsu

+0

你有任何答案吗? – minhbsu