OpenCV 4.12.0
开源计算机视觉
加载中...
搜索中...
无匹配项
cv::ml::SVM 类参考抽象

支持向量机。 更多...

#include <opencv2/ml.hpp>

cv::ml::SVM 的协作图

类  Kernel(内核)
 

公共类型

枚举  核类型 {
  CUSTOM =-1 ,
  线性 =0 ,
  多项式核 (POLY) =1 ,
  径向基函数核 (RBF) =2 ,
  Sigmoid核 (SIGMOID) =3 ,
  卡方核 (CHI2) =4 ,
  交叉核 (INTER) =5
}
 SVM 核类型 更多...
 
枚举  参数类型 {
  C =0 ,
  伽马 (GAMMA) =1 ,
  P =2 ,
  Nu (NU) =3 ,
  系数 (COEF) =4 ,
  度 (DEGREE) =5
}
 SVM 参数类型 更多...
 
枚举  类型 {
  C-支持向量分类 (C_SVC) =100 ,
  Nu-支持向量分类 (NU_SVC) =101 ,
  一类 SVM (ONE_CLASS) =102 ,
  Epsilon-支持向量回归 (EPS_SVR) =103 ,
  Nu-支持向量回归 (NU_SVR) =104
}
 SVM 类型 更多...
 
- 继承自 cv::ml::StatModel 的公共类型
枚举  标志 {
  UPDATE_MODEL = 1 ,
  RAW_OUTPUT =1 ,
  COMPRESSED_INPUT =2 ,
  PREPROCESSED_INPUT =4
}
 

公共成员函数

virtual double getC () const =0
 
virtual cv::Mat getClassWeights () const =0
 
virtual double getCoef0 () const =0
 
virtual double getDecisionFunction (int i, OutputArray alpha, OutputArray svidx) const =0
 检索决策函数。
 
virtual double getDegree () const =0
 
virtual double getGamma () const =0
 
virtual int getKernelType () const =0
 
virtual double getNu () const =0
 
virtual double getP () const =0
 
virtual Mat getSupportVectors () const =0
 检索所有支持向量。
 
virtual cv::TermCriteria getTermCriteria () const =0
 
virtual int getType () const =0
 
virtual Mat getUncompressedSupportVectors () const =0
 检索线性 SVM 的所有未压缩支持向量。
 
virtual void setC (double val)=0
 
virtual void setClassWeights (const cv::Mat &val)=0
 
virtual void setCoef0 (double val)=0
 
virtual void setCustomKernel (const Ptr< Kernel > &_kernel)=0
 
virtual void setDegree (double val)=0
 
virtual void setGamma (double val)=0
 
virtual void setKernel (int kernelType)=0
 
virtual void setNu (double val)=0
 
virtual void setP (double val)=0
 
virtual void setTermCriteria (const cv::TermCriteria &val)=0
 
virtual void setType (int val)=0
 
virtual bool 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)=0
 使用最优参数训练 SVM。
 
virtual bool 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)=0
 使用最优参数训练 SVM。
 
- 继承自 cv::ml::StatModel 的公共成员函数
virtual float calcError (const Ptr< TrainData > &data, bool test, OutputArray resp) const
 计算训练或测试数据集上的误差。
 
virtual bool empty () const CV_OVERRIDE
 如果 算法 为空(例如,在最开始或读取不成功后),则返回 true。
 
virtual int getVarCount () const =0
 返回训练样本中变量的数量。
 
virtual bool isClassifier () const =0
 如果模型是分类器,则返回 true。
 
virtual bool isTrained () const =0
 如果模型已训练,则返回 true。
 
virtual float predict (InputArray samples, OutputArray results=noArray(), int flags=0) const =0
 预测提供的样本的响应
 
virtual bool train (const Ptr< TrainData > &trainData, int flags=0)
 训练统计模型。
 
virtual bool train (InputArray samples, int layout, InputArray responses)
 训练统计模型。
 
- 继承自 cv::Algorithm 的公共成员函数
 Algorithm ()
 
virtual ~Algorithm ()
 
virtual void clear ()
 清除算法状态。
 
virtual String getDefaultName () const
 
virtual void read (const FileNode &fn)
 从文件存储中读取算法参数。
 
virtual void save (const String &filename) const
 
void write (const Ptr< FileStorage > &fs, const String &name=String()) const
 
virtual void write (FileStorage &fs) const
 将算法参数存储到文件存储中。
 
void write (FileStorage &fs, const String &name) const
 

静态公共成员函数

static Ptr< SVMcreate ()
 
static ParamGrid getDefaultGrid (int param_id)
 为 SVM 参数生成网格。
 
static Ptr< ParamGridgetDefaultGridPtr (int param_id)
 为 SVM 参数生成网格。
 
static Ptr< SVMload (const String &filepath)
 从文件中加载并创建一个序列化的 SVM。
 
- 继承自 cv::ml::StatModel 的静态公共成员函数
template<typename _Tp >
static Ptr< _Tptrain (const Ptr< TrainData > &data, int flags=0)
 使用默认参数创建并训练模型。
 
- 继承自 cv::Algorithm 的静态公共成员函数
template<typename _Tp >
static Ptr< _Tpload (const String &filename, const String &objname=String())
 从文件中加载算法。
 
template<typename _Tp >
static Ptr< _TploadFromString (const String &strModel, const String &objname=String())
 从字符串加载算法。
 
template<typename _Tp >
static Ptr< _Tpread (const FileNode &fn)
 从文件节点读取算法。
 

其他继承成员

- 继承自 cv::Algorithm 的保护成员函数
void writeFormat (FileStorage &fs) const
 

详细描述

支持向量机。

另请参见
支持向量机

成员枚举文档

◆ 核类型

SVM 核类型

在以下具有四个类别的 2D 测试用例中,对不同核的比较。使用 auto_train 训练了四个 SVM::C_SVC SVM(一对多训练)。对三种不同核进行评估(SVM::CHI2SVM::INTERSVM::RBF)。颜色表示得分最高的类别。亮色表示最大得分 > 0,深色表示最大得分 < 0。

枚举器
自定义 (CUSTOM) 

当设置了自定义核时,由 SVM::getKernelType 返回

线性 (LINEAR) 

线性核。不进行映射,在线性特征空间中进行线性判别(或回归)。这是最快的选项。 \(K(x_i, x_j) = x_i^T x_j\)。

多项式 (POLY) 

多项式核: \(K(x_i, x_j) = (\gamma x_i^T x_j + coef0)^{degree}, \gamma > 0\)。

径向基函数 (RBF) 

径向基函数 (RBF),在大多数情况下是一个不错的选择。 \(K(x_i, x_j) = e^{-\gamma ||x_i - x_j||^2}, \gamma > 0\)。

Sigmoid (SIGMOID) 

Sigmoid 核: \(K(x_i, x_j) = \tanh(\gamma x_i^T x_j + coef0)\)。

卡方 (CHI2) 

指数卡方核,类似于 RBF 核: \(K(x_i, x_j) = e^{-\gamma \chi^2(x_i,x_j)}, \chi^2(x_i,x_j) = (x_i-x_j)^2/(x_i+x_j), \gamma > 0\)。

交叉 (INTER) 

直方图交叉核。一种快速核。 \(K(x_i, x_j) = min(x_i,x_j)\)。

◆ 参数类型

SVM 参数类型

枚举器
GAMMA 
NU 
COEF 
DEGREE 

◆ 类型

SVM 类型

枚举器
C-支持向量分类 (C_SVC) 

C-支持向量分类。n类分类(n \(\geq\) 2),允许对带有惩罚乘数 C 的异常值进行不完全的类别分离。

Nu-支持向量分类 (NU_SVC) 

\(\nu\)-支持向量分类。可能存在不完全分离的 n 类分类。使用参数 \(\nu\)(范围 0..1,值越大,决策边界越平滑)代替 C。

一类 SVM (ONE_CLASS) 

分布估计(一类 SVM)。所有训练数据都来自同一个类别,SVM 构建一个边界,将该类别与特征空间的其他部分分开。

Epsilon-支持向量回归 (EPS_SVR) 

\(\epsilon\)-支持向量回归。训练集中的特征向量与拟合超平面之间的距离必须小于 p。对于异常值,使用惩罚乘数 C。

Nu-支持向量回归 (NU_SVR) 

\(\nu\)-支持向量回归。使用 \(\nu\) 代替 p。详情请参见 [51]

成员函数文档

◆ create()

static Ptr< SVM > cv::ml::SVM::create ( )
static
Python
cv.ml.SVM.create() -> retval
cv.ml.SVM_create() -> retval

创建空模型。使用 StatModel::train 训练模型。由于 SVM 有多个参数,您可能需要为您的特定问题找到最佳参数,这可以通过 SVM::trainAuto 来实现。

◆ getC()

virtual double cv::ml::SVM::getC ( ) const
纯虚函数
Python
cv.ml.SVM.getC() -> retval

SVM 优化问题的参数 C。适用于 SVM::C_SVCSVM::EPS_SVRSVM::NU_SVR。默认值为 0。

另请参见
setC

◆ getClassWeights()

virtual cv::Mat cv::ml::SVM::getClassWeights ( ) const
纯虚函数
Python
cv.ml.SVM.getClassWeights() -> retval

SVM::C_SVC 问题中的可选权重,分配给特定类别。它们乘以 C,因此类别 i 的参数 C 变为 classWeights(i) * C。因此,这些权重会影响不同类别的错误分类惩罚。权重越大,对应类别数据的错误分类惩罚越大。默认值为空的 Mat

另请参见
setClassWeights

◆ getCoef0()

virtual double cv::ml::SVM::getCoef0 ( ) const
纯虚函数
Python
cv.ml.SVM.getCoef0() -> retval

核函数的参数 coef0。适用于 SVM::POLYSVM::SIGMOID。默认值为 0。

另请参见
setCoef0

◆ getDecisionFunction()

virtual double cv::ml::SVM::getDecisionFunction ( int i,
OutputArray alpha,
OutputArray svidx ) const
纯虚函数
Python
cv.ml.SVM.getDecisionFunction(i[, alpha[, svidx]]) -> retval, alpha, svidx

检索决策函数。

参数
i决策函数的索引。如果解决的问题是回归、一类或两类分类,则只有一个决策函数,索引应始终为 0。否则,在 N 类分类的情况下,将有 \(N(N-1)/2\) 个决策函数。
alpha可选的权重输出向量,对应于不同的支持向量。在线性 SVM 的情况下,所有的 alpha 值都将是 1。
svidx支持向量矩阵中的支持向量索引的可选输出向量(可以通过 SVM::getSupportVectors 检索)。在线性 SVM 的情况下,每个决策函数由一个“压缩”支持向量组成。

该方法返回决策函数的 rho 参数,这是一个从核响应的加权和中减去的标量。

◆ getDefaultGrid()

static ParamGrid cv::ml::SVM::getDefaultGrid ( int param_id)
static

为 SVM 参数生成网格。

参数
param_idSVM 参数 ID,必须是 SVM::ParamTypes 之一。为具有此 ID 的参数生成网格。

此函数为 SVM 算法的指定参数生成一个网格。该网格可以传递给函数 SVM::trainAuto

◆ getDefaultGridPtr()

static Ptr< ParamGrid > cv::ml::SVM::getDefaultGridPtr ( int param_id)
static
Python
cv.ml.SVM.getDefaultGridPtr(param_id) -> retval
cv.ml.SVM_getDefaultGridPtr(param_id) -> retval

为 SVM 参数生成网格。

参数
param_idSVM 参数 ID,必须是 SVM::ParamTypes 之一。为具有此 ID 的参数生成网格。

此函数为 SVM 算法的指定参数生成一个网格指针。该网格可以传递给函数 SVM::trainAuto

◆ getDegree()

virtual double cv::ml::SVM::getDegree ( ) const
纯虚函数
Python
cv.ml.SVM.getDegree() -> retval

核函数的参数 degree。适用于 SVM::POLY。默认值为 0。

另请参见
setDegree

◆ getGamma()

virtual double cv::ml::SVM::getGamma ( ) const
纯虚函数
Python
cv.ml.SVM.getGamma() -> retval

核函数的参数 \(\gamma\)。适用于 SVM::POLYSVM::RBFSVM::SIGMOIDSVM::CHI2。默认值为 1。

另请参见
setGamma

◆ getKernelType()

virtual int cv::ml::SVM::getKernelType ( ) const
纯虚函数
Python
cv.ml.SVM.getKernelType() -> retval

SVM 核的类型。参见 SVM::KernelTypes。默认值为 SVM::RBF

◆ getNu()

virtual double cv::ml::SVM::getNu ( ) const
纯虚函数
Python
cv.ml.SVM.getNu() -> retval

SVM 优化问题的参数 \(\nu\)。适用于 SVM::NU_SVCSVM::ONE_CLASSSVM::NU_SVR。默认值为 0。

另请参见
setNu

◆ getP()

virtual double cv::ml::SVM::getP ( ) const
纯虚函数
Python
cv.ml.SVM.getP() -> retval

SVM 优化问题的参数 \(\epsilon\)。适用于 SVM::EPS_SVR。默认值为 0。

另请参见
setP

◆ getSupportVectors()

virtual Mat cv::ml::SVM::getSupportVectors ( ) const
纯虚函数
Python
cv.ml.SVM.getSupportVectors() -> retval

检索所有支持向量。

此方法将所有支持向量作为浮点矩阵返回,其中支持向量存储为矩阵行。

◆ getTermCriteria()

virtual cv::TermCriteria cv::ml::SVM::getTermCriteria ( ) const
纯虚函数
Python
cv.ml.SVM.getTermCriteria() -> retval

迭代 SVM 训练过程的终止准则,该过程解决了受约束二次优化问题的部分情况。您可以指定容差和/或最大迭代次数。默认值为 TermCriteria( TermCriteria::MAX_ITER + TermCriteria::EPS, 1000, FLT_EPSILON );

另请参见
setTermCriteria

◆ getType()

virtual int cv::ml::SVM::getType ( ) const
纯虚函数
Python
cv.ml.SVM.getType() -> retval

SVM 公式的类型。参见 SVM::Types。默认值为 SVM::C_SVC

另请参见
setType

◆ getUncompressedSupportVectors()

virtual Mat cv::ml::SVM::getUncompressedSupportVectors ( ) const
纯虚函数
Python
cv.ml.SVM.getUncompressedSupportVectors() -> retval

检索线性 SVM 的所有未压缩支持向量。

此方法返回线性 SVM 的所有未压缩支持向量,预测中使用的压缩支持向量就是从它们派生而来的。它们以浮点矩阵的形式返回,其中支持向量存储为矩阵行。

◆ load()

static Ptr< SVM > cv::ml::SVM::load ( const String & filepath)
static
Python
cv.ml.SVM.load(filepath) -> retval
cv.ml.SVM_load(filepath) -> retval

从文件中加载并创建一个序列化的 SVM。

使用 SVM::saveSVM 序列化并存储到磁盘。通过调用此函数并指定文件路径,可以再次从该文件加载 SVM

参数
filepath序列化 SVM 的路径

◆ setC()

virtual void cv::ml::SVM::setC ( double val)
纯虚函数
Python
cv.ml.SVM.setC(val) ->

另请参见
getC

◆ setClassWeights()

virtual void cv::ml::SVM::setClassWeights ( const cv::Mat & val)
纯虚函数
Python
cv.ml.SVM.setClassWeights(val) ->

另请参见
getClassWeights

◆ setCoef0()

virtual void cv::ml::SVM::setCoef0 ( double val)
纯虚函数
Python
cv.ml.SVM.setCoef0(val) ->

另请参见
getCoef0

◆ setCustomKernel()

virtual void cv::ml::SVM::setCustomKernel ( const Ptr< Kernel > & _kernel)
纯虚函数

使用自定义核初始化。有关实现细节,请参见 SVM::Kernel 类。

◆ setDegree()

virtual void cv::ml::SVM::setDegree ( double val)
纯虚函数
Python
cv.ml.SVM.setDegree(val) ->

另请参见
getDegree

◆ setGamma()

virtual void cv::ml::SVM::setGamma ( double val)
纯虚函数
Python
cv.ml.SVM.setGamma(val) ->

另请参见
getGamma

◆ setKernel()

virtual void cv::ml::SVM::setKernel ( int kernelType)
纯虚函数
Python
cv.ml.SVM.setKernel(kernelType) ->

使用预定义核之一进行初始化。参见 SVM::KernelTypes

◆ setNu()

virtual void cv::ml::SVM::setNu ( double val)
纯虚函数
Python
cv.ml.SVM.setNu(val) ->

另请参见
getNu

◆ setP()

virtual void cv::ml::SVM::setP ( double val)
纯虚函数
Python
cv.ml.SVM.setP(val) ->

另请参见
getP

◆ setTermCriteria()

virtual void cv::ml::SVM::setTermCriteria ( const cv::TermCriteria & val)
纯虚函数
Python
cv.ml.SVM.setTermCriteria(val) ->

另请参见
getTermCriteria

◆ setType()

virtual void cv::ml::SVM::setType ( int val)
纯虚函数
Python
cv.ml.SVM.setType(val) ->

另请参见
getType

◆ trainAuto() [1/2]

virtual 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 )
纯虚函数
Python
cv.ml.SVM.trainAuto(samples, layout, responses[, kFold[, Cgrid[, gammaGrid[, pGrid[, nuGrid[, coeffGrid[, degreeGrid[, balanced]]]]]]]]) -> retval

使用最优参数训练 SVM。

参数
data可以使用 TrainData::createTrainData::loadFromCSV 构建的训练数据。
kFold交叉验证参数。训练集被分成 kFold 个子集。一个子集用于测试模型,其他子集构成训练集。因此,SVM 算法将执行 kFold 次。
CgridC 的网格
gammaGridgamma 的网格
pGridp 的网格
nuGridnu 的网格
coeffGridcoeff 的网格
degreeGriddegree 的网格
balanced如果为 true 且问题是二类分类,则该方法会创建更平衡的交叉验证子集,即子集中类之间的比例接近于整个训练数据集中的比例。

该方法通过选择最优参数 C、gamma、p、nu、coef0、degree 自动训练 SVM 模型。当测试集误差的交叉验证估计值最小时,参数被认为是最佳的。

如果不需要优化某个参数,应将相应的网格步长设置为小于或等于 1 的任意值。例如,为避免 gamma 的优化,请将 gammaGrid.step = 0gammaGrid.minValgamma_grid.maxVal 设置为任意数字。在这种情况下,Gamma 值将用于 gamma。

最后,如果需要优化某个参数但不知道相应的网格,您可以调用函数 SVM::getDefaultGrid。例如,要为 gamma 生成网格,请调用 SVM::getDefaultGrid(SVM::GAMMA)

此函数适用于分类(SVM::C_SVCSVM::NU_SVC)以及回归(SVM::EPS_SVRSVM::NU_SVR)。如果它是 SVM::ONE_CLASS,则不进行优化,并执行使用 params 中指定参数的常规 SVM。

◆ trainAuto() [2/2]

virtual 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 )
纯虚函数
Python
cv.ml.SVM.trainAuto(samples, layout, responses[, kFold[, Cgrid[, gammaGrid[, pGrid[, nuGrid[, coeffGrid[, degreeGrid[, balanced]]]]]]]]) -> retval

使用最优参数训练 SVM。

参数
samples训练样本
layout参见 ml::SampleTypes
responses与训练样本关联的响应向量。
kFold交叉验证参数。训练集被分成 kFold 个子集。一个子集用于测试模型,其他子集构成训练集。因此,SVM 算法是
CgridC 的网格
gammaGridgamma 的网格
pGridp 的网格
nuGridnu 的网格
coeffGridcoeff 的网格
degreeGriddegree 的网格
balanced如果为 true 且问题是二类分类,则该方法会创建更平衡的交叉验证子集,即子集中类之间的比例接近于整个训练数据集中的比例。

该方法通过选择最优参数 C、gamma、p、nu、coef0、degree 自动训练 SVM 模型。当测试集误差的交叉验证估计值最小时,参数被认为是最佳的。

此函数仅利用 SVM::getDefaultGrid 进行参数优化,因此仅提供基本的参数选项。

此函数适用于分类(SVM::C_SVCSVM::NU_SVC)以及回归(SVM::EPS_SVRSVM::NU_SVR)。如果它是 SVM::ONE_CLASS,则不进行优化,并执行使用 params 中指定参数的常规 SVM。


此类的文档是从以下文件生成的