使用 k-means 对数据进行聚类

该 k-means 示例使用了名为 agar_dish_1agar_dish_2 的两个小数据集。使用 agar_dish_1 数据集中的数字数据,可以将数据聚类到 k 群集。然后,可以使用所创建的 k-means 模型,在 agar_dish_2 上运行 APPLY_KMEANS,并将其分配到原始模型中创建的群集。

开始示例之前,请加载机器学习示例数据

将训练数据聚类到 k 群集

  1. 使用 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 默认随机选择初始中心。

  2. 查看 agar_1_view 输出。

    => SELECT * FROM agar_1_view;
     id  | cluster_id
    -----+------------
       2 |          4
       5 |          4
       7 |          4
       9 |          4
      13 |          4
    .
    .
    .
    (375 rows)
    
  3. 由于指定了群集的数量为 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)
    

    从输出可以看出创建了五个群集:01234

    您现在已成功将 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 数据进行了正确聚类。

另请参阅