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。

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