create_class_gmm T_create_class_gmm CreateClassGmm CreateClassGmm create_class_gmm 创建类高斯混合模型(算子)
名称
create_class_gmm T_create_class_gmm CreateClassGmm CreateClassGmm create_class_gmm — 创建高斯混合模型进行分类。
签名
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 )
描述
create_class_gmm create_class_gmm CreateClassGmm CreateClassGmm CreateClassGmm create_class_gmm 用于创建高斯混合模型(GMM)进行分类。NumDim NumDim NumDim NumDim numDim num_dim 指定特征空间的维数,NumClasses NumClasses NumClasses NumClasses numClasses num_classes 指定类别数量。GMM 由每个类别中的 NumCenters NumCenters NumCenters NumCenters numCenters num_centers 个 高斯中心 组成。NumCenters NumCenters NumCenters NumCenters numCenters num_centers 不仅可以指定实际使用的中心数量,还可根据参数数量设定中心数量的上下限:
正好一个参数:
该参数决定所有类别将使用的确切中心数量。
正好两个参数:
第一个参数决定所有类别的最小中心数量,第二个参数决定所有类别的最大中心数量。
正好
个参数:
每组参数交替确定:第一个参数决定每类最小中心数量,第二个参数决定每类最大中心数量。
当指定上下限时,将借助最小消息长度准则(MML)确定最优中心数。通常建议以(过多)中心数作为上限、预期中心数作为下限开始训练。
每个中心由中心点
、协方差矩阵
和混合系数
这三个参数描述。这些参数通过期望最大化(EM:Expectation Maximization)算法从训练数据中计算得出。只要使用足够多的中心,GMM 就能近似任意概率密度函数。协方差矩阵
的维度为 NumDim NumDim NumDim NumDim numDim num_dim
× NumDim NumDim NumDim NumDim numDim num_dim (若使用预处理则为 NumComponents NumComponents NumComponents NumComponents numComponents num_components
× NumComponents NumComponents NumComponents NumComponents numComponents num_components ),且具有对称性。可通过
CovarType CovarType CovarType CovarType covarType covar_type 指定更多约束条件:
当 CovarType CovarType CovarType CovarType covarType covar_type = 'spherical' "spherical" "spherical" "spherical" "spherical" "spherical" 时,
是单位矩阵的标量倍,即
。中心密度函数
为
当 CovarType CovarType CovarType CovarType covarType covar_type = 'diag' "diag" "diag" "diag" "diag" "diag" 时,
为对角矩阵
中心密度函数
是
当 CovarType CovarType CovarType CovarType covarType covar_type = 'full' "full" "full" "full" "full" "full" 时,
为正定矩阵。中心密度函数
是
随着协方差类型从 CovarType CovarType CovarType CovarType covarType covar_type
= 'spherical' "spherical" "spherical" "spherical" "spherical" "spherical" 到 CovarType CovarType CovarType CovarType covarType covar_type = 'diag' "diag" "diag" "diag" "diag" "diag"
再到 CovarType CovarType CovarType CovarType covarType covar_type = 'full' "full" "full" "full" "full" "full" ,计算复杂度逐渐增加。与此同时,中心点的灵活性也随之提升。因此,通常情况下,'spherical' "spherical" "spherical" "spherical" "spherical" "spherical" 模式所需的
NumCenters NumCenters NumCenters NumCenters numCenters num_centers 值会高于 'full' "full" "full" "full" "full" "full" 模式。
使用 GMM 的步骤如下:首先通过
create_class_gmm create_class_gmm CreateClassGmm CreateClassGmm CreateClassGmm create_class_gmm 创建一个 GMM 模型。随后使用
add_sample_class_gmm add_sample_class_gmm AddSampleClassGmm AddSampleClassGmm AddSampleClassGmm add_sample_class_gmm 添加训练样本向量,之后可通过 write_samples_class_gmm write_samples_class_gmm WriteSamplesClassGmm WriteSamplesClassGmm WriteSamplesClassGmm write_samples_class_gmm 将样本写入磁盘。借助 train_class_gmm train_class_gmm TrainClassGmm TrainClassGmm TrainClassGmm train_class_gmm
确定分类器中心参数(如上所述)。此外,可使用 write_class_gmm write_class_gmm WriteClassGmm WriteClassGmm WriteClassGmm write_class_gmm 保存这些参数以供后续分类使用。
根据混合概率
和中心密度函数
,概率密度函数 p(x) 可通过以下公式计算:
概率密度函数 p(x) 可通过 evaluate_class_gmm evaluate_class_gmm EvaluateClassGmm EvaluateClassGmm EvaluateClassGmm evaluate_class_gmm 对特征向量 x 进行评估。classify_class_gmm classify_class_gmm ClassifyClassGmm ClassifyClassGmm ClassifyClassGmm classify_class_gmm 对 p(x) 进行排序,从而发现特征向量最可能的类别。
参数 Preprocessing Preprocessing Preprocessing Preprocessing preprocessing preprocessing 和 NumComponents NumComponents NumComponents NumComponents numComponents num_components 可用于对训练数据进行预处理并降低其维度。这些参数的说明详见算子
create_class_mlp create_class_mlp CreateClassMlp CreateClassMlp CreateClassMlp create_class_mlp 的描述。
create_class_gmm create_class_gmm CreateClassGmm CreateClassGmm CreateClassGmm create_class_gmm 使用随机数初始化中心坐标。为确保 train_class_gmm train_class_gmm TrainClassGmm TrainClassGmm TrainClassGmm train_class_gmm 训练分类器时结果可重复,需通过
RandSeed RandSeed RandSeed RandSeed randSeed rand_seed 传递随机数生成器的种子值。
执行信息
多线程类型:可重入(与非独占算子并行运行)。
多线程作用域:全局(可从任何线程调用)。
未采用并行化处理。
此算子返回一个句柄。请注意,即使该句柄被用作特定算子的输入参数,这些算子仍可能改变此句柄类型的实例状态。
参数
NumDim NumDim NumDim NumDim numDim num_dim (输入控制) integer → HTuple int HTuple Htuple (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
NumClasses NumClasses NumClasses NumClasses numClasses num_classes (输入控制) integer → HTuple int HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
GMM 的类数。
默认值:
5
建议值:
1, 2, 3, 4, 5, 6, 7, 8, 9, 10
限制:
NumClasses >= 1
NumCenters NumCenters NumCenters NumCenters numCenters num_centers (输入控制) integer(-array) → HTuple MaybeSequence[int] HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
每类中心的数量。
默认值:
1
建议值:
1, 2, 3, 4, 5, 8, 10, 15, 20, 30
限制:
NumClasses >= 1
CovarType CovarType CovarType CovarType covarType covar_type (输入控制) string → HTuple str HTuple Htuple (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"
Preprocessing Preprocessing Preprocessing Preprocessing preprocessing preprocessing (输入控制) string → HTuple str HTuple Htuple (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"
NumComponents NumComponents NumComponents NumComponents numComponents num_components (输入控制) integer → HTuple int HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
预处理参数:转换特征的数量(当 Preprocessing Preprocessing Preprocessing Preprocessing preprocessing preprocessing
= 'none' "none" "none" "none" "none" "none" 和 Preprocessing Preprocessing Preprocessing Preprocessing preprocessing preprocessing
= '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
RandSeed RandSeed RandSeed RandSeed randSeed rand_seed (输入控制) integer → HTuple int HTuple Htuple (integer) (int / long) (Hlong ) (Hlong )
用于以随机值初始化 GMM 的随机数生成器的种子值。
默认值:
42
GMMHandle GMMHandle GMMHandle GMMHandle GMMHandle gmmhandle (输出控制) class_gmm → HClassGmm , HTuple HHandle HTuple Htuple (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_gmm create_class_gmm CreateClassGmm CreateClassGmm CreateClassGmm create_class_gmm 返回值 2 (H_MSG_TRUE )。如有必要,则抛出异常。
可能的后继
add_sample_class_gmm add_sample_class_gmm AddSampleClassGmm AddSampleClassGmm AddSampleClassGmm add_sample_class_gmm ,
add_samples_image_class_gmm add_samples_image_class_gmm AddSamplesImageClassGmm AddSamplesImageClassGmm AddSamplesImageClassGmm add_samples_image_class_gmm
替代
create_class_mlp create_class_mlp CreateClassMlp CreateClassMlp CreateClassMlp create_class_mlp ,
create_class_svm create_class_svm CreateClassSvm CreateClassSvm CreateClassSvm create_class_svm
另见
clear_class_gmm clear_class_gmm ClearClassGmm ClearClassGmm ClearClassGmm clear_class_gmm ,
train_class_gmm train_class_gmm TrainClassGmm TrainClassGmm TrainClassGmm train_class_gmm ,
classify_class_gmm classify_class_gmm ClassifyClassGmm ClassifyClassGmm ClassifyClassGmm classify_class_gmm ,
evaluate_class_gmm evaluate_class_gmm EvaluateClassGmm EvaluateClassGmm EvaluateClassGmm evaluate_class_gmm ,
classify_image_class_gmm classify_image_class_gmm ClassifyImageClassGmm ClassifyImageClassGmm ClassifyImageClassGmm classify_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.
模块
基础