• SVM参数解析


    一、Opencv中的核函数定义(4种):

    1、CvSVM::LINEAR : 线性内核,没有任何向映射至高维空间,线性区分(或回归)在原始特点空间中被完成,这是最快的选择。

    2、CvSVM::POLY : 多项式内核:

    3、CvSVM::RBF : 基于径向的函数,对于大多半景象都是一个较好的选择:

    4、CvSVM::SIGMOID : Sigmoid函数内核:

     

    二、svm_type:指定SVM的类型(5种):

     1、CvSVM::C_SVC : C类支撑向量分类机。 n类分组 (n≥2),容许用异常值处罚因子C进行不完全分类。

     2、CvSVM::NU_SVC : 类支撑向量分类机。n类似然不完全分类的分类器。参数为庖代C(其值在区间【0,1】中,nu越大,决定计划鸿沟越腻滑)。

     3、CvSVM::ONE_CLASS : 单分类器,所有的练习数据提取自同一个类里,然后SVM建树了一个分界线以分别该类在特点空间中所占区域和其它类在特点空间中所占区域。

     4、CvSVM::EPS_SVR : 类支撑向量回归机。练习集中的特点向量和拟合出来的超平面的间隔须要小于p。异常值处罚因子C被采取。

     5、CvSVM::NU_SVR : 类支撑向量回归机。 庖代了 p

      1 #include <cv. 2 #include <highgui.h>  

     3 #include <ml.h>  
     4 #include <cxcore.h>  
     5 
     6 #include <iostream>  
     7 using namespace std;
     8 
     9 int main()
    10 {
    11     // step 1:  
    12     //训练数据的分类标记,即4类  
    13     float labels[16] = { 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0 };
    14     CvMat labelsMat = cvMat(16, 1, CV_32FC1, labels);
    15     //训练数据矩阵  
    16     float trainingData[16][2] = { { 0, 0 }, { 4, 1 }, { 4, 5 }, { -1, 6 }, { 3, 11 }, { -2, 10 }, { 4, 30 }, { 0, 25 }, { 10, 13 }, { 15, 12 }, { 25, 40 }, { 11, 35 }, { 8, 1 }, { 9, 6 }, { 15, 5 }, { 20, -1 } };
    17     CvMat trainingDataMat = cvMat(16, 2, CV_32FC1, trainingData);
    18 
    19     // step 2:  
    20     //训练参数设定  
    21     CvSVMParams params;
    22     params.svm_type = CvSVM::C_SVC;                 //SVM类型  
    23     params.kernel_type = CvSVM::LINEAR;             //核函数的类型  
    24 
    25     //SVM训练过程的终止条件, max_iter:最大迭代次数  epsilon:结果的精确性  
    26     params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 100, FLT_EPSILON);
    27 
    28     // step 3:  
    29     //启动训练过程  
    30     CvSVM SVM;
    31     SVM.train(&trainingDataMat, &labelsMat, NULL, NULL, params);
    32 
    33     // step 4:  
    34     //使用训练所得模型对新样本进行分类测试  
    35     for (int i = -5; i<15; i++)
    36     {
    37         for (int j = -5; j<15; j++)
    38         {
    39             float a[] = { i, j };
    40             CvMat sampleMat;
    41             cvInitMatHeader(&sampleMat, 1, 2, CV_32FC1, a);
    42             cvmSet(&sampleMat, 0, 0, i);                                        // Set M(i,j)  
    43             cvmSet(&sampleMat, 0, 1, j);                                        // Set M(i,j)  
    44             float response = SVM.predict(&sampleMat);
    45             cout << response << " ";
    46         }
    47         cout << endl;
    48     }
    49 
    50     // step 5:  
    51     //获取支持向量  
    52     int c = SVM.get_support_vector_count();
    53     cout << endl;
    54     for (int i = 0; i<c; i++)
    55     {
    56         const float* v = SVM.get_support_vector(i);
    57         cout << *v << " ";
    58     }
    59     cout << endl;
    60 
    61     system("pause");
    62     return 0;
    63 }
    三、InitMatHeader初始化矩阵头

    CvMat* cvInitMatHeader( CvMat* mat, int rows, int cols, int type,void* data=NULL, int step=CV_AUTOSTEP );

    mat
        指针指向要被初始化的矩阵头. 
    rows
        矩阵的行数. 
    cols
        矩阵的列数. 
    type
        矩阵元素类型. 
    data
        可选的,将指向数据指针分配给矩阵头. 
    step
       
     排列后的数据的整个行宽,默认状态下,使用STEP的最小可能值。也就是说默认情况下假定矩阵的行与行之间无隙.

    数 cvInitMatHeader 初始化已经分配了的 CvMat 结构. 它可以被OpenCV矩阵函数用于处理原始数据。

    
    

    例如, 下面的代码计算通用数组格式存贮的数据的矩阵乘积.

    
    

    计算两个矩阵的积

    
    

    double a[] = { 1, 2, 3, 4,
                   5, 6, 7, 8,
                   9, 10, 11, 12 };

    
    

    double b[] = { 1, 5, 9,
                   2, 6, 10,
                   3, 7, 11,
                   4, 8, 12 };

    
    

    double c[9];
    CvMat Ma, Mb, Mc ;

    
    

    cvInitMatHeader( &Ma, 3, 4, CV_64FC1, a );
    cvInitMatHeader( &Mb, 4, 3, CV_64FC1, b );
    cvInitMatHeader( &Mc, 3, 3, CV_64FC1, c );

    
    

    cvMatMulAdd( &Ma, &Mb, 0, &Mc );
    // c 数组存贮 a(3x4) 和 b(4x3) 矩阵的积

     
     
     
  • 相关阅读:
    uitableview 和UISearchBar 下拉提示结合使用
    新浪微博的布局
    ios中键盘处理源码
    JavaScript中十种一步拷贝数组的方法
    小程序图片 mode 设置为 widthFix 图片显示瞬间竖向拉伸变形闪烁
    微信小程序单行和多行省略号
    -webkit-line-clamp 多行文字溢出...
    微信小程序 使用async await
    CSS currentColor 变量的使用
    wn.run万能命令
  • 原文地址:https://www.cnblogs.com/hsy1941/p/7908813.html
Copyright © 2020-2023  润新知