---
source_url: https://docs.dolphindb.cn/zh/funcs/k/kmeans.html
fetched_at: 2026-05-19T09:29:16Z
category: funcs
title: kmeans
sha1: 49802f1037ae4be3acbe8144b017f775fe305556
---

# kmeans

## 语法

`kmeans(X, k, [maxIter=300], [randomSeed], [init='random'])`

## 详情

对训练集执行 K-Means 聚类。

## 参数

**X** 是一个表，表示训练集。

**k** 是一个正整数，表示要生成的聚类数。

**maxIter** 是一个正整数，表示质心更新的最大迭代次数。默认值是300。

**randomSeed** 是一个整数，表示质心初始化时随机算法的种子。默认值为 NULL。

**init** 可以是一个字符串或者一个矩阵，表示初始值的选择方式。默认值是 'random'。

- 若 *init* 是一个字符串，则可选参数为 'random' 或
  'k-means++'。'random' 表示根据 *randomSeed* 随机生成，'kmeans++' 表示根据
  kmeans++ 算法生成。
- 若 *init* 是一个矩阵，表示自定义的质心。其列数与表 *X* 需保持一致，行数为
  *k*。

## 返回值

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

- centers：一个 *k* 行 m 列的矩阵（m 是 *X* 的列数），包含各个类的质心坐标。
- predict：一个聚类模型预测函数，数据类型是 FUNCTIONDEF。
- modelName：字符串 'KMeans'。
- model：保存的模型，数据类型为 RESOURCE，用于预测。
- labels：一个向量，表示 *X* 中每一行数据对应的聚类的类标签。

## 例子

使用模拟数据训练一个 K-Means 模型：

```dolphindb
t = table(100:0, `x0`x1, [DOUBLE, DOUBLE])
x0 = norm(1.0, 1.0, 50)
x1 = norm(1.0, 1.5, 50)
insert into t values (x0, x1)
x0 = norm(2.0, 1.0, 50)
x1 = norm(-1.0, 1.5, 50)
insert into t values (x0, x1)
x0 = norm(-1.0, 1.0, 50)
x1 = norm(-3.0, 1.5, 50)
insert into t values (x0, x1);

model = kmeans(t, 3);
model;

// output
centers->

#0        #1
--------- ---------
-1.048027 -3.809539
1.110899  1.24216
1.677974  -1.19158

predict->kmeansPredict
modelName->KMeans
model->KMeans
labels->[2,2,2,2,2,2,3,2,3,2,...]
```
