create_class_gmmT_create_class_gmmCreateClassGmmCreateClassGmmcreate_class_gmm创建类高斯混合模型(算子)

名称

create_class_gmmT_create_class_gmmCreateClassGmmCreateClassGmmcreate_class_gmm — 创建高斯混合模型进行分类。

签名

create_class_gmm( : : NumDim, NumClasses, NumCenters, CovarType, Preprocessing, NumComponents, RandSeed : GMMHandle)

Herror T_create_class_gmm(const Htuple NumDim, const Htuple NumClasses, const Htuple NumCenters, const Htuple CovarType, const Htuple Preprocessing, const Htuple NumComponents, const Htuple RandSeed, Htuple* GMMHandle)

void CreateClassGmm(const HTuple& NumDim, const HTuple& NumClasses, const HTuple& NumCenters, const HTuple& CovarType, const HTuple& Preprocessing, const HTuple& NumComponents, const HTuple& RandSeed, HTuple* GMMHandle)

void HClassGmm::HClassGmm(Hlong NumDim, Hlong NumClasses, const HTuple& NumCenters, const HString& CovarType, const HString& Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassGmm::HClassGmm(Hlong NumDim, Hlong NumClasses, Hlong NumCenters, const HString& CovarType, const HString& Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassGmm::HClassGmm(Hlong NumDim, Hlong NumClasses, Hlong NumCenters, const char* CovarType, const char* Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassGmm::HClassGmm(Hlong NumDim, Hlong NumClasses, Hlong NumCenters, const wchar_t* CovarType, const wchar_t* Preprocessing, Hlong NumComponents, Hlong RandSeed)   ( Windows only)

void HClassGmm::CreateClassGmm(Hlong NumDim, Hlong NumClasses, const HTuple& NumCenters, const HString& CovarType, const HString& Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassGmm::CreateClassGmm(Hlong NumDim, Hlong NumClasses, Hlong NumCenters, const HString& CovarType, const HString& Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassGmm::CreateClassGmm(Hlong NumDim, Hlong NumClasses, Hlong NumCenters, const char* CovarType, const char* Preprocessing, Hlong NumComponents, Hlong RandSeed)

void HClassGmm::CreateClassGmm(Hlong NumDim, Hlong NumClasses, Hlong NumCenters, const wchar_t* CovarType, const wchar_t* Preprocessing, Hlong NumComponents, Hlong RandSeed)   ( Windows only)

static void HOperatorSet.CreateClassGmm(HTuple numDim, HTuple numClasses, HTuple numCenters, HTuple covarType, HTuple preprocessing, HTuple numComponents, HTuple randSeed, out HTuple GMMHandle)

public HClassGmm(int numDim, int numClasses, HTuple numCenters, string covarType, string preprocessing, int numComponents, int randSeed)

public HClassGmm(int numDim, int numClasses, int numCenters, string covarType, string preprocessing, int numComponents, int randSeed)

void HClassGmm.CreateClassGmm(int numDim, int numClasses, HTuple numCenters, string covarType, string preprocessing, int numComponents, int randSeed)

void HClassGmm.CreateClassGmm(int numDim, int numClasses, int numCenters, string covarType, string preprocessing, int numComponents, int randSeed)

def create_class_gmm(num_dim: int, num_classes: int, num_centers: MaybeSequence[int], covar_type: str, preprocessing: str, num_components: int, rand_seed: int) -> HHandle

描述

create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmCreateClassGmmcreate_class_gmm 用于创建高斯混合模型(GMM)进行分类。NumDimNumDimNumDimNumDimnumDimnum_dim 指定特征空间的维数,NumClassesNumClassesNumClassesNumClassesnumClassesnum_classes 指定类别数量。GMM 由每个类别中的 NumCentersNumCentersNumCentersNumCentersnumCentersnum_centers高斯中心 组成。NumCentersNumCentersNumCentersNumCentersnumCentersnum_centers 不仅可以指定实际使用的中心数量,还可根据参数数量设定中心数量的上下限:

正好一个参数:

该参数决定所有类别将使用的确切中心数量。

正好两个参数:

第一个参数决定所有类别的最小中心数量,第二个参数决定所有类别的最大中心数量。

正好 个参数:

每组参数交替确定:第一个参数决定每类最小中心数量,第二个参数决定每类最大中心数量。

当指定上下限时,将借助最小消息长度准则(MML)确定最优中心数。通常建议以(过多)中心数作为上限、预期中心数作为下限开始训练。

每个中心由中心点 、协方差矩阵 和混合系数 这三个参数描述。这些参数通过期望最大化(EM:Expectation Maximization)算法从训练数据中计算得出。只要使用足够多的中心,GMM 就能近似任意概率密度函数。协方差矩阵 的维度为 NumDimNumDimNumDimNumDimnumDimnum_dim × NumDimNumDimNumDimNumDimnumDimnum_dim(若使用预处理则为 NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components × NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components),且具有对称性。可通过 CovarTypeCovarTypeCovarTypeCovarTypecovarTypecovar_type 指定更多约束条件:

CovarTypeCovarTypeCovarTypeCovarTypecovarTypecovar_type = 'spherical'"spherical""spherical""spherical""spherical""spherical" 时, 是单位矩阵的标量倍,即 。中心密度函数

CovarTypeCovarTypeCovarTypeCovarTypecovarTypecovar_type = 'diag'"diag""diag""diag""diag""diag" 时, 为对角矩阵 中心密度函数

CovarTypeCovarTypeCovarTypeCovarTypecovarTypecovar_type = 'full'"full""full""full""full""full" 时, 为正定矩阵。中心密度函数

随着协方差类型从 CovarTypeCovarTypeCovarTypeCovarTypecovarTypecovar_type = 'spherical'"spherical""spherical""spherical""spherical""spherical"CovarTypeCovarTypeCovarTypeCovarTypecovarTypecovar_type = 'diag'"diag""diag""diag""diag""diag" 再到 CovarTypeCovarTypeCovarTypeCovarTypecovarTypecovar_type = 'full'"full""full""full""full""full",计算复杂度逐渐增加。与此同时,中心点的灵活性也随之提升。因此,通常情况下,'spherical'"spherical""spherical""spherical""spherical""spherical" 模式所需的 NumCentersNumCentersNumCentersNumCentersnumCentersnum_centers 值会高于 'full'"full""full""full""full""full" 模式。

使用 GMM 的步骤如下:首先通过 create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmCreateClassGmmcreate_class_gmm 创建一个 GMM 模型。随后使用 add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmmAddSampleClassGmmadd_sample_class_gmm 添加训练样本向量,之后可通过 write_samples_class_gmmwrite_samples_class_gmmWriteSamplesClassGmmWriteSamplesClassGmmWriteSamplesClassGmmwrite_samples_class_gmm 将样本写入磁盘。借助 train_class_gmmtrain_class_gmmTrainClassGmmTrainClassGmmTrainClassGmmtrain_class_gmm 确定分类器中心参数(如上所述)。此外,可使用 write_class_gmmwrite_class_gmmWriteClassGmmWriteClassGmmWriteClassGmmwrite_class_gmm 保存这些参数以供后续分类使用。

根据混合概率 和中心密度函数 ,概率密度函数 p(x) 可通过以下公式计算:

概率密度函数 p(x) 可通过 evaluate_class_gmmevaluate_class_gmmEvaluateClassGmmEvaluateClassGmmEvaluateClassGmmevaluate_class_gmm 对特征向量 x 进行评估。classify_class_gmmclassify_class_gmmClassifyClassGmmClassifyClassGmmClassifyClassGmmclassify_class_gmm 对 p(x) 进行排序,从而发现特征向量最可能的类别。

参数 PreprocessingPreprocessingPreprocessingPreprocessingpreprocessingpreprocessingNumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components 可用于对训练数据进行预处理并降低其维度。这些参数的说明详见算子 create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlpcreate_class_mlp 的描述。

create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmCreateClassGmmcreate_class_gmm 使用随机数初始化中心坐标。为确保 train_class_gmmtrain_class_gmmTrainClassGmmTrainClassGmmTrainClassGmmtrain_class_gmm 训练分类器时结果可重复,需通过 RandSeedRandSeedRandSeedRandSeedrandSeedrand_seed 传递随机数生成器的种子值。

执行信息

此算子返回一个句柄。请注意,即使该句柄被用作特定算子的输入参数,这些算子仍可能改变此句柄类型的实例状态。

参数

NumDimNumDimNumDimNumDimnumDimnum_dim (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

特征空间的维数。

默认值: 3

建议值: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100

限制: NumDim >= 1

NumClassesNumClassesNumClassesNumClassesnumClassesnum_classes (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

GMM 的类数。

默认值: 5

建议值: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

限制: NumClasses >= 1

NumCentersNumCentersNumCentersNumCentersnumCentersnum_centers (输入控制)  integer(-array) HTupleMaybeSequence[int]HTupleHtuple (integer) (int / long) (Hlong) (Hlong)

每类中心的数量。

默认值: 1

建议值: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30

限制: NumClasses >= 1

CovarTypeCovarTypeCovarTypeCovarTypecovarTypecovar_type (输入控制)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

协方差矩阵的类型。

默认值: 'spherical' "spherical" "spherical" "spherical" "spherical" "spherical"

值列表: 'diag'"diag""diag""diag""diag""diag", 'full'"full""full""full""full""full", 'spherical'"spherical""spherical""spherical""spherical""spherical"

PreprocessingPreprocessingPreprocessingPreprocessingpreprocessingpreprocessing (输入控制)  string HTuplestrHTupleHtuple (string) (string) (HString) (char*)

用于转换特征向量的预处理类型。

默认值: 'normalization' "normalization" "normalization" "normalization" "normalization" "normalization"

值列表: 'canonical_variates'"canonical_variates""canonical_variates""canonical_variates""canonical_variates""canonical_variates", 'none'"none""none""none""none""none", 'normalization'"normalization""normalization""normalization""normalization""normalization", 'principal_components'"principal_components""principal_components""principal_components""principal_components""principal_components"

NumComponentsNumComponentsNumComponentsNumComponentsnumComponentsnum_components (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

预处理参数:转换特征的数量(当 PreprocessingPreprocessingPreprocessingPreprocessingpreprocessingpreprocessing = 'none'"none""none""none""none""none"PreprocessingPreprocessingPreprocessingPreprocessingpreprocessingpreprocessing = 'normalization'"normalization""normalization""normalization""normalization""normalization" 时忽略此参数)。

默认值: 10

建议值: 1, 2, 3, 4, 5, 8, 10, 15, 20, 30, 40, 50, 60, 70, 80, 90, 100

限制: NumComponents >= 1

RandSeedRandSeedRandSeedRandSeedrandSeedrand_seed (输入控制)  integer HTupleintHTupleHtuple (integer) (int / long) (Hlong) (Hlong)

用于以随机值初始化 GMM 的随机数生成器的种子值。

默认值: 42

GMMHandleGMMHandleGMMHandleGMMHandleGMMHandlegmmhandle (输出控制)  class_gmm HClassGmm, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

GMM 句柄。

示例(HDevelop)

* Classification with Gaussian Mixture Models
create_class_gmm (NumDim , NumClasses, [1,5], 'full', 'none',\
                  NumComponents, 42, GMMHandle)
* Add the training data
for J := 0 to NumData-1 by 1
    * Features := [...]
    * ClassID := [...]
    add_sample_class_gmm (GMMHandle, Features, ClassID, Randomize)
endfor
* Train the GMM
train_class_gmm (GMMHandle, 100, 0.001, 'training', 0.0001, Centers, Iter)
* Classify unknown data in 'Features'
classify_class_gmm (GMMHandle, Features, 1, ID, Prob, Density, KSigmaProb)

结果

如果参数有效,算子 create_class_gmmcreate_class_gmmCreateClassGmmCreateClassGmmCreateClassGmmcreate_class_gmm 返回值 2 (H_MSG_TRUE)。如有必要,则抛出异常。

可能的后继

add_sample_class_gmmadd_sample_class_gmmAddSampleClassGmmAddSampleClassGmmAddSampleClassGmmadd_sample_class_gmm, add_samples_image_class_gmmadd_samples_image_class_gmmAddSamplesImageClassGmmAddSamplesImageClassGmmAddSamplesImageClassGmmadd_samples_image_class_gmm

替代

create_class_mlpcreate_class_mlpCreateClassMlpCreateClassMlpCreateClassMlpcreate_class_mlp, create_class_svmcreate_class_svmCreateClassSvmCreateClassSvmCreateClassSvmcreate_class_svm

另见

clear_class_gmmclear_class_gmmClearClassGmmClearClassGmmClearClassGmmclear_class_gmm, train_class_gmmtrain_class_gmmTrainClassGmmTrainClassGmmTrainClassGmmtrain_class_gmm, classify_class_gmmclassify_class_gmmClassifyClassGmmClassifyClassGmmClassifyClassGmmclassify_class_gmm, evaluate_class_gmmevaluate_class_gmmEvaluateClassGmmEvaluateClassGmmEvaluateClassGmmevaluate_class_gmm, classify_image_class_gmmclassify_image_class_gmmClassifyImageClassGmmClassifyImageClassGmmClassifyImageClassGmmclassify_image_class_gmm

参考文献

Christopher M. Bishop: “Neural Networks for Pattern Recognition”; Oxford University Press, Oxford; 1995.
Mario A.T. Figueiredo: “Unsupervised Learning of Finite Mixture Models”; IEEE Transactions on Pattern Analysis and Machine Intelligence, Vol. 24, No. 3; March 2002.

模块

基础