Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

外れ値の入力ベクトル

5 つの入力ベクトルを 2 つのカテゴリに分類するように、2 入力ハード制限ニューロンの学習を行います。ただし、1 つの入力ベクトルが他のすべてよりもはるかに大きいため、学習に時間がかかります。

X の 5 つの列ベクトルのそれぞれによって 2 要素入力ベクトルが定義され、行ベクトル T によってベクトルのターゲット カテゴリが定義されます。PLOTPV を使用してこれらのベクトルをプロットします。

X = [-0.5 -0.5 +0.3 -0.1 -40; -0.5 +0.5 -0.5 +1.0 50];
T = [1 1 0 0 1];
plotpv(X,T);

4 つの入力ベクトルの大きさは、プロットの左上にある 5 番目のベクトルよりもずっと小さいことに注意してください。パーセプトロンによって、X の 5 つの入力ベクトルは、T によって定義された 2 つのカテゴリに適切に分類されなければなりません。

PERCEPTRON は新しいネットワークを作成します。その後、このネットワークは、その重みとバイアスの初期値になる入力データおよびターゲット データで構成されます(通常、構成は ADAPT および TRAIN によって自動的に行われるため不要です)。

net = perceptron;
net = configure(net,X,T);

ニューロンによる最初の分類試行をプロットに追加します。

初期重みは 0 に設定されているため、任意の入力に対して出力が同じになり、プロットには分類線が表示されません。これで、学習を始めることができます。

hold on
linehandle = plotpc(net.IW{1},net.b{1});

ADAPT は、より優れた分類器として機能する新しいネットワーク オブジェクト、ネットワーク出力、および誤差を返します。このループは、誤差が 0 になるまでネットワークの適応を行い、分類線をプロットします。

E = 1;
while (sse(E))
   [net,Y,E] = adapt(net,X,T);
   linehandle = plotpc(net.IW{1},net.b{1},linehandle);
   drawnow;
end

正しい結果を得るまでにパーセプトロンを 3 回通過したことに注目してください。ごく簡単な問題にしては長い時間がかかっています。学習時間が長い原因は、外れ値のベクトルです。学習時間が長くなってもパーセプトロンの学習は適切に行われるため、他の入力の分類に使用できます。

これで、SIM を使用して他の任意の入力ベクトルを分類することができます。たとえば、[0.7; 1.2] の入力ベクトルを分類します。

元の学習セットを使用したこの新しい点のプロットは、ネットワーク性能を示します。学習セットと区別するため、赤い色を付けます。

x = [0.7; 1.2];
y = net(x);
plotpv(x,y);
circle = findobj(gca,'type','line');
circle.Color = 'red';

"hold" をオンにして、前のプロットが消去されないようにします。学習セットと分類線をプロットに追加します。

hold on;
plotpv(X,T);
plotpc(net.IW{1},net.b{1});
hold off;

最後に、対象領域を拡大します。

パーセプトロンによって、新しい点 (赤色で表示) が、カテゴリ "1" (プラスで表示) ではなく、カテゴリ "0" (丸で表示) に正しく分類されました。学習時間が長くなってもパーセプトロンの学習は適切に行われます。外れ値のベクトルに関連する学習時間を削減する方法については、"正規化パーセプトロン規則" の例を参照してください。

axis([-2 2 -2 2]);