---
source_url: https://docs.dolphindb.cn/zh/funcs/g/gmm.html
fetched_at: 2026-05-19T09:26:59Z
category: funcs
title: gmm
sha1: 2f489b6489543412ea0f036ba5872c960ed0fd4c
---

# gmm

## 语法

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

## 详情

通过数据集训练 GMM（高斯混合模型）。

## 参数

**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 作为方差，或单位矩阵作为协方差矩阵。

## 返回值

返回一个字典，包含以下键值：

- modelName：字符串 "Gaussian Mixture Model"。
- prior：观测数据属于各子模型的先验概率。
- mean：训练获得的每个子模型的期望。
- sigma：若 *X* 为 一元数据，表示训练获得的每个子模型的方差；若 *X*
  为多元数据，表示训练获得的每个子模型的协方差矩阵。

## 例子

```dolphindb
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
```
