OpenCV 4.12.0
開源計算機視覺
載入中...
搜尋中...
無匹配項
cv::ml::EM 類參考abstract

該類實現了期望最大化演算法。 更多...

#include <opencv2/ml.hpp>

cv::ml::EM 協作圖

公共型別

列舉  {
  DEFAULT_NCLUSTERS =5 ,
  DEFAULT_MAX_ITERS =100
}
 預設引數。 更多...
 
列舉  {
  START_E_STEP =1 ,
  START_M_STEP =2 ,
  START_AUTO_STEP =0
}
 初始步驟。 更多...
 
列舉  型別 {
  COV_MAT_SPHERICAL =0 ,
  COV_MAT_DIAGONAL =1 ,
  COV_MAT_GENERIC =2 ,
  COV_MAT_DEFAULT =COV_MAT_DIAGONAL
}
 協方差矩陣的型別。 更多...
 
- 繼承自 cv::ml::StatModel 的公共型別
列舉  標誌 {
  UPDATE_MODEL = 1 ,
  RAW_OUTPUT =1 ,
  COMPRESSED_INPUT =2 ,
  PREPROCESSED_INPUT =4
}
 

公共成員函式

virtual int getClustersNumber () const =0
 
virtual int getCovarianceMatrixType () const =0
 
virtual void getCovs (std::vector< Mat > &covs) const =0
 返回協方差矩陣。
 
virtual Mat getMeans () const =0
 返回聚類中心(高斯混合的均值)
 
virtual TermCriteria getTermCriteria () const =0
 
virtual Mat getWeights () const =0
 返回混合物的權重。
 
virtual float predict (InputArray samples, OutputArray results=noArray(), int flags=0) const CV_OVERRIDE=0
 返回所提供樣本的後驗機率。
 
virtual Vec2d predict2 (InputArray sample, OutputArray probs) const =0
 返回給定樣本的似然對數值和最可能混合分量的索引。
 
virtual void setClustersNumber (int val)=0
 
virtual void setCovarianceMatrixType (int val)=0
 
virtual void setTermCriteria (const TermCriteria &val)=0
 
virtual bool trainE (InputArray samples, InputArray means0, InputArray covs0=noArray(), InputArray weights0=noArray(), OutputArray logLikelihoods=noArray(), OutputArray labels=noArray(), OutputArray probs=noArray())=0
 從樣本集估計高斯混合引數。
 
virtual bool trainEM (InputArray samples, OutputArray logLikelihoods=noArray(), OutputArray labels=noArray(), OutputArray probs=noArray())=0
 從樣本集估計高斯混合引數。
 
virtual bool trainM (InputArray samples, InputArray probs0, OutputArray logLikelihoods=noArray(), OutputArray labels=noArray(), OutputArray probs=noArray())=0
 從樣本集估計高斯混合引數。
 
- 繼承自 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 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< EMcreate ()
 
static Ptr< EMload (const String &filepath, const String &nodeName=String())
 從檔案載入並建立一個序列化的 EM
 
- 繼承自 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
 

詳細描述

此類實現期望最大化演算法。

另請參見
期望最大化

成員列舉文件

◆ 匿名列舉

匿名列舉

預設引數。

列舉器
DEFAULT_NCLUSTERS 
DEFAULT_MAX_ITERS 

◆ 匿名列舉

匿名列舉

初始步驟。

列舉器
START_E_STEP 
START_M_STEP 
START_AUTO_STEP 

◆ 型別

協方差矩陣的型別。

列舉器
COV_MAT_SPHERICAL 

一個縮放的單位矩陣 \(\mu_k * I\)。每個矩陣只有一個引數 \(\mu_k\) 需要估計。此選項可用於約束相關聯的特殊情況,或作為最佳化的第一步(例如,當資料透過 PCA 預處理時)。此類初步估計的結果可以再次傳遞給最佳化過程,此時 covMatType=EM::COV_MAT_DIAGONAL

COV_MAT_DIAGONAL 

具有正對角元素的對角矩陣。每個矩陣的自由引數數量為 d。這是最常用的選項,可產生良好的估計結果。

COV_MAT_GENERIC 

一個對稱正定矩陣。每個矩陣中的自由引數數量約為 \(d^2/2\)。不建議使用此選項,除非有相當準確的引數初始估計和/或大量的訓練樣本。

COV_MAT_DEFAULT 

成員函式文件

◆ create()

static Ptr< EM > cv::ml::EM::create ( )
static
Python
cv.ml.EM.create() -> retval
cv.ml.EM_create() -> retval

建立空的 EM 模型。然後應使用 StatModel::train(traindata, flags) 方法訓練該模型。或者,您可以使用 EM::train* 方法之一,或使用 Algorithm::load<EM>(filename) 從檔案載入它。

◆ getClustersNumber()

virtual int cv::ml::EM::getClustersNumber ( ) const
純虛擬函式
Python
cv.ml.EM.getClustersNumber() -> retval

高斯混合模型中的混合分量數量。引數的預設值為 EM::DEFAULT_NCLUSTERS=5。某些 EM 實現可以在指定值範圍內確定最佳混合數量,但這在 ML 中尚未實現。

另請參見
setClustersNumber

◆ getCovarianceMatrixType()

virtual int cv::ml::EM::getCovarianceMatrixType ( ) const
純虛擬函式
Python
cv.ml.EM.getCovarianceMatrixType() -> retval

協方差矩陣的約束,定義了矩陣的型別。參見 EM::Types

另請參見
setCovarianceMatrixType

◆ getCovs()

virtual void cv::ml::EM::getCovs ( std::vector< Mat > & covs) const
純虛擬函式
Python
cv.ml.EM.getCovs([, covs]) -> covs

返回協方差矩陣。

返回協方差矩陣向量。矩陣的數量是高斯混合的數量,每個矩陣都是一個 NxN 的浮點方陣,其中 N 是空間維度。

◆ getMeans()

virtual Mat cv::ml::EM::getMeans ( ) const
純虛擬函式
Python
cv.ml.EM.getMeans() -> retval

返回聚類中心(高斯混合的均值)

返回一個矩陣,其行數等於混合物數量,列數等於空間維度。

◆ getTermCriteria()

virtual TermCriteria cv::ml::EM::getTermCriteria ( ) const
純虛擬函式
Python
cv.ml.EM.getTermCriteria() -> retval

EM 演算法的終止準則。EM 演算法可以透過迭代次數 termCrit.maxCount(M 步數)或當似然對數的相對變化小於 termCrit.epsilon 時終止。預設最大迭代次數為 EM::DEFAULT_MAX_ITERS=100。

另請參見
setTermCriteria

◆ getWeights()

virtual Mat cv::ml::EM::getWeights ( ) const
純虛擬函式
Python
cv.ml.EM.getWeights() -> retval

返回混合物的權重。

返回一個向量,其元素數量等於混合物數量。

◆ load()

static Ptr< EM > cv::ml::EM::load ( const String & filepath,
const String & nodeName = String() )
static
Python
cv.ml.EM.load(filepath[, nodeName]) -> retval
cv.ml.EM_load(filepath[, nodeName]) -> retval

從檔案載入並建立一個序列化的 EM

使用 EM::saveEM 序列化並存儲到磁碟。透過呼叫此函式並提供檔案路徑,可以再次從該檔案載入 EM。可選地指定包含分類器的檔案節點。

引數
filepath序列化 EM 的路徑
nodeName包含分類器的節點的名稱

◆ predict()

virtual float cv::ml::EM::predict ( InputArray samples,
OutputArray results = noArray(),
int flags = 0 ) const
純虛擬函式
Python
cv.ml.EM.predict(samples[, results[, flags]]) -> retval, results

返回所提供樣本的後驗機率。

引數
samples輸入樣本,浮點矩陣
結果可選的輸出 \( nSamples \times nClusters\) 結果矩陣。它包含輸入中每個樣本的後驗機率。
flags此引數將被忽略

實現了 cv::ml::StatModel

此函式的呼叫圖如下

◆ predict2()

virtual Vec2d cv::ml::EM::predict2 ( InputArray sample,
OutputArray probs ) const
純虛擬函式
Python
cv.ml.EM.predict2(sample[, probs]) -> retval, probs

返回給定樣本的似然對數值和最可能混合分量的索引。

引數
sample用於分類的樣本。它應該是一個 \(1 \times dims\) 或 \(dims \times 1\) 大小的單通道矩陣。
probs可選的輸出矩陣,包含給定樣本的每個分量的後驗機率。它的大小為 \(1 \times nclusters\) 且型別為 CV_64FC1。

該方法返回一個包含兩個元素的雙精度向量。零元素是樣本的似然對數值。第一個元素是給定樣本最可能混合分量的索引。

◆ setClustersNumber()

virtual void cv::ml::EM::setClustersNumber ( int val)
純虛擬函式
Python
cv.ml.EM.setClustersNumber(val) ->

另請參見
getClustersNumber

◆ setCovarianceMatrixType()

virtual void cv::ml::EM::setCovarianceMatrixType ( int val)
純虛擬函式
Python
cv.ml.EM.setCovarianceMatrixType(val) ->

◆ setTermCriteria()

virtual void cv::ml::EM::setTermCriteria ( const TermCriteria & val)
純虛擬函式
Python
cv.ml.EM.setTermCriteria(val) ->

另請參見
getTermCriteria

◆ trainE()

virtual bool cv::ml::EM::trainE ( InputArray samples,
InputArray means0,
InputArray covs0 = noArray(),
InputArray weights0 = noArray(),
OutputArray logLikelihoods = noArray(),
OutputArray labels = noArray(),
OutputArray probs = noArray() )
純虛擬函式
Python
cv.ml.EM.trainE(samples, means0[, covs0[, weights0[, logLikelihoods[, labels[, probs]]]]]) -> retval, logLikelihoods, labels, probs

從樣本集估計高斯混合引數。

此變體從期望步開始。您需要提供混合分量的初始均值 \(a_k\)。可選地,您可以傳遞混合分量的初始權重 \(\pi_k\) 和協方差矩陣 \(S_k\)。

引數
samples將估計高斯混合模型的樣本。它應該是一個單通道矩陣,每行是一個樣本。如果矩陣不是 CV_64F 型別,它將被轉換為該型別的內部矩陣以供進一步計算。
means0混合分量的初始均值 \(a_k\)。它是一個 \(nclusters \times dims\) 大小的單通道矩陣。如果矩陣不是 CV_64F 型別,它將被轉換為該型別的內部矩陣以供進一步計算。
covs0混合分量的初始協方差矩陣 \(S_k\) 的向量。每個協方差矩陣都是一個 \(dims \times dims\) 大小的單通道矩陣。如果矩陣不是 CV_64F 型別,它們將被轉換為該型別的內部矩陣以供進一步計算。
weights0混合分量的初始權重 \(\pi_k\)。它應該是一個 \(1 \times nclusters\) 或 \(nclusters \times 1\) 大小的單通道浮點矩陣。
logLikelihoods可選的輸出矩陣,包含每個樣本的似然對數值。它的大小為 \(nsamples \times 1\) 且型別為 CV_64FC1。
labels每個樣本的可選輸出“類別標籤”:\(\texttt{labels}_i=\texttt{arg max}_k(p_{i,k}), i=1..N\)(每個樣本最可能混合分量的索引)。它的大小為 \(nsamples \times 1\) 且型別為 CV_32SC1。
probs可選的輸出矩陣,包含給定每個樣本的每個高斯混合分量的後驗機率。它的大小為 \(nsamples \times nclusters\) 且型別為 CV_64FC1。

◆ trainEM()

virtual bool cv::ml::EM::trainEM ( InputArray samples,
OutputArray logLikelihoods = noArray(),
OutputArray labels = noArray(),
OutputArray probs = noArray() )
純虛擬函式
Python
cv.ml.EM.trainEM(samples[, logLikelihoods[, labels[, probs]]]) -> retval, logLikelihoods, labels, probs

從樣本集估計高斯混合引數。

此變體從期望步開始。模型引數的初始值將透過 k-means 演算法估計。

與許多 ML 模型不同,EM 是一種無監督學習演算法,它不將響應(類別標籤或函式值)作為輸入。相反,它從輸入樣本集計算高斯混合引數的*最大似然估計*,並將所有引數儲存在結構中:probs 中的 \(p_{i,k}\),means 中的 \(a_k\),covs[k] 中的 \(S_k\),weights 中的 \(\pi_k\),並可選地計算每個樣本的輸出“類別標籤”:\(\texttt{labels}_i=\texttt{arg max}_k(p_{i,k}), i=1..N\)(每個樣本最可能混合分量的索引)。

訓練好的模型可以像其他任何分類器一樣用於預測。訓練好的模型類似於 NormalBayesClassifier

引數
samples將估計高斯混合模型的樣本。它應該是一個單通道矩陣,每行是一個樣本。如果矩陣不是 CV_64F 型別,它將被轉換為該型別的內部矩陣以供進一步計算。
logLikelihoods可選的輸出矩陣,包含每個樣本的似然對數值。它的大小為 \(nsamples \times 1\) 且型別為 CV_64FC1。
labels每個樣本的可選輸出“類別標籤”:\(\texttt{labels}_i=\texttt{arg max}_k(p_{i,k}), i=1..N\)(每個樣本最可能混合分量的索引)。它的大小為 \(nsamples \times 1\) 且型別為 CV_32SC1。
probs可選的輸出矩陣,包含給定每個樣本的每個高斯混合分量的後驗機率。它的大小為 \(nsamples \times nclusters\) 且型別為 CV_64FC1。

◆ trainM()

virtual bool cv::ml::EM::trainM ( InputArray samples,
InputArray probs0,
OutputArray logLikelihoods = noArray(),
OutputArray labels = noArray(),
OutputArray probs = noArray() )
純虛擬函式
Python
cv.ml.EM.trainM(samples, probs0[, logLikelihoods[, labels[, probs]]]) -> retval, logLikelihoods, labels, probs

從樣本集估計高斯混合引數。

此變體從最大化步開始。您需要提供初始機率 \(p_{i,k}\) 才能使用此選項。

引數
samples將估計高斯混合模型的樣本。它應該是一個單通道矩陣,每行是一個樣本。如果矩陣不是 CV_64F 型別,它將被轉換為該型別的內部矩陣以供進一步計算。
probs0機率
logLikelihoods可選的輸出矩陣,包含每個樣本的似然對數值。它的大小為 \(nsamples \times 1\) 且型別為 CV_64FC1。
labels每個樣本的可選輸出“類別標籤”:\(\texttt{labels}_i=\texttt{arg max}_k(p_{i,k}), i=1..N\)(每個樣本最可能混合分量的索引)。它的大小為 \(nsamples \times 1\) 且型別為 CV_32SC1。
probs可選的輸出矩陣,包含給定每個樣本的每個高斯混合分量的後驗機率。它的大小為 \(nsamples \times nclusters\) 且型別為 CV_64FC1。

此類的文件是從以下檔案生成的