Weka の 3.6.9 SMOでデータセットをテストしました(何も変更せず、標準のパラメーターを使用しただけです)。素晴らしい結果が得られました。OpenCV のSVM (Android 用)で同じ SMO を構成しようとしましたが、良い結果が得られません。Weka にある標準の SMO と同じ方法で、自分のアプリで OpenCV の SVM を構成およびトレーニングしたいのですが、誰か助けてもらえますか?
Weka の標準 SMO構成 (10 分割交差検証あり):
weka.classifiers.functions.SMO -C 1.0 -L 0.001 -P 1.0E-12 -N 0 -V -1 -W 1 -K "weka.classifiers.functions.supportVector.PolyKernel -C 250007 -E 1.0"
多項式カーネル (Weka SMO の場合) は次のとおりです: K(x, y) = (x, y)^pまたはK(x, y) = ((x, y)+1)^p、p = 1 .
ポリカーネルに関する OpenCV のドキュメントの式は次のとおりです: K(x,y) = (ガンマ*(x,y)+ coef0 )^ degree、ガンマ> 0。
OpenCV4Androidで同じように設定しようとしている私のコード:
CvSVMParams params = new CvSVMParams();
params.set_svm_type(CvSVM.C_SVC);
params.set_kernel_type(CvSVM.POLY);
params.set_C(1.0);
params.set_degree(1.0);
params.set_coef0(0.0);
params.set_gamma(1.0);
params.set_term_crit(new TermCriteria(TermCriteria.EPS, 10000, 1e-12));
CvSVM svm = new CvSVM();
// n-fold cross validation
int kFolds = 10;
CvParamGrid C = new CvParamGrid();
CvParamGrid p = new CvParamGrid();
CvParamGrid nu = new CvParamGrid();
CvParamGrid gamma = new CvParamGrid();
gamma.set_step(0.0);
CvParamGrid coeff = new CvParamGrid();
CvParamGrid degree = new CvParamGrid();
svm.train_auto(trainData, responses, new Mat(), new Mat(), params,
kFolds, C, gamma, p, nu, coeff, degree, false);
前もって感謝します!