2017-05-11 3 views
1

ダイナミックタイムワーピングとsvmを組み合わせて、分類子として使用したいと考えています。私はアコード.NETを使用しますが、間違って何かが私のコードであり、ここに私のコードです:Accord.Net Multiclass SVM DynamicTimeWarping例外

 double[][] inputs = new double[100][]; 
     for(int i = 0; i < linesX.Length; i++) 
     { 
      inputs[i] = Array.ConvertAll(linesX[i].Split(','), Double.Parse); 
     } 
     int[] outputs = Array.ConvertAll(linesY, s => int.Parse(s));  

     // Create the Sequential Minimal Optimization learning algorithm 
     var smo = new MulticlassSupportVectorLearning<DynamicTimeWarping>() 
     { 
      // Set the parameters of the kernel 
      Kernel = new DynamicTimeWarping(alpha: 1, degree: 1) 
     }; 

     // And use it to learn a machine! 
     var svm = smo.Learn(inputs, outputs); 

     // Now we can compute predicted values 
     int[] predicted = svm.Decide(inputs); 

     // And check how far we are from the expected values 
     double error = new ZeroOneLoss(outputs).Loss(predicted); 

私の入力は(100800)は、出力である(100,1)、このラインで例外が存在します:var svm = smo.Learn(inputs, outputs);例外は“System.AggregateException” happens in Accord.MachineLearning.dllです。私のコードに問題があります

答えて

1

正しいセットアップHEREを参照してください。 Learnerプロパティを割り当てていません。

は、ここではいくつかのランダムな入力データを使用して変更したコードです:

output = 
2 3 1 2 1 2 2 3 5 1 

predicted = 
2 1 1 2 1 2 2 2 2 1 

error = 0.3 
:このような何かを生成します

static void Main(string[] args) 
    { 
     Random r = new Random(); 

     double[][] inputs = new double[10][]; 
     int[] outputs = new int[10]; 

     for (int i = 0; i < 10; i++) 
     { 
      inputs[i] = new double[8]; 
      for (int j = 0; j < 8; j++) 
      { 
       inputs[i][j] = r.Next(1, 100); 
      } 
      outputs[i] = r.Next(1, 6); 
     } 

     var smo = new MulticlassSupportVectorLearning<DynamicTimeWarping>() 
     { 
      Learner = (param) => new SequentialMinimalOptimization<DynamicTimeWarping>() 
      { 
       Kernel = new DynamicTimeWarping(alpha: 1, degree: 1), 
      } 
     }; 

     var svm = smo.Learn(inputs, outputs); 

     int[] predicted = svm.Decide(inputs); 

     double error = new ZeroOneLoss(outputs).Loss(predicted); 

     Console.WriteLine(); 
     Console.WriteLine("output = \n{0}", Matrix.ToString(outputs)); 
     Console.WriteLine(); 
     Console.WriteLine("predicted = \n{0}", Matrix.ToString(predicted)); 
     Console.WriteLine(); 
     Console.WriteLine("error = {0}", error); 
     Console.ReadLine(); 
    } 

関連する問題