kmeans

语法

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

详情

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

注:
DolphinDB 的 kmeans 函数以数据表为输入载体,执行后返回一个包含质心矩阵、训练标签及预测函数的结构化字典。scikit-learn 的 k_means 输入要求为连续内存布局的二维数组,输出仅限于质心坐标、样本标签及惯性值构成的元组。 scikit-learn 提供了更多精细化控制参数。

参数

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 模型:

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,...]