gmm

语法

gmm(X, k, [maxIter=300], [tolerance=1e-4], [randomSeed], [mean], [sigma])

参数

X 训练数据集。若为一元数据,则 X 是一个向量;若为多元数据,则 X 是一个矩阵或表,矩阵的每列代表一个样本数据。

k 正整数。表示混合模型中子模型的数量。

maxlter 正整数,表示最大的迭代次数。默认为 300。

tolerance 浮点数,表示 EM 迭代中止的边界差值。如果相邻两次迭代的对数似然函数值的差值小于 tolerance,则停止迭代。默认为 1e-4。

randomSeed 随机数种子。

mean 可选参数,向量/矩阵。表示模型初始化的均值。若 X 为一元数据,则 mean 是元素个数为 k 的向量;若 X 为多元数据,则 mean 是列数为 k,行数与 X 的元数相同的矩阵。若不指定,系统随机从 X 中选择 k 个值作为模型的初始化均值。

sigma 可选参数,向量/元组,元素个数为 k。若 X 为一元数据,表示每个子模型初始化的方差;若 X 为多元数据,表示每个子模型初始化的协方差矩阵。若不指定,系统使用 1 作为方差,或单位矩阵作为协方差矩阵。

详情

通过数据集训练 GMM(高斯混合模型)。返回一个字典,包含以下键值:

  • modelName:字符串 "Gaussian Mixture Model"。

  • prior:观测数据属于各子模型的先验概率。

  • mean:训练获得的每个子模型的期望。

  • sigma:若 X 为 一元数据,表示训练获得的每个子模型的方差;若 X 为多元数据,表示训练获得的每个子模型的协方差矩阵。

例子

dataT = 6.8 7.2 5.3 9.4 6.5 11.2 25.6 0.6 8.9 4.3 2.2 1.9 8.7 0.2 1.5
mean = [2, 2]
re = gmm(dataT, 2, 300, 1e-4, 42, mean)
re

// output
sigma->[36.759822,36.759822]
modelName->Gaussian Mixture Model
prior->[0.5,0.5]
mean->[6.686667,6.686667]

dataT = transpose(matrix(3.2 1.5 2.6 7.8 6.3 4.2 5.1 8.9 11.2 25.8, 25.6 4.6 8.9 4.3 2.2 1.9 8.7 0.2 1.5 9.3))
mean = transpose(matrix([1, 0], [0, 1]))
re = gmm(dataT, 2, 300, 1e-4, 42, mean)
re

// output
sigma->(#0        #1
51.001369 18.273032
18.273032 9.34789
,#0       #1
1.718475 0.629584
0.629584 67.713701
)
modelName->Gaussian Mixture Model
prior->[0.558683,0.441317]
mean->
#0        #1
11.152841 3.238262
3.341493  10.996997