次の方法で共有


この記事は機械翻訳されたものです。

テストの実行

ニューラル ネットワークを使用した分類と予測 (機械翻訳)

James McCaffrey

コード サンプルのダウンロード

James McCaffrey

今月のコラムでは、ニューラル ネットワークを使用して、分類と予測の問題を解決する方法を説明します。クラス分けの目標は最高の例で説明されています。ようないくつかの菖蒲の花に関する履歴データがあるとします。

5.1 3.5 1.4 0.2 周辺
7.0 3.2 4.7 1.4 Versicolor
6.3 3.3 6.0 2.5 Virginica
6.4 3.2 4.5 1.5 Versicolor
...

スペースで区切られたデータの各行は、5 つのフィールドがあります。最初の 4 つの数値のフィールドは、(緑色の蕾カバー) がく片の長さ、がく片の幅、花弁 (花の色の部分) の長さおよび花弁の幅です。5 番目のフィールドの種です: 周辺、Versicolor または Virginica。分類の目標は、方程式またはどの種またはクラス、アイリスが属するを予測するルールのセットを決定することです。[ルール セットのがく片と花弁の長さと幅の値に基づく新しいアイリスのクラスを予測するために使用できます。この虹彩プラント データによって r. が最初に使用する典型的な例です。A.フィッシャーは 1936 年。それ、刺激がありますいないするが、分類は非常に重要です。申請者の信用格付けの収入や毎月の費用などの変数に基づいて分類するなどがあります (または同等の信用力を予測)、および病院患者から血液検査値に基づく癌を持っているかどうかを分類します。

ニューラル ネットワークの使用などのデータを分類するための多くの方法があります。ニューラル ネットワークについて考える方法の 1 つは、彼らは任意の数の数値の入力を受け入れるし、任意の数の数値の出力を生成する仮想の入出力装置です。どこに向かっているを確認する最善の方法でスクリーン ショットを調べることです図 1 とイメージに図 2図 1 動作をニューラル ネットワークの分類を示します。明確なニューラル ネットワークを用いた分類の概念を維持するには、現実のデータを使用していません。代わりに 4 つの任意の数値値は特定の意味を持つの入力 x の値が人工データを使用します。出力 y - 分類する変数を色であり、それは 3 つのカテゴリの値の 1 つを取ることができます: 赤、緑または青。示すプログラム図 1 人工データの 100 行を持つテキスト ファイルを生成することによって開始されます (たとえば、"8.0 5.0 9.0 5.0 緑」)、し、データの最初の 4 行を表示します。次に、プログラム生データ ファイルをメモリに 80 の行のデータをトレーニング マトリックスとの 20 行のテスト行列として読み取ります。2 つの変換が、生のデータに適用されていることに注意してください。生の数値の入力データのすべての値を-1.00 と +1.00 との間で、raw 出力データ (など「赤」) ベクトルと 3 つの値にエンコードされているように正規化されます ("1.0 0.0 0.0")。


アクション 1 ニューラル ネットワーク分類を図します。

Neural Network Structure
図 2 ニューラル ネットワークの構造

トレーニングを作成し、行列をテストした後、デモ プログラムは完全に接続されたフィード フォワード型ニューラル ネットワーク作成 3 つの入力ニューロン、計算のための 5 つの非表示ニューロンという 3 つの出力ニューロン。4-5-3 判明 43 の重みとバイアス完全結合ニューラル ネットワークが必要です。次に、分類プログラムは最高の 43 の重みとバイアス (合計分類エラーを最小限に抑えるもの) を検索するには、トレーニング データを分析します。プログラムの重量と偏見の最高値を推定するクロス エントロピー エラーと共にの粒子群最適化を使用します。

分類プログラムは最高の重量と偏見へのニューラル ネットワークをロードし、20 行のテスト マトリックス内のデータのモデルの予測精度を評価します。通知、ニューラル ネットワークの出力を設計して 3 つの出力値を 1.0 に合計されています。この例では、モデルが正しく 17 20 のテスト ベクトルを予測します。画像に図 2 (-1.00、1.00、0.25、増減:-0.76%) の入力を受け入れると赤に相当する (0.9, 0.1, 0.0) の予測出力を生成ニューラル ネットワークを示しています。

プログラムの例が入力のデータが数値であり、出力データ カテゴリの分類のためのニューラル ネットワークを用いたときに 5 つの主要な決定事項があることを指摘しました。

  1. 数値の入力データを正規化する方法
  2. カテゴリ別の出力データをエンコードする方法
  3. 範囲 [0.0, 1.0] の神経回路の出力を生成する方法
  4. トレーニング時のエラーを測定する方法
  5. テストするときの精度を測定する方法

以下のセクションで例のプログラムでの選択肢であることを説明します。

  1. 数値の入力データの線形変換を実行します。
  2. 1 N カテゴリカル出力データのエンコーディングを使用します。
  3. 出力層のソフトマックス活性化関数を使用します。
  4. クロス エントロピー エラーを使用して最高の重みを決定するには
  5. 勝者は、かかるすべてのアプローチを使用して精度を決定するには

スクリーン ショットを生成したプログラム コード図 1 を代わりに使用するアルゴリズムに焦点を当てるのでこの記事では、存在するビットが長すぎます。完全なプログラム ソース、MSDN のコードのダウンロード サイトから利用可能です archive.msdn.microsoft.com/mag201207TestRun。この資料では、高度なプログラミング技術とニューラル ネットワークの基本的な理解が想定しています。2012 年 5 月号の MSDN Magazine でニューラル ネットワークの基礎を説明 (msdn.microsoft.com/magazine/hh975375)。

全体的なプログラムの構造

図 3 を実行しているこの例のプログラム構造を示します図 1。NeuralClassification 名前付き単一 c# コンソール アプリケーションを作成するのに Visual Studio 2010 を使用します。ソリューション エクスプ ローラー ウィンドウでは、自動的に Main を含むクラスの名前を変更よりわかりやすい NeuralClassificationProgram.cs にファイル Program.cs を変更しました。不要なを削除は、Visual Studio テンプレートによって生成され、System.IO 名前空間への参照を追加するステートメントを使用します。

図 3 分類プログラムの神経構造

using System;
using System.IO;
namespace NeuralClassification
{
  class NeuralClassificationProgram
  {
    static Random rnd = null;
    static void Main(string[] args)
    {
      try
      {
        Console.WriteLine("\nBegin Neural network classification\n");
        rnd = new Random(159); // 159 makes a nice example
        string dataFile = "..
\\..
\\colors.txt";
        MakeData(dataFile, 100);
        double[][] trainMatrix = null;
        double[][] testMatrix = null;
        MakeTrainAndTest(dataFile, out trainMatrix, out testMatrix);
        NeuralNetwork nn = new NeuralNetwork(4, 5, 3);
        double[] bestWeights = nn.Train(trainMatrix);
        nn.SetWeights(bestWeights);
        double accuracy = nn.Test(testMatrix);
        Console.WriteLine("\nEnd neural network classification\n");
      }
      catch (Exception ex)
      {
        Console.WriteLine("Fatal: " + ex.Message);
      }
    } // Main()
    static void MakeData(string dataFile, int numLines) { ...
}
    static void MakeTrainAndTest(string file, out double[][] trainMatrix,
      out double[][] testMatrix) { ...
}
  }
  class NeuralNetwork
  {
    // Class member fields here
    public NeuralNetwork(int numInput, int numHidden,
      int numOutput) { ...
}
    public void SetWeights(double[] weights) { ...
}
    public double[] ComputeOutputs(double[] currInputs) { ...
}
    private static double SigmoidFunction(double x) { ...
}
    private static double[] Softmax(double[] hoSums) { ...
}
    public double[] Train(double[][] trainMatrix) { ...
}
    private double CrossEntropy(double[][] trainData,
      double[] weights) { ...
}
    public double Test(double[][] testMatrix) { ...
}
  }
  public class Helpers
  {
    static Random rnd = new Random(0);
    public static double[][] MakeMatrix(int rows, int cols) { ...
}
    public static void ShuffleRows(double[][] matrix) { ...
}
    public static int IndexOfLargest(double[] vector) { ...
}
    public static void ShowVector(double[] vector, int decimals,
      bool newLine) { ...
}
    public static void ShowMatrix(double[][] matrix, int numRows) { ...
}
    public static void ShowTextFile(string textFile, int numLines) { ...
}
  }
  public class Particle
  {
    // Class member fields here
    public Particle(double[] position, double fitness,
      double[] velocity, double[] bestPosition,
     double bestFitness) { ...
}
    public override string ToString() { ...
}
  }
} // ns

Main メソッドを含むクラスに加え、プログラムその他の 3 つのクラスがあります。クラスの教師、完全接続のフィード フォワード型ニューラル ネットワークをカプセル化します。すべてのコアのプログラム ロジックが含まれているこのクラスでは。クラスのヘルパーには、六つのユーティリティ ルーチンが含まれます。クラスの粒子は粒子群最適化アルゴリズム、教師のクラスの列車メソッドで使用される、粒子オブジェクトを定義します。分類プログラムの特性の 1 つは、そこには多くの可能なプログラムの構造です。 ここで紹介した組織は、ちょうど 1 つの可能性です。

生データ ファイルを生成します。

ほとんどの分類シナリオで raw データのセットされますがすでにこの記事では MakeData メソッドを使用して、ダミーの生データを作成します。擬似コードでプロセスがここに:

create 43 arbitrary weights between -2.0 and +2.0
create a 4-5-3 neural network
load weights into the neural network
open a result file for writing
loop 100 times
  generate four random inputs x0, x1, x2, x3 between 1.0 and 9.0
  compute the y0, y1, y2 neural outputs for the input values
  determine largest of y0, y1, y2
  if y0 is largest write x0, x1, x2, x3, red
  else if y1 is largest write x0, x1, x2, x3, green
  else if y2 is largest write x0, x1, x2, x3, blue
end loop
close result file

ランダムなデータがある任意の分類のアプローチが効果的な方法だろうオフにないのではなく、ここでの目標は間違いなく 100 % の精度で分類可能ないくつかのデータを得ることです。他の言葉では、私はニューラル ネットワークを使用して、生データを作成して、上で起動し、そのデータを分類しようとするニューラル ネットワークを使用します。

トレーニングを作成して行列のテスト

分類の分析と、既存のデータのセットを実行するときは、提示された検証と呼ばれる、1 つの一般的なアプローチより大きいデータ セット (多くの場合 80%) にデータを分割するニューラル ネットワークと小さいデータ モデルをテスト用セット (20%) の訓練用です。トレーニングは、ニューラル ネットワークの重みといくつかのエラー値を最小限に抑えるバイアスを見つけることです。いくつかの測定の精度を使用しての訓練中に発見した最高の重みを持つニューラル ネットワークの評価テストを意味します。ここでは、メソッド MakeTrainAndTest をトレーニングとテストの行列作成も数値の入力データを正規化してカテゴリの出力データをエンコードします。擬似コードでは、メソッドはこのように動作します:

determine how many rows to split data into
create a matrix to hold all data
loop
  read a line of data
  parse each field
  foreach numeric input
    normalize input to between -1.0 and +1.0
  end foreach
  encode categorical output using 1-of-N
  place normalized and encoded data in matrix
end loop
shuffle matrix
create train and test matrices
transfer first 80% rows of matrix to train, remaining rows to test

メソッド シグネチャです。

static void MakeTrainAndTest(string file, out double[][] trainMatrix,
  out double[][] testMatrix)

ファイルと呼ばれるパラメーターを作成するには、生データ ファイルの名前です。パラメーター trainMatrix と testMatrix 出力パラメーターは、結果が配置される場所です。メソッドは始まります。

int numLines = 0;
FileStream ifs = new FileStream(file, FileMode.Open);
StreamReader sr = new StreamReader(ifs);
while (sr.ReadLine() != null)
  ++numLines;
sr.Close(); ifs.Close();
int numTrain = (int)(0.80 * numLines);
int numTest = numLines - numTrain;

このコードは、生データ ファイルをクリックし、[計算の線の線の数 80%、20% のデータ数構成カウントします。 ここでは、パーセンテージは、ハードコードされた; それらをパラメーター化することがあります。 次に、すべてのデータを保持するマトリックスが割り当てられます。

double[][] allData = new double[numLines][];
  for (int i = 0; i < allData.Length; ++i)
    allData[i] = new double[7];

7 つの列があります: 1 つの列の 4 つの数値の入力とカテゴリカル色変数の N 1 のエンコードされた値の 3 つの列。この例では、目標、色ができる 3 つのカテゴリの値のいずれかを予測するためには思い出してください: 赤、緑または青。この状況では 1 対 N の技術を使用したエンコード (0.0, 1.0, 0.0) として赤い (1.0, 0.0, 0.0)、緑、青 (0.0, 0.0, 1.0) のエンコーディングを意味します。ニューラル ネットワークは直接数値のみを扱うため数値カテゴリカル データをエンコードする必要があります。それは赤 1 などの単純なアプローチを使用して色をエンコード、2 緑と青の 3 は悪い考えが判明します。この悪い理由の説明は少し長いですが、この資料の範囲外です。

カテゴリカル出力データの 1 N エンコード ガイドラインの例外は、「男性」または「女性」などの 2 つだけの可能な値がある場合たとえば、0.0 女性男性と 1.0 の意味を意味するように、1 つの数値の出力値がある 1-of-(N-1) をエンコーディング使用できることです。

エンコーディングと、このコードによって実行されます。

tokens = line.Split(' ');
allData[row][0] = double.Parse(tokens[0]);
allData[row][1] = double.Parse(tokens[1]);
allData[row][2] = double.Parse(tokens[2]);
allData[row][3] = double.Parse(tokens[3]);
for (int i = 0; i < 4; ++i)
  allData[row][i] = 0.25 * allData[row][i] - 1.25;
if (tokens[4] == "red") {
  allData[row][4] = 1.0; 
  allData[row][5] = 0.0; 
  allData[row][6] = 0.0; }
else if (tokens[4] == "green") {
  allData[row][4] = 0.0; 
  allData[row][5] = 1.0; 
  allData[row][6] = 0.0; }
else if (tokens[4] == "blue") {
  allData[row][4] = 0.0; 
  allData[row][5] = 0.0; 
  allData[row][6] = 1.0; }

リコールは、このような生データの行:

8.0 5.0 9.0 5.0 緑

5 つのフィールドは、String.Split を使用して解析されます。経験では、数値の入力値は-1.0 ~ +1.0 にスケーリングされるときにほとんどの状況より良い結果を得られることを示しています。最初の 4 つの数値の入力の各 0.25 で乗算と 1.25 を差し引くことによって変換されます。ダミー データ ファイル内の数値の入力が 1.0 および 9.0 の間すべてであることを思い出してください。実際の分類問題を場合は、次の問題を生のデータをスキャンし、最小値と最大値を決定する必要があります。我々 は-1.0 を 1.0 と +1.0 9.0 に対応するように対応します。線形変換を行う (0.25 ここ) と切片 (-1.25 で) を見つけることを意味します。これらの値を計算することができます。

slope = 2 / (max value - min value) = 2 / (9.0 - 1.0) = 0.25
intercept = 1.0 - (slope * max value) = 1 - (0.25 * 9.0) = -1.25

数値の入力値の線形変換を実行するのに多くの選択肢が、ここで紹介したアプローチは簡単なほとんどの状況での良い出発点です。

4 つの数値の入力値が変換されている後、生データ ファイルからカラー値 N 1 エンコーディングを使用してエンコードされます。生データ ファイルでのすべての値が計算され、allData マトリックス内に配置すると、その表の行列の行をランダムに ShuffleRows ユーティリティ メソッドのヘルパー クラスを使用して再配置があります。AllData での行の順序をシャッフルした後、行列 trainMatrix と testMatrix のためのスペースを割り当て、それから allData の最初の numTrain 行 trainMatrix にコピーされ、allData の残りの numTest 行 testMatrix にコピーされます。

鉄道テスト アプローチの重要な設計代替 3 つセットに生データを分割するには: 列車、検証およびテストします。鉄道データと共にトレーニングを停止する場合に使用される、データを検証する、ニューラル ネットワークの重みの最適なセットを使用する勧めします。同様に、まとめてクロス検証技術と呼ばれるその他の方法があります。

ソフトマックス活性化関数

出力変数がカテゴリカルはニューラル ネットワークを用いた分類を実行するときは、トレーニングとニューラル ネットワークの予測精度を計算中にエラーを計算するニューラル ネットワーク出力活性化関数関係をかなりトリッキーです。カテゴリカル出力データ (色などの値の赤、緑、または青) は N 1 エンコーディングを使用してエンコードされている場合 — 例えば、(1.0 0.0 0.0) 赤 — ネットワークのトレーニング時のエラーを判断できるように 3 つの数値値を出力するニューラル ネットワークをします。しかし、ために出力するには、3 つの任意の数値値をしたくない、エラー期間を計算する方法は定かでないです。しかし、ニューラル ネットワークは 0.0 と 1.0 の合計が 1.0 の間のすべては、3 つの数値値を出力します。出力された値は、結局は、それエラー用語のトレーニング時に計算を容易に、確率として解釈できるし、テストするときの精度を計算します。ソフトマックス活性化関数の出力値をこの形式で出力します。ソフトマックス関数ニューラル隠し-出力合計し、神経の最後の出力値を返しますを受け入れる; このような実装できます。

private static double[] Softmax(double[] hoSums)
{
  double max = hoSums[0];
  for (int i = 0; i < hoSums.Length; ++i)
    if (hoSums[i] > max) max = hoSums[i];
  double scale = 0.0;
    for (int i = 0; i < hoSums.Length; ++i)
      scale += Math.Exp(hoSums[i] - max);
  double[] result = new double[hoSums.Length];
    for (int i = 0; i < hoSums.Length; ++i)
      result[i] = Math.Exp(hoSums[i] - max) / scale;
  return result;
}

原則としてソフトマックス関数 Exp 各出力に隠された合計を取り、それらを加算し、スケーリング係数、Exp のそれぞれの値を [分割によってスケーリング係数を計算します。たとえば、3 つの出力を非表示の合計は、(2.0、-1.0、4.0)。スケーリングの要因となる Exp(2.0) + Exp(-1.0) + Exp(4.0) 7.39 + 0.37 + 54.60 = 62.36 =。Exp (2.0) ソフトマックス出力値になる/62.36、Exp(-1.0)/62.36、Exp(4.0)/62.36) = (0.12, 0.01, 0.87)。最後の出力は 0.0 と 1.0 の間にすべてが 1.0 には、実際に合計し、最大出力/確率 (0.87)、最大出力を非表示 sum (4.0) を持ち、関係の 2 番目と 3 番目最大値と同様のさらなることに注意してください。

残念ながら、Exp 関数は非常に迅速に非常に大きくなり、算術オーバーフローを生成することができますのでソフトマックスのナイーブな実装に失敗することができます。上記の実装という事実は、Exp (a ・ b) 使用 Exp(a) =/Exp(b) のオーバーフローを回避する方法で出力を計算します。(2.0、-1.0、4.0) 入力としてを使用して実装の実行をトレースする場合、同じ (0.12、0.01、0.87) 得る前のセクションで説明したように出力します。

クロス エントロピー エラー

ニューラル ネットワークの学習の本質は、トレーニング セット内のデータの最小のエラーを生成、重みのセットを見つけることです。たとえば、正規化、エンコードされたトレーニング データの行とします (0.75-0.25 増減: 0.25-0.76% 0.00 1.00 0.00)。最初の 4 つの値正規化された入力され N 1 エンコーディングで緑の最後の 3 つの値を表すことを思い出してください。入力ニューラル ネットワークを通じて供給されると仮定します、いくつかの重みのセットとソフトマックス出力と読み込まれた今 (0.20 0.70 0.10)。この場合になる平方差の合計を使用するこのテスト ベクトルの計算エラーへの伝統的なアプローチである (0.00 ~ 0.20) ^2 + (1.00 - 0.70) ^2 + (0.00 - 0.10) ^2 = 0.14。しかし、ソフトマックス出力だったと思う (0.30 0.70 0.00)。このベクトルと以前のベクトルの両方緑の確率が 0.70 のための出力が緑であることを予測します。ただし、この 2 番目のベクトルの偏差の平方和 0.18 は、最初のエラーの用語から違うです。偏差平方和トレーニング エラーを計算するために使用することができますが、いくつかの研究の結果、代替手段を使用してクロス - ということを提案する­エントロピー エラーであることが望ましい。

原則として、クロス エントロピー エラー指定されたニューラル ネットワーク出力ベクトル v とテスト ベクトル t v ベクトルの各コンポーネントと対応する t ベクトルの要素の積の負の合計を決定することによって計算される出力します。いつものように、この最高の例で理解されています。テスト ベクトルの場合 (0.75-0.25 0.25 の増減:-0.76% 0.00 1.00 0.00) とニューラル ネットワークの出力は対応するソフトマックス (0.20 0.70 0.10)、クロス エントロピー エラー-1 です ※ (0.00 ※ Log(0.20)) + (1.00 ※ Log(0.70)) + (0.00 ※ Log(0.10)) =-1 ※ (0 +-0.15 + 0) = 0.15。N 1 エンコーディングを使用するとすべてが、和の条件の 1 つは常にゼロすることに注意してください。クロス エントロピー エラー全体のトレーニング セットのすべてのテスト ベクトルのクロス エントロピーや各テスト ベクトルの平均クロス エントロピーの合計として計算されます。クロス エントロピー エラーの実装に記載されている図 4

図 4 クロス エントロピー エラー

private double CrossEntropy(double[][] trainData, 
  double[] weights)
{
  this.SetWeights(weights);
  double sce = 0.0; // sum of cross entropies
  for (int i = 0; i < trainData.Length; ++i)
  {
    double[] currInputs = new double[4];
    currInputs[0] = trainData[i][0];
    currInputs[1] = trainData[i][1];
    currInputs[2] = trainData[i][2];
    currInputs[3] = trainData[i][3];
    double[] currExpected = new double[3];
    currExpected[0] = trainData[i][4];
    currExpected[1] = trainData[i][5];
    currExpected[2] = trainData[i][6];
    double[] currOutputs = this.ComputeOutputs(currInputs);
    double currSum = 0.0;
    for (int j = 0; j < currOutputs.Length; ++j)
    {
      if (currExpected[j] != 0.0)
        currSum += currExpected[j] * Math.Log(currOutputs[j]);
    }
    sce += currSum; // accumulate
  }
  return -sce;
}

ニューラル ネットワークの訓練

トレーニング データに最も一致する (または、同等、最小のクロス エントロピー エラーを生成) 重みのセットを検索するには、ニューラル ネットワーク分類モデルの訓練するには、何とおりの方法があります。高い抽象化レベルでは、ニューラル ネットワークの訓練にこのようになります:

create an empty neural network
loop
  generate a candidate set of weights
  load weights into neural network
  foreach training vector
    compute the neural output
    compute cross-entropy error
    accumulate total error
  end foreach
  if current weights are best found so far
    save current weights
  end if
until some stopping condition
return best weights found

これまでに、ニューラル ネットワークのトレーニングに使用方法の最も一般的なバックプロパゲーションと呼ばれます。この手法は数多くの研究記事の件名です — 多く、あなたはニューラル ネットワークの分類のフィールドに新しいしている場合は、ことは簡単に、実際には、その逆伝搬はトレーニングに使用のみの手法を信じるために導かれるように。最高のセットをニューラル ネットワークの重みの推定数値の最小化問題であります。逆伝播を使用する 2 つの共通の選択肢 (進化的最適化アルゴリズムとも呼ばれます) 実数値遺伝的アルゴリズムを使用して、粒子群最適化を使用します。各手法の長所と短所があります。示すプログラム図 1 粒子群最適化を使用します。2012 年 6 月号の MSDN Magazine の進化的最適化アルゴリズムを記述する (msdn.microsoft.com/magazine/jj133825) と粒子の最適化は、2011 年 8 月号 (msdn.microsoft.com/magazine/hh335067)。

ニューラル ネットワークの学習を停止するタイミングを決定する多くの技術があります。単に、トレーニング アルゴリズムをクロス エントロピー エラーがほぼゼロまでを実行できる場合はほぼ完璧なフィットを示す危険結果の重みは、トレーニング データ over-fit だろうし、重みが悪い、トレーニング セットのではない任意のデータを分類するニューラル ネットワークを作成しますが。また、モデル over-fitting をクロス エントロピー エラーに変更はありませんまでの訓練が簡単に可能性があります。単純なアプローチと 1 つの例のプログラムでは、使用はトレーニングをイテレーションの固定数を制限します。ほとんどの場合はソース データ セット鉄道検証テスト セットに分割する over-fitting を避けるために、多くのより良い戦術です。通常これら 3 つのデータ セットは 60 %、20 %、20 % のソース データをそれぞれ使用します。技術エラー説明した、トレーニング セットを計算しますが、メイン ループの各イテレーション後テクニック クロス エントロピー エラー検証データ セットに計算します。クロス エントロピー エラー検証セットに一貫して増加に表示する起動すると、データを over-fit にトレーニング アルゴリズムを始めている、良いチャンスがあるし、トレーニングを停止する必要があります。他の多くの停止テクニックが可能です。

ニューラル ネット識別器の評価

ニューラル ネットワーク分類モデルの訓練されており最高の重量と偏見のセットを生産している後、次のステップをどのように正確な (モデル ニューラル ネットワークによる最高の重りのセットのこと)、結果のモデル試験データを判断することです。クロス エントロピー エラーの偏差平方和などの対策を使用することができますが、精度の合理的な測定モデルによって正しい予測の割合だけです。もう一度、精度を測定するためのいくつかの方法が何の勝者は、かかるすべてのアプローチと呼ばれるを使用する簡単なテクニックであります。いつものように、技術最高例での説明です。テスト ベクトルであると仮定 (-1.00 1.00 増減: 0.25-0.76% 1.00 0.00 0.00)、予測データの最初のセットに示すように図 1。最高の重みを設定すると、ニューラル ネットワークの予測ソフトマックスの出力 (0.9 0.1 0.0)。各出力を確率として解釈され、確率が最も高い 0.9 予測出力として考えることができる場合 (1 0 0) 正しい予測モデルになりますので。別の言い方をすれば、勝者がすべて技術は、ニューラル ネットワーク出力コンポーネントの最大値を決定します、そのコンポーネントは、1 とすべて他コンポーネント 0、なります、トレーニング ベクトルの実際のデータと結果を比較します。第 3 セットの精度解析データの図 1、テスト ベクトル (増減:-0.76% 0.75 0.25-0.75 0.0 0.0 1.0)。実際の出力データ (0.0 0.0 1.0)、青に対応します。予測の出力です (0.3 0.6 0.1)。モデル予測最大のコンポーネントは 0.6 です (0 1 0)、緑に対応します。モデルを正しく予測をしました。

まとめ

ニューラル ネットワークによる分類は、重要な魅惑的な複雑なトピックです。ここで示す例ニューラル ネットワーク分類の実験のための堅固な基盤を与える必要があります。しかし、この 1 つだけの非常に特定のニューラル ネットワーク分類シナリオ説明します — カテゴリカル出力変数の数値の入力変数 — と単に出発点です。その他のシナリオは、わずかに異なる技術が必要です。たとえば、カテゴリ変数入力データが含まれる場合は、N 1 カテゴリカル出力変数のようなエンコーディングを使用するエンコードと期待するかもしれない。このような場合は、ただし、入力データ 1-of-(N-1) テクニックを使用してエンコードする必要があります。ニューラル ネットワークを用いた分類についての詳細を知りたい場合は、7 faqs.org で利用可能なニューラル ネットワークの Faq のセットを推奨します。これらの Faq へのリンクを移動する傾向があるが、それらは簡単にインターネット検索を見つけることができる必要があります。

Dr.James McCaffrey作品のボルト情報科学株式会社は、彼は Microsoft レドモンド、ワシントン州で、キャンパスで働くソフトウェア エンジニアの技術トレーニングを管理します。궞귢귏궳궸갂Internet Explorer갂MSN 긖??궶궵궻븸릶궻?귽긏깓?긲긣맶뷼궸귖똤귦궯궲궖귏궢궫갃McCaffrey は、「.net Test Automation Recipes」』 (Apress、2006) の著者です。彼に到達することができます jmccaffrey@volt.com または jammc@microsoft.com

この記事のレビューは次のマイクロソフト技術エキスパートのおかげで:Matthew Richardson