外れ値の入力ベクトル
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]);