OpenCV 4.13.0
開源計算機視覺庫 (Open Source Computer Vision)
正在載入...
正在搜尋...
未找到匹配項
cv::ml::EM 類參考abstract

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

#include <opencv2/ml.hpp>

cv::ml::EM 的協作圖

公開型別

enum  {
  DEFAULT_NCLUSTERS =5 ,
  DEFAULT_MAX_ITERS =100
}
 預設引數。更多...
 
enum  {
  START_E_STEP =1 ,
  START_M_STEP =2 ,
  START_AUTO_STEP =0
}
 初始步驟。更多...
 
enum  型別 {
  COV_MAT_SPHERICAL =0 ,
  COV_MAT_DIAGONAL =1 ,
  COV_MAT_GENERIC =2 ,
  COV_MAT_DEFAULT =COV_MAT_DIAGONAL
}
 協方差矩陣的型別。更多...
 
- 從 cv::ml::StatModel 繼承的公共型別
enum  標誌 {
  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, OutputArray 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
 

詳細說明

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

另請參閱
期望最大化

成員列舉文件

◆ 匿名列舉

匿名列舉

預設引數。

列舉值 (Enumerator)
DEFAULT_NCLUSTERS 
DEFAULT_MAX_ITERS 

◆ 匿名列舉

匿名列舉

初始步驟。

列舉值 (Enumerator)
START_E_STEP 
START_M_STEP 
START_AUTO_STEP 

◆ 型別

協方差矩陣的型別。

列舉值 (Enumerator)
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::save 將 EM 序列化並存儲到磁碟。透過呼叫此函式並提供檔案路徑,再次從該檔案中載入 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]]) -> 返回值, results

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

引數
samples (樣本)輸入樣本,浮點矩陣
results可選的輸出結果矩陣 \( 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]) -> 返回值, 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) -> None

另請參閱
getClustersNumber

◆ setCovarianceMatrixType()

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

◆ setTermCriteria()

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

另請參閱
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]]]]]) -> 返回值, 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]]]) -> 返回值, 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]]]) -> 返回值, 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。

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