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

支持向量机。更多…

#include <opencv2/ml.hpp>

cv::ml::SVM 的协作图

类 Kernel(核函数)
 

公共类型

枚举 KernelTypes(核函数类型) {
  CUSTOM(自定义) =-1 ,
  LINEAR(线性) =0 ,
  POLY(多项式) =1 ,
  RBF(径向基函数) =2 ,
  SIGMOID(Sigmoid) =3 ,
  CHI2(卡方) =4 ,
  INTER(线性插值) =5
}
 SVM 核函数类型 更多…
 
枚举 ParamTypes(参数类型) {
  C =0 ,
  GAMMA(伽马) =1 ,
  P =2 ,
  NU(ν) =3 ,
  COEF(系数) =4 ,
  DEGREE(度数) =5
}
 SVM 参数类型 更多…
 
枚举 类型 {
  C_SVC =100 ,
  NU_SVC =101 ,
  ONE_CLASS =102 ,
  EPS_SVR =103 ,
  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 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
 

详细描述

支持向量机。

参见
支持向量机

成员枚举文档

◆ KernelTypes

SVM核类型

在以下具有四个类的二维测试用例中,不同内核的比较。已经训练了四个SVM::C_SVC SVM(一对其余)使用auto_train。对三个不同内核的评估(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 核:\(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 

◆ 类型

SVM类型

枚举器
C_SVC 

C-支持向量机分类。n类分类 (n ≥ 2),允许类别的不完全分离,对于异常值使用惩罚乘数C。

NU_SVC 

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

ONE_CLASS 

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

EPS_SVR 

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

NU_SVR 

ν-支持向量机回归。使用ν代替p。详情请参见[50]

成员函数文档

◆ create()

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

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

◆ getC()

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

SVM优化问题的参数CSVM::C_SVCSVM::EPS_SVRSVM::NU_SVR。默认值为0。

参见
setC

◆ getClassWeights()

虚函数 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()

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

核函数的参数coef0SVM::POLYSVM::SIGMOID。默认值为0。

参见
setCoef0

◆ getDecisionFunction()

虚函数 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()

静态 ParamGrid cv::ml::SVM::getDefaultGrid ( int param_id)
静态

生成SVM参数网格。

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

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

◆ getDefaultGridPtr()

静态 Ptr< ParamGrid > cv::ml::SVM::getDefaultGridPtr ( int param_id)
静态
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()

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

核函数的参数degreeSVM::POLY。默认值为0。

参见
setDegree

◆ getGamma()

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

核函数的参数γ。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)
静态
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) ->

◆ 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) ->

◆ 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(样本,布局,响应[, 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如果为真且问题是二分类问题,则该方法会创建更均衡的交叉验证子集,即子集中的类别比例接近于整个训练数据集中的类别比例。

该方法通过选择最佳参数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 ( 输入数组 样本,
int 布局,
输入数组 响应,
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(样本,布局,响应[, kFold[, Cgrid[, gammaGrid[, pGrid[, nuGrid[, coeffGrid[, degreeGrid[, balanced]]]]]]]]) -> retval

训练具有最佳参数的 SVM。

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

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

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

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


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