1

私はずっと前にライブラリ Encog を使用してバックプロパゲーション ニューラル ネットワークの予測システムに取り組んできましたが、現在はサポート ベクター マシンの分野を研究しており、NN よりもはるかに効率的であることがわかりました。私の目的はテストすることです。予測が SVM でどのように動作し、それを BPN と比較します。

2 つの二次元配列があります。1 つの配列は INPUT で、もう 1 つは IDEAL です。配列の各行は 3 つの要素 (1/9 から 9 までの実数) で構成されます。対応する IDEAL を含む INPUT には 800 行あります。また、200 行の TEST セット用に別の 2 つの配列があります。

BPN では問題はありません。入力層に 3 つのニューロン、中間層に 50 のニューロン、出力層に 3 つのニューロンを使用してネットワークをトレーニングし (0.01 未満のエラーで 5 分で収束します)、テストは正常に動作します。

一方、SVM では、少し問題があります。ネットワークをトレーニングし、3 秒で収束し、正常に動作しているように見えますが、データをテストすると、BPN の 3 つの asi ではなく、行ごとに出力で 1 つの要素しか予測されません。
何が間違っているのかわかりません。単純化されたコードと実行の出力をコピーします。

ジャバコード

/* SVM Structure */
SVM svm = new SVM(3, true); 

/* Training Set */
BasicMLDataSet trainingSet = new BasicMLDataSet(INPUT_ARRAY, IDEAL_ARRAY);

/* Train SVM */
SVMSearchTrain train = new SVMSearchTrain(svm, trainingSet);

int epoch = 1;
do {
   train.iteration();
   System.out.println("Epoch #" + epoch + " Error:" + train.getError());
   epoch++;
} while(train.getError() > 0.01);

// Test the SVM
BasicMLDataSet testSet = new BasicMLDataSet(INPUT_TEST_ARRAY, IDEAL_TEST_ARRAY);
//Normalize/Denormalize class -> 0.11111111111111111 - 9 into 0 - 1
NormalizedField norm = new NormalizedField(NormalizationAction.Normalize, null,9,0.11111111111111111,1,0);

for(MLDataPair dataPair: testSet ) {
   final MLData output = svm.compute(dataPair.getInput());
   System.out.print("Input: [ ");           
   int elementos = (orden*(orden-1))/2;
   for(int i=0; i<elementos; i++){
       System.out.print(norm.deNormalize(dataPair.getInput().getData(i))+" ");
   }
   System.out.print("] - ");
   System.out.print("Ideal: [ ");           
   for(int i=0; i<elementos; i++){
       System.out.print(norm.deNormalize(dataPair.getIdeal().getData(i))+" ");
   }
   System.out.print("] - ");
   System.out.print("Ideal: [ "); 
   for(int i=0; i<output.size();i++){
      System.out.print(norm.deNormalize(output.getData(0))+" ");
   }
   System.out.print("]\n");         
}

Encog.getInstance().shutdown();

出力

Epoch #1 Error:0.0040788759553631255
Input: [ 0.1111111111111111 0.14285714285714285 4.0 ] - Ideal: [ 0.1111111111111111 0.16666666666666666 4.0 ] - Actual: [ -0.41164113104867955 ]
Input: [ 0.125 0.125 4.0 ] - Ideal: [ 0.125 0.5 3.0 ] - Actual: [ -0.4085939985232357 ]
Input: [ 1.0 1.0 0.25 ] - Ideal: [ 1.0 0.5 0.25 ] - Actual: [ 1.6604401446928032 ]
.
.
.
Input: [ 8.0 4.0 0.16666666666666666 ] - Ideal: [ 8.0 4.0 0.2 ] - Actual: [ 7.545661375461256 ]

読んでくれてありがとう!

4

1 に答える 1

1

これは回帰問題であり、分類ではなく SVM からの数値であると思います。

ニューラル ネットワークは、複数の出力を持つことができるという点で、モデルの中でやや独特です。回帰に使用する場合、SVM には単一の出力があります。SVM を使用して複数のクラスに分類できますが、回帰の場合、単一の出力に制限されます。

予測しようとしている 2 つの異なる数値がある場合は、2 つの SVM を使用する必要があります。複数のクラスに分類したい場合は、ここに詳細があります: http://www.heatonresearch.com/content/encog_svm_multiclass.html

于 2014-05-29T16:19:08.940 に答える