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。


該類的文件由以下檔案生成: