此类实现期望最大化算法。更多…
#include <opencv2/ml.hpp>
|
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 |
| 从样本集估计高斯混合参数。
|
|
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) |
| 训练统计模型。
|
|
| 算法 () |
|
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 |
|
◆ 匿名枚举
默认参数。
枚举器 |
---|
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( | | ) -> | 返回值 |
◆ getClustersNumber()
virtual int cv::ml::EM::getClustersNumber |
( |
| ) |
const |
|
纯虚函数 |
Python |
---|
| cv.ml.EM.getClustersNumber( | | ) -> | 返回值 |
◆ getCovarianceMatrixType()
virtual int cv::ml::EM::getCovarianceMatrixType |
( |
| ) |
const |
|
纯虚函数 |
Python |
---|
| cv.ml.EM.getCovarianceMatrixType( | | ) -> | 返回值 |
◆ 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()
Python |
---|
| cv.ml.EM.getTermCriteria( | | ) -> | 返回值 |
◆ getWeights()
virtual Mat cv::ml::EM::getWeights |
( |
| ) |
const |
|
纯虚函数 |
Python |
---|
| cv.ml.EM.getWeights( | | ) -> | 返回值 |
返回混合的权重。
返回一个向量,其元素数量等于混合的数量。
◆ load()
Python |
---|
| cv.ml.EM.load( | filepath[, nodeName] | ) -> | 返回值 |
| cv.ml.EM_load( | filepath[, nodeName] | ) -> | 返回值 |
从文件中加载并创建一个序列化的EM。
使用 EM::save 将 EM 序列化并存储到磁盘。通过使用文件的路径调用此函数,再次从该文件中加载 EM。可以选择指定包含分类器的文件的节点。
- 参数
-
filepath | 序列化 EM 的路径 |
nodeName | 包含分类器的节点名称 |
◆ predict()
Python |
---|
| cv.ml.EM.predict( | samples[, results[, flags]] | ) -> | retval, results |
返回提供的样本的后验概率。
- 参数
-
samples | 输入样本,浮点矩阵 |
results | 可选输出 \( nSamples \times nClusters\) 结果矩阵。它包含输入中每个样本的后验概率。 |
flags | 此参数将被忽略 |
实现 cv::ml::StatModel。
◆ predict2()
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 | ) -> | 无 |
◆ 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 | ) -> | 无 |
◆ trainE()
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()
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()
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。 |
此类的文档是从以下文件生成的: