2017-05-11 13 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(); 
    }