OpenCV  4.10.0
开源计算机视觉
加载中...
搜索中...
无匹配
| 公共类型 | 公共成员函数 | 静态公共成员函数 | 所有成员列表
cv::ml::SVM 类参考抽象

支持向量机。 更多...

#include <opencv2/ml.hpp>

cv::ml::SVM 的协作图

class  Kernel
 

公共类型

enum  KernelTypes {
  CUSTOM =-1 ,
  LINEAR =0 ,
  POLY =1 ,
  RBF =2 ,
  SIGMOID =3 ,
  CHI2 =4 ,
  INTER =5
}
 SVM 内核类型 更多...
 
enum  ParamTypes {
  C =0 ,
  GAMMA =1 ,
  P =2 ,
  NU =3 ,
  COEF =4 ,
  DEGREE =5
}
 SVM 参数类型 更多...
 
enum  Types {
  C_SVC =100 ,
  NU_SVC =101 ,
  ONE_CLASS =102 ,
  EPS_SVR =103 ,
  NU_SVR =104
}
 SVM 类型 更多...
 
- 从 cv::ml::StatModel 继承的公共类型
enum  Flags {
  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 ()
 
虚拟 ~Algorithm ()
 
virtual void 清除 ()
 清除算法状态。
 
虚拟 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< SVM创建 ()
 
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())
 从String中加载算法。
 
template<typename _Tp >
static Ptr< _Tpread (const FileNode &fn)
 从文件节点读取算法。
 

其他继承成员

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

详细描述

支持向量机。

另请参阅
支持向量机

成员枚举文档

◆ KernelTypes

SVM核类型

比较以下2D测试案例中四种不同核。使用auto_train生成了四个SVM::C_SVC

枚举
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核: \(K(x_i, x_j) = \tanh(\gamma x_i^T x_j + coef0)\).

CHI2 

指数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)\).

◆ ParamTypes

SVM参数类型

枚举
GAMMA 
NU 
COEF 
DEGREE 

◆ Types

SVM类型

枚举
C_SVC 

C-Support Vector Classification。n类分类(n \(\ge\) 2),允许对异常值应用惩罚乘数C的不完美分离。

NU_SVC 

ν 支持向量分类。n 类分类可能出现不完全分离。参数 ν(范围在 0..1 之间,值越大,决策边界越平滑)用于代替 C。

ONE_CLASS 

分布估计(一类 SVM)。所有训练数据都属于同一类,SVM 将建立将此类别与特征空间的其余部分分开的边界。

EPS_SVR 

ε 支持向量回归。来自训练集的特征向量与拟合超平面的距离必须小于 p。对于异常值,使用惩罚系数 C。

NU_SVR 

ν 支持向量回归。使用 ν 而不是 p。详细信息请参阅 [50]

成员函数文档

◆ 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
pure virtual
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
pure virtual
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
pure virtual
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
pure virtual
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
pure virtual
Python
cv.ml.SVM.getDegree() -> retval

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

另请参阅
setDegree

◆ getGamma()

virtual double cv::ml::SVM::getGamma ( ) const
pure virtual
Python
cv.ml.SVM.getGamma() -> retval

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

另请参阅
setGamma

◆ getKernelType()

virtual int cv::ml::SVM::getKernelType ( ) const
pure virtual
Python
cv.ml.SVM.getKernelType() -> retval

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

◆ getNu()

virtual double cv::ml::SVM::getNu ( ) const
pure virtual
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
pure virtual
Python
cv.ml.SVM.getP() -> retval

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

另请参阅
setP

◆ getSupportVectors()

virtual Mat cv::ml::SVM::getSupportVectors ( ) const
pure virtual
Python
cv.ml.SVM.getSupportVectors() -> retval

检索所有支持向量。

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

◆ getTermCriteria()

virtual cv::TermCriteria cv::ml::SVM::getTermCriteria ( ) const
pure virtual
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
pure virtual
Python
cv.ml.SVM.getType() -> retval

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

另请参阅
setType

◆ getUncompressedSupportVectors()

virtual Mat cv::ml::SVM::getUncompressedSupportVectors ( ) const
pure virtual
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::save 序列化和存储一个 SVM 到磁盘。通过调用此函数并传入文件路径,可以从该文件重新加载 SVM

参数
filepath序列化svm的路径

◆ setC()

virtual void cv::ml::SVM::setC ( double  val)
pure virtual
Python
cv.ml.SVM.setC(val) -> None

另请参阅
getC

◆ setClassWeights()

virtual void cv::ml::SVM::setClassWeights ( const cv::Mat val)
pure virtual
Python
cv.ml.SVM.setClassWeights(val) -> None

另请参阅
getClassWeights

◆ setCoef0()

virtual void cv::ml::SVM::setCoef0 ( double  val)
pure virtual
Python
cv.ml.SVM.setCoef0(val) -> None

另请参阅
getCoef0

◆ setCustomKernel()

virtual void cv::ml::SVM::setCustomKernel ( const Ptr< Kernel > &  _kernel)
pure virtual

使用自定义核初始化。参见 SVM::Kernel 类以获取实现细节

◆ setDegree()

virtual void cv::ml::SVM::setDegree ( double  val)
pure virtual
Python
cv.ml.SVM.setDegree(val) -> None

另请参阅
getDegree

◆ setGamma()

virtual void cv::ml::SVM::setGamma ( double  val)
pure virtual
Python
cv.ml.SVM.setGamma(val) -> None

另请参阅
getGamma

◆ setKernel()

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

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

◆ setNu()

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

另请参阅
getNu

◆ setP()

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

另请参阅
getP

◆ setTermCriteria()

虚函数 cv::ml::SVM::setTermCriteria ( const cv::TermCriteria val)
pure virtual
Python
cv.ml.SVM.setTermCriteria(val) -> None

另请参阅
getTermCriteria

◆ setType()

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

另请参阅
getType

◆ trainAuto() [1/2]

虚函数 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 
)
pure virtual
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的任何值。例如,为了避免对gamme进行优化,可以将gammaGrid.step = 0gammaGrid.minValgamma_grid.maxVal设置为任意数值。在这种情况下,将使用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]

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

用最佳参数训练SVM。

参数
samples训练样本
layout请参阅ml::SampleTypes
responses与训练样本关联的响应向。
kFold交叉验证参数。将训练集分为k个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。


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