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