誰かが libSVM ( https://www.csie.ntu.edu.tw/~cjlin/libsvm/ ) に精通している場合、私は libSVMsharp を使用していますが、これは同じことであり、C# ラッパーであると思います。
彼らの github では、SVM を使用して単純な分類を作成する方法の次の例を示しています。
SVMProblem problem = SVMProblemHelper.Load(@"dataset_path.txt");
SVMProblem testProblem = SVMProblemHelper.Load(@"test_dataset_path.txt");
SVMParameter parameter = new SVMParameter();
parameter.Type = SVMType.C_SVC;
parameter.Kernel = SVMKernelType.RBF;
parameter.C = 1;
parameter.Gamma = 1;
SVMModel model = SVM.Train(problem, parameter);
double target[] = new double[testProblem.Length];
for (int i = 0; i < testProblem.Length; i++)
target[i] = SVM.Predict(model, testProblem.X[i]);
double accuracy = SVMHelper.EvaluateClassificationProblem(testProblem, target);
パスを指定してトレーニングデータをロードし、テストデータと同じようにすることはすべて完全に理にかなっています...まあ、ここで問題に遭遇します。
私が取り組んでいるより大きなプロジェクトに実装する前に、これがどのように機能するかを完全に理解するために、C# でこれをテストしたかったのです。私は Program.cs という小さなプログラムを持っています (非常に独創的です)。同じフォルダーに、train.txt と test.txt があります。そのため、Program.cs、train.txt、および test.txt を含むフォルダーと、Visual Studio でプロジェクトを作成するときに作成されるその他の標準的なものがあります。
したがって、私のコードのスニペットは次のようになります。
SVMProblem trainingSet = SVMProblemHelper.Load(@"train.txt");
SVMProblem testSet = SVMProblemHelper.Load(@"test.txt");
trainingSet = trainingSet.Normalize(SVMNormType.L2);
testSet = testSet.Normalize(SVMNormType.L2);
等々。ただし、これを実行すると、基本的に変数「trainingSet」が null であると表示されます。これは、SVMProblemHelper が実際に train.txt を読み込めなかったためです。
これには明白な解決策があるように感じますが、完全に迷っています。ここで何が問題なのか完全にはわかりません。SVMProblemHelper.Load 関数では、基本的に、問題のファイルが見つからない場合、変数 (この場合は trainingSet) を null に設定すると述べています。しかし、どうしてファイルが見つからないのでしょうか? .cs ファイルと同じディレクトリにあります。何が欠けているのかわかりませんが、わかりません。
どんな助けでも大歓迎です!