OpenCV 4.11.0
开源计算机视觉
加载中…
搜索中…
无匹配项
cv::ml::EM 类参考抽象

此类实现期望最大化算法。更多…

#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继承的公有成员函数
 算法 ()
 
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 ( )
静态
Python
cv.ml.EM.create() -> 返回值
cv.ml.EM_create() -> 返回值

创建空的 EM 模型。然后应该使用 StatModel::train(traindata, flags) 方法训练该模型。或者,您可以使用 EM::train* 方法之一,或使用 Algorithm::load<EM>(filename) 从文件中加载它。

◆ getClustersNumber()

virtual int cv::ml::EM::getClustersNumber ( ) const
纯虚函数
Python
cv.ml.EM.getClustersNumber() -> 返回值

高斯混合模型中混合成分的数量。参数的默认值为 EM::DEFAULT_NCLUSTERS=5。一些 EM 实现可以在指定的值范围内确定最佳混合数量,但这在 ML 中还不是这种情况。

另请参见
setClustersNumber

◆ getCovarianceMatrixType()

virtual int cv::ml::EM::getCovarianceMatrixType ( ) const
纯虚函数
Python
cv.ml.EM.getCovarianceMatrixType() -> 返回值

协方差矩阵的约束,定义矩阵的类型。参见 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() -> 返回值

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

返回一个矩阵,其行数等于混合数,列数等于空间维度。

◆ getTermCriteria()

virtual TermCriteria cv::ml::EM::getTermCriteria ( ) const
纯虚函数
Python
cv.ml.EM.getTermCriteria() -> 返回值

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() -> 返回值

返回混合的权重。

返回一个向量,其元素数量等于混合的数量。

◆ load()

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

从文件中加载并创建一个序列化的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]]) -> retval, 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]) -> 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,则会将其转换为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均值算法估计。

与许多ML模型不同,EM是一种无监督学习算法,它不接受响应(类别标签或函数值)作为输入。相反,它从输入样本集中计算高斯混合参数的*最大似然估计*,并将所有参数存储在结构中:\(p_{i,k}\)在probs中,\(a_k\)在means中,\(S_k\)在covs[k]中,\(\pi_k\)在weights中,并且可以选择计算每个样本的输出“类别标签”:\(\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。

此类的文档是从以下文件生成的: