使用 k-means 对数据进行聚类
该 k-means 示例使用了名为 agar_dish_1
和 agar_dish_2
的两个小数据集。使用 agar_dish_1
数据集中的数字数据,可以将数据聚类到 k 群集。然后,可以使用所创建的 k-means 模型,在 agar_dish_2
上运行 APPLY_KMEANS,并将其分配到原始模型中创建的群集。
将训练数据聚类到 k 群集
-
使用
agar_dish_1
表数据创建名为 agar_dish_kmeans 的 k-means 模型。=> SELECT KMEANS('agar_dish_kmeans', 'agar_dish_1', '*', 5 USING PARAMETERS exclude_columns ='id', max_iterations=20, output_view='agar_1_view', key_columns='id'); KMEANS --------------------------- Finished in 7 iterations (1 row)
该示例创建了一个名为
agar_dish_kmeans
的模型和一个包含模型结果的名为agar_1_view
的视图。运行聚类算法时,您可能会得到不同的结果。这是因为 KMEANS 默认随机选择初始中心。 -
查看
agar_1_view
输出。=> SELECT * FROM agar_1_view; id | cluster_id -----+------------ 2 | 4 5 | 4 7 | 4 9 | 4 13 | 4 . . . (375 rows)
-
由于指定了群集的数量为 5,验证函数创建了五个群集。计算每个群集内的数据点数。
=> SELECT cluster_id, COUNT(cluster_id) as Total_count FROM agar_1_view GROUP BY cluster_id; cluster_id | Total_count ------------+------------- 0 | 76 2 | 80 1 | 74 3 | 73 4 | 72 (5 rows)
从输出可以看出创建了五个群集:
0
、1
、2
、3
和4
。您现在已成功将
agar_dish_1.csv
中的数据聚类为五个不同的群集。
生成您的模型的摘要
使用 GET_MODEL_SUMMARY 函数查看 agar_dish_means 的摘要输出。
=> SELECT GET_MODEL_SUMMARY(USING PARAMETERS model_name='agar_dish_kmeans');
----------------------------------------------------------------------------------
=======
centers
=======
x | y
--------+--------
0.49708 | 0.51116
-7.48119|-7.52577
-1.56238|-1.50561
-3.50616|-3.55703
-5.52057|-5.49197
=======
metrics
=======
Evaluation metrics:
Total Sum of Squares: 6008.4619
Within-Cluster Sum of Squares:
Cluster 0: 12.083548
Cluster 1: 12.389038
Cluster 2: 12.639238
Cluster 3: 11.210146
Cluster 4: 12.994356
Total Within-Cluster Sum of Squares: 61.316326
Between-Cluster Sum of Squares: 5947.1456
Between-Cluster SS / Total SS: 98.98%
Number of iterations performed: 2
Converged: True
Call:
kmeans('public.agar_dish_kmeans', 'agar_dish_1', '*', 5
USING PARAMETERS exclude_columns='id', max_iterations=20, epsilon=0.0001, init_method='kmeanspp',
distance_method='euclidean', output_view='agar_view_1', key_columns='id')
(1 row)
使用 k-means 模型对数据进行聚类
使用刚刚创建的 k-means 模型 agar_dish_kmeans
,您可以将 agar_dish_2
中的点分配给群集中心。
使用 agar_dish_2
表作为输入表,使用 agar_dish_kmeans
模型作为初始群集中心,创建一个名为 kmeans_results
的表。
仅向 APPLY_KMEANS
函数中的参数添加相关特征列。
=> CREATE TABLE kmeans_results AS
(SELECT id,
APPLY_KMEANS(x, y
USING PARAMETERS
model_name='agar_dish_kmeans') AS cluster_id
FROM agar_dish_2);
kmeans_results
表显示 agar_dish_kmeans
模型对 agar_dish_2
数据进行了正确聚类。