无监督聚类函数

聚类函数基于密度进行聚类,发现数据中的模式和异常数据。

聚类函数

  • 只支持华东2(上海)地域。

  • 聚类函数支持的最大数据量为50万行30列,用于聚类的列不超过6列。

  • 用于离线调度的聚类函数。

  • 基于密度进行聚类,发现数据中的模式和异常数据。基于密度的聚类算法属于无监督方法,对数据的输入顺序敏感,不同顺序的输入数据可能导致不同的聚类结果。

函数格式

SELECT DBSCAN(congfig,col_list_for_cluster,
col_for_cluster,other_col) 
as(cluster_result,col_for_cluster,other_col)
FROM table;

输入参数

  • config:必选。JSON字符串。

    • "eps":聚类时被认为处于同一中心的两点的最大距离。

    • "min_samples":聚类中心周边点的最小数量。

  • col_list_for_cluster:必选。JSON字符串。用于聚类的数值列的序号。

  • col_for_cluster:必选。double或int类型。用于聚类的数值列,最多六列。

  • other_col:必选。任意类型。输入的其他数值列,可以同聚类的结果一同输出。

输出参数

  • cluster_result:int类型。聚类结果。

  • col_for_cluster:double或int类型。用于聚类的列,最多六列。

  • other_col:string类型。输入的其他列。

函数示例:设备数据聚类

下载经过处理的设备使用信息。同一类型的物联网设备被不同群体的用户使用,可能具有不同的数据特征。通过对设备上报的数据进行聚类分析,有助于分析业务中出现的用户画像。将数据导入到数据服务的自定义存储表中,在分析洞察中使用这些数据。本示例是从自定义存储表中读取的数据,因此在读取后需要重新排序。

  • 设备数据聚类。

    • 我们希望使用输入的第一列与第二列数据用于聚类,因此配置col_list_for_cluster'[0,1]',随后输入feature1feature2这两列的列名。

      SELECT DBSCAN('{"eps":0.1,"min_samples":17}','[0,1]',
      feature1,feature2) 
      as(cluster_result,feature1,feature2)
      FROM 
      (SELECT feature1, feature2 FROM dbscandata_400 order by idx);
    • 本示例中没有输入额外列,如果需要,可以在feature2之后输入其他列名。

      SELECT DBSCAN('{"eps":0.1,"min_samples":17}','[0,1]',
      feature1,feature2) 
      as(cluster_result,feature1,feature2,other_col)
      FROM 
      (SELECT feature1, feature2 FROM dbscandata_400 order by idx);
    • 用Pyhton根据输出数据画图,图中显示输入数据被分成两组。用户可以根据聚类结果,对数据进一步洞察,理解这些数据蕴含的用户信息。

      image.png
  • 配置eps。

    通过配置eps,可以决定归属于同一个类别的任意两个样本点之间的最大距离,决定聚类簇的密度。减少同一个类别的任意两个样本点之间的最大距离,可以使得同一类别内的样本点更相似,聚类簇的密度更高。本示例中配置eps为0.2,将尽可能多的数据纳入到聚类得到的簇中。

    SELECT DBSCAN('{"eps":0.2,"min_samples":17}','[0,1]',
    feature1,feature2) 
    as(cluster_result,feature1,feature2)
    FROM (SELECT feature1, feature2 FROM dbscandata_400 order by idx);

    根据输出数据画图,如下右图显示,原本在聚类类别之外的点也被纳入到聚类类别之中,便于分析一些离散在聚类中心的用户数据对于整体画像刻画的影响。如果eps设置过大,会让两个类别之间的边界变得不够清晰,影响最终的聚类结果。

    image.png
  • 配置min_samples。

    通过配置min_samples,可以决定一个聚类簇最少需要多少数据点,决定聚类簇的大小。减少同一个类别的最少数据点数量,会导致聚类簇越小,聚类簇的数量更高。本示例中配置min_samples为3。

    SELECT DBSCAN('{"eps":0.10,"min_samples":3}','[0,1]',
    feature1,feature2) 
    as(cluster_result,feature1,feature2)
    FROM (SELECT feature1, feature2 FROM dbscandata_400 order by idx);

    根据输出数据画图,如下右图显示,原本不属于两个聚类簇的数据也被纳入到聚类簇中,配置效果与配置eps相似。如果min_samples设置过小,可能会导致多个聚类簇的出现,导致用户画像刻画过于细致,影响最终的分析结果

    image.png