OpenCV 4.13.0
开源计算机视觉库 (Open Source Computer Vision)
正在加载...
正在搜索...
未找到匹配项
cv::ml::SVM 类参考抽象

支持向量机。 更多...

#include <opencv2/ml.hpp>

cv::ml::SVM 协作图

类  核函数
 

公开类型

enum  核函数类型 {
  CUSTOM =-1 ,
  LINEAR =0 ,
  POLY =1 ,
  RBF =2 ,
  SIGMOID =3 ,
  CHI2 =4 ,
  INTER =5
}
 SVM 核函数类型 更多...
 
enum  参数类型 {
  C =0 ,
  GAMMA =1 ,
  P =2 ,
  NU =3 ,
  COEF =4 ,
  DEGREE =5
}
 SVM 参数类型 更多...
 
enum  类型 {
  C_SVC =100 ,
  NU_SVC =101 ,
  ONE_CLASS =102 ,
  EPS_SVR =103 ,
  NU_SVR =104
}
 SVM 类型 更多...
 
- 从 cv::ml::StatModel 继承的公共类型
enum  标志 {
  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
 如果 Algorithm 为空(例如,在最开始或读取不成功后),则返回 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 核函数类型

在以下具有四个类别的二维测试案例中,不同核函数的比较。已经训练了四个 SVM::C_SVC SVM(一对多),并进行了自动训练。评估了三种不同核函数(SVM::CHI2SVM::INTERSVM::RBF)。颜色表示得分最高的类别。亮表示最高得分 > 0,暗表示最高得分 < 0。

枚举值 (Enumerator)
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 

指数卡方核函数,类似于 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 参数类型

枚举值 (Enumerator)
GAMMA 
NU 
COEF 
DEGREE 

◆ 类型

SVM 类型

枚举值 (Enumerator)
C_SVC 

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

NU_SVC 

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

ONE_CLASS 

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

EPS_SVR 

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

NU_SVR 

\(\nu\)-支持向量回归。使用 \(\nu\) 代替 p。有关详细信息,请参见 [52]

成员函数说明

◆ 创建()

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决策函数的索引。如果解决的问题是回归、1 类或 2 类分类,那么只有一个决策函数,索引应始终为 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) -> None

另请参阅
getC

◆ setClassWeights()

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

另请参阅
getClassWeights

◆ setCoef0()

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

另请参阅
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) -> None

另请参阅
getDegree

◆ setGamma()

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

另请参阅
getGamma

◆ setKernel()

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

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

◆ setNu()

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

另请参阅
getNu

◆ setP()

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

另请参阅
getP

◆ setTermCriteria()

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

另请参阅
getTermCriteria

◆ setType()

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

另请参阅
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 且问题为 2 类分类,则该方法会创建更平衡的交叉验证子集,即子集中类别之间的比例接近于整个训练数据集中的比例。

该方法通过选择最佳参数 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 且问题为 2 类分类,则该方法会创建更平衡的交叉验证子集,即子集中类别之间的比例接近于整个训练数据集中的比例。

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

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

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


该类的文档由以下文件生成: