OpenCV中SVM的参数具体怎么设置,哪位大侠能详细讲解一下?

2024-12-02 02:24:04
推荐回答(1个)
回答1:

CvSVMParams::CvSVMParams() :
svm_type(CvSVM::C_SVC), kernel_type(CvSVM::RBF), degree(0),
gamma(1), coef0(0), C(1), nu(0), p(0), class_weights(0)

SVM种类:CvSVM::C_SVC C_SVC该类型可以用于n-类分类问题 (n>=2),其重要特征是它可以处理非完美分类
的问题 (及训练数据不可以完全的线性分割)。它是最常被使用的SVM类型。
CvSVM::C_SVC - n(n>=2)分类器,允许用异常值惩罚因子C进行不完全分类。
CvSVM::NU_SVC - n类似然不完全分类的分类器。参数nu取代了c,其值在区间【0,1】中,nu越大,决策边界越平滑。
CvSVM::ONE_CLASS - 单分类器,所有的训练数据提取自同一个类里,然後SVM建立了一个分界线以分割该类在特征空间中所占区域和其它类在特征空间中所占区域。
CvSVM::EPS_SVR - 回归。 训练集中的特征向量和拟合出来的超平面的距离需要小于p。异常值惩罚因子C被采用。
CvSVM::NU_SVR - 回归;nu 代替了p
Kernel的种类:
CvSVM::LINEAR - 表示不需要进行映射,没有任何向映射至高维空间,线性区分(或回归)在原始特征空间中被完成,这是最快的选择。 d(x,y) = x?y == (x,y)
CvSVM::POLY - 多项式核: d(x,y) = (gamma*(x?y)+coef0)degree
CvSVM::RBF - 径向基,对于大多数情况都是一个较好的选择:d(x,y) = exp(-gamma*|x-y|2)
CvSVM::SIGMOID - sigmoid函数被用作核函数: d(x,y) = tanh(gamma*(x?y)+coef0)
CvSVM::RBF,貌似比 CvSVM::LINER 正确率高
degree:内核函数(POLY)的参数degree。
10.0(此次不使用)
gamma:内核函数(POLY/ RBF/ SIGMOID)的参数\gamma。
8.0
coef0:内核函数(POLY/ SIGMOID)的参数coef0
1.0(此次不使用)
C: Cvalue – SVM类型(C_SVC/ EPS_SVR/ NU_SVR)的参数C。
10.0
nu: SVM类型(NU_SVC/ ONE_CLASS/ NU_SVR)的参数 \nu。
0.5(此次不使用)
p:SVM类型(EPS_SVR)的参数 \epsilon。
0.1(此次不使用)
class_weights: – C_SVC中的可选权重,赋给指定的类,乘以C以后变成 class_weight_si * C。所以这些权重影响不同类别的错误分类惩罚项。权重越大,某一类别的误分类数据的惩罚项就越大。
term_crit: – SVM的迭代训练过程的中止条件,解决部分受约束二次最优问题。您可以指定的公差和/或最大迭代次数。
然后对训练数据正规化处理,并放在CvMat型的数组里。