このコードで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%が線形分離可能性に違反しています。
しかし、今私はデルタルールで作業する必要があります:
パーセプトロンを使用して、デルタルール(Widrow-Hoff)を使用して200ポイントでトレーニングを行い、重みとバイアスを決定し、残りの100ポイントを分類します。
アダリンを使用して、デルタルール(Widrow-Hoff)を使用して200ポイントでトレーニングを行い、重みとバイアスを決定し、残りの100ポイントを分類します。
*ユニットの種類ごとに、収束の速度を示すグラフをプロットします(横軸のトレーニングの例の数に対する縦軸の平均二乗誤差)
*ユニットの種類ごとに、トレーニングセット内の例の数に対する正しく分類された例の比率(パーセンテージ)を示すグラフをプロットします(学習には100の例を使用し、残りの200を分類します-正しく分類されたデータのパーセンテージを計算します;次に、トレーニングに125の例を使用し、残りの175を分類します。トレーニングに150を使用し、残りの150を分類します。トレーニングに175を使用し、残りの125を分類します。トレーニングに200を使用し、残りの100を分類します)
MatlabでDeltaRuleを使用するのを手伝ってもらえますか?