您可以使用聚类算法(k 均值聚类)根据数据点之间的相似性将数据点分为 k 个不同的组。
k 均值的目的在于将 n 个数据对象分为 k 个群集。通过这种分法,将每个数据对象分配给最小距离的聚类。最小距离也被称为聚类中心对象:
有关如何对 Vertica 中的表使用 k 均值的完整示例,请参阅使用 k-means 对数据进行聚类。
您可以使用聚类算法(k 均值聚类)根据数据点之间的相似性将数据点分为 k 个不同的组。
k 均值的目的在于将 n 个数据对象分为 k 个群集。通过这种分法,将每个数据对象分配给最小距离的聚类。最小距离也被称为聚类中心对象:
有关如何对 Vertica 中的表使用 k 均值的完整示例,请参阅使用 k-means 对数据进行聚类。
该 k-means 示例使用了名为 agar_dish_1
和 agar_dish_2
的两个小数据集。使用 agar_dish_1
数据集中的数字数据,可以将数据聚类到 k 群集。然后,可以使用所创建的 k-means 模型,在 agar_dish_2
上运行 APPLY_KMEANS,并将其分配到原始模型中创建的群集。
使用 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 模型 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
数据进行了正确聚类。