OpenCV SVM
模型参数配置
- Types
1
2
3
4
5
6
7
8
9
10
11
12
13
14enum cv::ml::SVM::Types { C_SVC=100, //!< C-Support向量分类。n类分类(n≥2),允许对异常值使用惩罚乘子C进行不完全分类。 NU_SVC=101, //!< ν支持向量分类。n类分类,可能不完全分离。参数ν(范围0-1、值越大,决策边界越平滑),用来代替C。 ONE_CLASS=102, //!< 分布估计(一类支持向量机)。所有的训练数据都来自同一类,支持向量机建立了一个边界,将类从特征空间的其余部分分离出来。 EPS_SVR=103, //!< ϵ支持向量回归。从训练集到拟合超平面的特征向量之间的距离必须小于p。对于异常值,使用惩罚乘法器C。 NU_SVR=104 //!< ν支持向量回归。ν代替p。 }
- KernelTypes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18enum cv::ml::SVM::KernelTypes { CUSTOM=-1, //!< 当设置了自定义内核时,由SVM::getKernelType返回; LINEAR=0, //!< 线性内核。相当于不进行映射处理,在原始特征空间中进行线性判别(或回归)。这是运行速度最快的选择,但是拟合程度不高; POLY=1, //!< 多项式的内核 ;参数:[GAMMA,COEF,DEGREE] RBF=2, //!< 径向基函数(RBF)是一种很好的选择;参数:[GAMMA] SIGMOID=3, //!< Sigmoid kernel;参数:[GAMMA,COEF] CHI2=4, //!< Chi2指数核,类似于RBF核;参数:[GAMMA] INTER=5 //!< 直方图相交的内核。一个快速的内核。 }
LINEAR: K ( x i , x j ) = x i T x j K(x_i,x_j)=x_i^Tx_j K(xi,xj)=xiTxj
POLY: K ( x i , x j ) = ( γ x i T x j + c o e f 0 ) d e g r e e K(x_i,x_j)=(γx_i^Tx_j+coef0)^{degree} K(xi,xj)=(γxiTxj+coef0)degree
RBF: K ( x i , x j ) = e − γ ∣ ∣ x i − x j ∣ ∣ 2 K(x_i,x_j)=e^{-γ||x_i-x_j||^2} K(xi,xj)=e−γ∣∣xi−xj∣∣2, γ > 0 γ>0 γ>0
SIGMOID: t a n h ( γ x i T x j + c o e f 0 ) tanh(γx_i^Tx_j+coef0) tanh(γxiTxj+coef0)
CHI2: K ( x i , x j ) = e − γ χ 2 ( x i , x j ) K(x_i,x_j)=e^{-γchi^2(x_i,x_j)} K(xi,xj)=e−γχ2(xi,xj), χ 2 ( x i , x j ) = ( x i − x j ) 2 / ( x i + x j ) , γ > 0 chi^2(x_i,x_j)=(x_i-x_j)^2/(x_i+x_j),γ>0 χ2(xi,xj)=(xi−xj)2/(xi+xj),γ>0
INTER: K ( x i , x j ) = m i n ( x i , x j ) K(x_i,x_j)=min(x_i,x_j) K(xi,xj)=min(xi,xj)
- ParamTypes
1
2
3
4
5
6
7
8
9
10enum cv::ml::SVM::ParamTypes { C=0, GAMMA=1, P=2, NU=3, COEF=4, DEGREE=5 }
- 创建空的模型
使用StatModel::train来训练模型。由于SVM有几个参数,您可能希望为您的问题找到最佳参数,这可以使用SVM::trainAuto完成。
1
2static Ptr<SVM> cv::ml::SVM::create()
- 从文件加载并创建序列化的支持向量机
使用SVM::save序列化并存储SVM到磁盘。通过调用这个函数并指定文件的路径,再次从这个文件加载SVM。
1
2
3
4
5static Ptr<SVM> cv::ml::SVM::load(const String& filepath) //!< 参数 //!< filepath 序列化支持向量机的路径
- 支持向量机优化问题的参数:C
类别数量,支持向量机::C_SVC、支持向量机::EPS_SVR或支持向量机::NU_SVR。默认值为0。
1
2virtual void cv::ml::SVM::setC(double val)
- 支持向量机::C_SVC问题中的可选权值,分配给特定的类
它们乘以 C C C,则类 i i i的参数 C C C就变成了 c l a s s W e i g h t s ( i ) ∗ C classWeights(i) *C classWeights(i)∗C,因此这些权重影响不同类的误分类惩罚。权重越大,对应类数据的错误分类惩罚越大。默认值为空Mat。
1
2virtual void cv::ml::SVM::setClassWeights(const cv::Mat& val)
- 核函数的参数:coef0
对于SVM::POLY或SVM::SIGMOID。默认值为0。
1
2virtual void cv::ml::SVM::setCoef0(double val)
- 当设置了自定义内核
1
2virtual void cv::ml::SVM::setCustomKernel(const Ptr<Kernel>& _kernel)
- 核函数的参数:degree
对于SVM::POLY。默认值为0。
1
2virtual void cv::ml::SVM::setDegree(double val)
- 核函数的参数:γ
SVM::POLY, SVM::RBF, SVM::SIGMOID或SVM::CHI2。默认值为1。
1
2virtual void cv::ml::SVM::setGamma(double val)
- 支持向量机核的类型
SVM:: KernelTypes。默认值为SVM::RBF。
1
2virtual void cv::ml::SVM::setKernel(int kernelType)
- SVM优化问题的参数:ν
SVM::NU_SVC, SVM::ONE_CLASS或SVM::NU_SVR。默认值为0。
1
2virtual void cv::ml::SVM::setNu(double val)
- 支持向量机的参数柱一优化问题
SVM::EPS_SVR。默认值为0。
1
2virtual void cv::ml::SVM::setP(double val)
- 终止迭代支持向量机训练的条件
您可以指定最大迭代次数及训练终止的指定精度。默认值是TermCriteria(TermCriteria::MAX_ITER + TermCriteria::EPS, 1000, FLT_EPSILON);
1
2virtual void cv::ml::SVM::setTermCriteria(const cv::TermCriteria& val)
- 支持向量机公式的类型
SVM:Type。默认值为SVM::C_SVC。
1
2
3virtual void cv::ml::SVM::setType ( int val )
- 自动训练
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29virtual bool cv::ml::SVM::trainAuto(const Ptr<TrainData>& data, int kFold = 10, ParamGrid Cgrid = getDefaultGrid(C), ParamGrid gammaGrid = getDefaultGrid(GAMMA), ParamGrid pGrid = getDefaultGrid(P), ParamGrid nuGrid = getDefaultGrid(NU), ParamGrid coeffGrid = getDefaultGrid(COEF), ParamGrid degreeGrid = getDefaultGrid(DEGREE), bool balanced = false) //!< 参数 //!< data 可以使用TrainData::create或TrainData::loadFromCSV构造的训练数据。 //!< kFold 交叉验证参数。训练集被划分为kFold子集。其中一个子集用于测试模型,其他子集构成列车集。因此,SVM算法执行kFold次。 //!< Cgrid grid for C //!< gammaGrid grid for gamma //!< pGrid grid for p //!< nuGrid grid for nu //!< coeffGrid grid for coeff //!< degreeGrid grid for degree //!< balanced 如果问题是2类分类,则该方法创建更平衡的交叉验证子集,子集中的类之间的比例接近于整个训练数据集中的比例。
- 自动训练
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43virtual bool cv::ml::SVM::trainAuto (InputArray samples, int layout, InputArray responses, int kFold = 10, Ptr<ParamGrid> Cgrid = SVM::getDefaultGridPtr(SVM::C), Ptr<ParamGrid> gammaGrid = SVM::getDefaultGridPtr(SVM::GAMMA), Ptr<ParamGrid> pGrid = SVM::getDefaultGridPtr(SVM::P), Ptr<ParamGrid> nuGrid = SVM::getDefaultGridPtr(SVM::NU), Ptr<ParamGrid> coeffGrid = SVM::getDefaultGridPtr(SVM::COEF), Ptr<ParamGrid> degreeGrid = SVM::getDefaultGridPtr(SVM::DEGREE), bool balanced = false) //!< 参数 //!< samples 训练样本 //!< layout ROW_SAMPLE or COL_SAMPLE //!< responses 与训练样本相关的响应向量。 //!< kFold 交叉验证参数。训练集被划分为kFold子集。其中一个子集用于测试模型,其他子集构成训练集。 //!< Cgrid grid for C //!< gammaGrid grid for gamma //!< pGrid grid for p //!< nuGrid grid for nu //!< coeffGrid grid for coeff //!< degreeGrid grid for degree //!< balanced 如果问题是2类分类,则该方法创建更平衡的交叉验证子集,子集中的类之间的比例接近于整个训练数据集中的比例。
- 常规训练
1
2
3virtual bool train( const Ptr<TrainData>& trainData, int flags=0 ) virtual bool train( InputArray samples, int layout, InputArray responses )
最后
以上就是高大过客最近收集整理的关于<OpenCV> SVM参数配置的全部内容,更多相关<OpenCV>内容请搜索靠谱客的其他文章。
发表评论 取消回复