Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
OpenCV4android-配置SVM';使用与Weka相同的参数进行培训';s SMO_Android_Opencv_Weka_Svm - Fatal编程技术网

OpenCV4android-配置SVM';使用与Weka相同的参数进行培训';s SMO

OpenCV4android-配置SVM';使用与Weka相同的参数进行培训';s SMO,android,opencv,weka,svm,Android,Opencv,Weka,Svm,我在Weka的3.6.9中测试了一个数据集(没有改变任何东西,只是使用了标准参数),得到了很好的结果。我尝试在OpenCV中配置相同的SMO(Android版),但没有得到好的结果。我想在我的应用程序中配置和训练OpenCV的SVM,就像在Weka中找到的标准SMO一样,有人能帮我吗 Weka的标准SMO配置(具有10倍交叉验证): 多项式核(在Weka-SMO中)如下所示:K(x,y)=(x,y)^p或K(x,y)=(x,y)+1)^p,其中p=1 OpenCV文档中关于polykernel的

我在Weka的3.6.9中测试了一个数据集(没有改变任何东西,只是使用了标准参数),得到了很好的结果。我尝试在OpenCV中配置相同的SMO(Android版),但没有得到好的结果。我想在我的应用程序中配置和训练OpenCV的SVM,就像在Weka中找到的标准SMO一样,有人能帮我吗

Weka的标准SMO配置(具有10倍交叉验证):

多项式核(在Weka-SMO中)如下所示:K(x,y)=(x,y)^p或K(x,y)=(x,y)+1)^p,其中p=1

OpenCV文档中关于polykernel的公式如下: K(x,y)=(gamma*(x,y)+coef0)^度,gamma>0

现在,我的代码尝试在OpenCV4Android中以同样的方式进行配置:


提前谢谢

您想查看此处找到的Weka SMO的默认设置

看看你的代码

参数集_coef0(1.0)

我们应该做到这一点

更详细地说,要使LibSVM(或任何基于LibSVM的库,如openCV MLL)产生相同的结果,您需要对内核进行以下设置:

您应该使用C-SVC(默认值),因此没有任何更改。 核:多核代替rbf

请注意SMO和LibSVM的不同之处,LibSVM的多核是(gamma+系数)^exp(或类似的值),而SMO有(+1)^exp

因此,您显然需要以下设置: 指数:1 伽马:1.0 系数:1.0


我做了两次测试,这就足够了。如果没有,您可能还需要调整其他设置以匹配默认设置

如果
p=1
基本上使用的是线性内核。在这种情况下,最好远离多项式。
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"
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);