文档首页 > > SQL语法参考> StreamingML> 实时聚类

实时聚类

分享
更新时间: 2020/01/14 GMT+08:00

聚类算法是非监督算法中非常典型的一类算法,经典的K-Means算法通过提前确定类别数目,计算数据点之间的距离来分类。对于离线静态数据集,我们可以依赖领域中知识来确定类别数目,运行K-Means算法可以取得比较好的聚类效果。但是对于在线实时流数据,数据是在不断变化和演进,类别数目极有可能发生变化,CS服务提供一种能够应对此类场景,无需提前设定聚类数目,并且低延时的在线聚类算法。

算法大致思想为:定义一种距离函数,两两数据点之间如果距离小于某个阈值,则他们属于同一个类别。若某数据点和多个类别中心点的距离都小于这个阈值,则多个类别会发生合并操作。当数据流中的数据到达,算法会分别计算与所有类别的距离,从而决定此数据作为一个新类别或者归属于某类别。

语法格式

CENTROID(ARRAY[field_names], distance_threshold):加入当前数据点后,该数据点所属分类中心。
CLUSTER_CENTROIDS(ARRAY[field_names], distance_threshold):加入当前数据点后,所有分类中心。
ALL_POINTS_OF_CLUSTER(ARRAY[field_names], distance_threshold):加入当前数据点后,该分类所有数据点。
ALL_CLUSTERS_POINTS(ARRAY[field_names], distance_threshold):加入当前数据点后,所有分类对应的所有数据点。
  • 聚类算法可以应用在无界流中。

参数说明

表1 参数说明

参数

是否必选

说明

field_names

数据在数据流中的字段名,多字段以逗号隔开。例如ARRAY[a, b, c]。

distance_threshold

距离阈值,当两数据点距离小于阈值时,它们将属于同一个类别。

示例

分别使用四种函数结合窗口来实时计算聚类的相关信息。

SELECT 
  CENTROID(ARRAY[c,e], 1.0) OVER (ORDER BY proctime RANGE UNBOUNDED PRECEDING) AS centroid,
  CLUSTER_CENTROIDS(ARRAY[c,e], 1.0) OVER (ORDER BY proctime RANGE UNBOUNDED PRECEDING) AS centroids
FROM MyTable

SELECT 
  CENTROID(ARRAY[c,e], 1.0) OVER (ORDER BY proctime RANGE BETWEEN INTERVAL '60' MINUTE PRECEDING AND CURRENT ROW) AS centroidCE, 
  ALL_POINTS_OF_CLUSTER(ARRAY[c,e], 1.0) OVER (ORDER BY proctime RANGE BETWEEN INTERVAL '60' MINUTE PRECEDING AND CURRENT ROW) AS itemList,
  ALL_CLUSTERS_POINTS(ARRAY[c,e], 1.0) OVER (ORDER BY proctime RANGE  BETWEEN INTERVAL '60' MINUTE PRECEDING AND CURRENT ROW) AS listoflistofpoints
FROM MyTable
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区