OpenCV 5.0.0
Open Source Computer Vision
読み込み中...
検索中...
見つかりません
🤖 AIによる機械翻訳(非公式) — これは OpenCV 5.0.0 公式リファレンス(英語)を AI (Claude) で自動翻訳したものです。訳に誤りを含む場合があります。正確な情報は 公式英語版(原文) を参照してください。
cv::ml::SVM クラスabstract

サポートベクタマシン。 続き...

#include <opencv2/ml.hpp>

Collaboration diagram for 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 型 続き...
 
- Public Types inherited from 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 を学習する。
 
- Public Member Functions inherited from 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)
 統計モデルを学習する。
 
- Public Member Functions inherited from 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
 
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 をファイルから読み込んで生成する。
 
- Static Public Member Functions inherited from cv::ml::StatModel
template<typename _Tp >
static Ptr< _Tptrain (const Ptr< TrainData > &data, int flags=0)
 デフォルト引数でモデルを生成して学習する。
 
- Static Public Member Functions inherited from 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)
 ファイルノードからアルゴリズムを読み込む。
 

Additional Inherited Members

- Protected Member Functions inherited from cv::Algorithm
void writeFormat (FileStorage &fs) const
 

詳細説明

サポートベクタマシン。

参照
Support Vector Machines

列挙型メンバ詳解

◆ KernelTypes

SVM カーネル型

4つのクラスを持つ次の2次元テストケースにおける、異なるカーネルの比較。4つの SVM::C_SVC SVM が auto_train を用いて(1対その他で)学習された。3つの異なるカーネル(SVM::CHI2, SVM::INTER, SVM::RBF)での評価。色は最大スコアを持つクラスを表す。明るい部分は max-score > 0 を、暗い部分は max-score < 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 

シグモイドカーネル: \(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-サポートベクタ分類。n クラス分類 (n \(\geq\) 2) で、外れ値に対するペナルティ乗数 C を用いてクラスの不完全な分離を許容する。

NU_SVC 

\(\nu\)-サポートベクタ分類。不完全な分離を許容する可能性のある n クラス分類。C の代わりに引数 \(\nu\)(0..1 の範囲で、値が大きいほど決定境界が滑らかになる)が用いられる。

ONE_CLASS 

分布推定(1クラス SVM)。すべての学習データは同一クラスに属し、SVM はそのクラスを特徴空間の残りから分離する境界を構築する。

EPS_SVR 

\(\epsilon\)-サポートベクタ回帰。学習セットの特徴ベクタとフィッティング超平面との距離は p 未満でなければならない。外れ値に対してはペナルティ乗数 C が用いられる。

NU_SVR 

\(\nu\)-サポートベクタ回帰。p の代わりに \(\nu\) が用いられる。詳細は [52] を参照。

メンバ関数詳解

◆ 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 最適化問題の引数 CSVM::C_SVCSVM::EPS_SVR、または SVM::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 のパラメータ CclassWeights(i) * C となる。したがってこれらの重みは、異なるクラスに対する誤分類のペナルティに影響する。重みが大きいほど、対応するクラスのデータの誤分類に対するペナルティが大きくなる。デフォルト値は空の Mat

参照
setClassWeights

◆ getCoef0()

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

カーネル関数の引数 coef0SVM::POLY または SVM::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決定関数のインデックス。解く問題が回帰、1クラス、または2クラスの分類である場合、決定関数は1つだけとなり、インデックスは常に0でなければならない。それ以外のN クラス分類の場合は、 \(N(N-1)/2\) 個の決定関数が存在する。
alpha異なるサポートベクタに対応する重みを格納する省略可能な出力ベクタ。線形 SVM の場合、すべての alpha は 1 になる。
svidxサポートベクタの行列(SVM::getSupportVectors で取得可能)内のサポートベクタのインデックスを格納する省略可能な出力ベクタ。線形 SVM の場合、各決定関数は1つの「圧縮された」サポートベクタで構成される。

このメソッドは決定関数の rho 引数を返す。これはカーネル応答の重み付き和から減算されるスカラーである。

◆ getDefaultGrid()

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

SVM の引数用のグリッドを生成する。

引数
param_idSVM::ParamTypes のいずれかでなければならない SVM 引数の ID。この 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::ParamTypes のいずれかでなければならない SVM 引数の ID。この ID を持つ引数に対してグリッドが生成される。

この関数は SVM アルゴリズムの指定された引数に対するグリッドへのポインタを生成する。生成されたグリッドは関数 SVM::trainAuto に渡すことができる。

◆ getDegree()

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

カーネル関数の引数 degreeSVM::POLY に対して用いられる。デフォルト値は 0。

参照
setDegree

◆ getGamma()

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

カーネル関数の引数 \(\gamma\)。SVM::POLYSVM::RBFSVM::SIGMOID、または SVM::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_CLASS、または SVM::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 をディスクにシリアライズして保存するには SVM::save を使う。このファイルへのパスを指定してこの関数を呼び出すことで、このファイルから 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

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

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

事前定義されたカーネルのいずれかで初期化する。SVM::KernelTypes を参照。

◆ setNu()

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

参照
getNu

◆ setP()

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

参照
getP

◆ setTermCriteria()

virtual void cv::ml::SVM::setTermCriteria ( const cv::TermCriteria & val)
pure virtual
Python:
cv.ml.SVM.setTermCriteria(val) -> None

◆ setType()

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

最適な引数で SVM を学習する。

引数
dataTrainData::create または TrainData::loadFromCSV を用いて構築できる学習データ。
kFold交差検証の引数。学習セットは kFold 個のサブセットに分割される。1つのサブセットがモデルのテストに使われ、残りが学習セットを構成する。したがって SVM アルゴリズムは kFold 回実行される。
CgridC のグリッド
gammaGridgamma のグリッド
pGridp のグリッド
nuGridnu のグリッド
coeffGridcoeff のグリッド
degreeGriddegree のグリッド
balancedtrue で問題が2クラス分類である場合、このメソッドはよりバランスの取れた交差検証サブセットを生成する。すなわち、各サブセット内のクラス間の比率が学習データセット全体での比率に近くなる。

このメソッドは、最適な引数 C, gamma, p, nu, coef0, degree を選択することで SVM モデルを自動的に学習する。引数は、テストセット誤差の交差検証推定値が最小となるときに最適とみなされる。

ある引数を最適化する必要がない場合、対応するグリッドのステップを 1 以下の任意の値に設定する。例えば gamma の最適化を避けるには、gammaGrid.step = 0 を設定し、gammaGrid.minVal, gamma_grid.maxVal は任意の数とする。この場合、gamma には値 Gamma が用いられる。

そして最後に、ある引数の最適化が必要だが対応するグリッドが不明な場合は、関数 SVM::getDefaultGrid を呼び出すとよい。例えば gamma 用のグリッドを生成するには、SVM::getDefaultGrid(SVM::GAMMA) を呼び出す。

この関数は分類 (SVM::C_SVC または SVM::NU_SVC) でも回帰 (SVM::EPS_SVR または SVM::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 )
pure virtual
Python:
cv.ml.SVM.trainAuto(samples, layout, responses[, kFold[, Cgrid[, gammaGrid[, pGrid[, nuGrid[, coeffGrid[, degreeGrid[, balanced]]]]]]]]) -> retval

最適な引数で SVM を学習する。

引数
samples学習サンプル
layoutml::SampleTypes を参照。
responses学習サンプルに対応する応答のベクタ。
kFold交差検証の引数。学習セットは kFold 個のサブセットに分割される。1つのサブセットがモデルのテストに使われ、残りが学習セットを構成する。したがって SVM アルゴリズムは
CgridC のグリッド
gammaGridgamma のグリッド
pGridp のグリッド
nuGridnu のグリッド
coeffGridcoeff のグリッド
degreeGriddegree のグリッド
balancedtrue で問題が2クラス分類である場合、このメソッドはよりバランスの取れた交差検証サブセットを生成する。すなわち、各サブセット内のクラス間の比率が学習データセット全体での比率に近くなる。

このメソッドは、最適な引数 C, gamma, p, nu, coef0, degree を選択することで SVM モデルを自動的に学習する。引数は、テストセット誤差の交差検証推定値が最小となるときに最適とみなされる。

この関数は引数の最適化に SVM::getDefaultGrid のみを使用するため、基本的な引数オプションしか提供しない。

この関数は分類 (SVM::C_SVC または SVM::NU_SVC) でも回帰 (SVM::EPS_SVR または SVM::NU_SVR) でも機能する。SVM::ONE_CLASS の場合は最適化は行われず、params で指定された引数を持つ通常の SVM が実行される。


このクラス詳解は次のファイルから抽出されました: