0

このコードで2つのクラスのポイントを作成しました

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%が線形分離可能性に違反しています。

しかし、今私はデルタルールで作業する必要があります:

  1. パーセプトロンを使用して、デルタルール(Widrow-Hoff)を使用して200ポイントでトレーニングを行い、重みとバイアスを決定し、残りの100ポイントを分類します。

  2. アダリンを使用して、デルタルール(Widrow-Hoff)を使用して200ポイントでトレーニングを行い、重みとバイアスを決定し、残りの100ポイントを分類します。

*ユニットの種類ごとに、収束の速度を示すグラフをプロットします(横軸のトレーニングの例の数に対する縦軸の平均二乗誤差)

*ユニットの種類ごとに、トレーニングセット内の例の数に対する正しく分類された例の比率(パーセンテージ)を示すグラフをプロットします(学習には100の例を使用し、残りの200を分類します-正しく分類されたデータのパーセンテージを計算します;次に、トレーニングに125の例を使用し、残りの175を分類します。トレーニングに150を使用し、残りの150を分類します。トレーニングに175を使用し、残りの125を分類します。トレーニングに200を使用し、残りの100を分類します)

MatlabでDeltaRuleを使用するのを手伝ってもらえますか?

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 に答える