机器数据分析平台

  • 机器数据分析平台 > 使用文档 > 应用平台 > Pandora机器学习工具包 >fit的使用方法详述 > 数据聚类【聚类】

    数据聚类【聚类】

    最近更新时间:2021-12-06 14:48:19

    使用场景

    当我们需要将连续数据或离散数据通过其特征相似性合并成几个大类的时候,我们通常使用聚类算法(Clustering)来解决问题。

    分类和聚类算法的目的都是将数据判断成某一类,但他们训练所需的数据不同。分类算法是一种监督性学习方法,意味着在训练模型的时候,样本数据中必须包含每一行数据的属性特征及其所属的类别,目的是将每一条记录分别属于哪一类标记出来。而聚类算法为非监督性学习,意味着在训练模型的时候,样本数据中只包含每一行数据的属性特征,但是并不知道他们所属的类别。目的只是根据提供的属性特征,把相似的东西聚到一起。

    通用语法:

    ...|fit <algo_name> [options] <feature_field_1> <feature_field_2> [into model_name]... 
    

    通用参数说明:

    • <algo_name> 必填,用来指定训练模型采用的算法名称。
    • [options]可选,为算法的内置参数,根据提供的算法变化。
    • <feature_field> 必填,可以是一个或者多个字段,用来指定建模使用的特征字段,给定的feature_field值必须存在于数据集中。
    • [into model_name]可选,用来将fit训练出来的模型保存成model_name以便下次调用。需要注意的是,只有K均值算法支持保存模型,层次聚类法不支持模型的保存和重新应用。如果需要用层级聚类法做新数据集的聚类分析,则需要直接在新数据上用层次聚类法训练产生模型。
    • 数据集必须不为空。

    以下算法可以用来预测未来某个时间的连续指标:

    K均值 - KMeans

    K均值算法是一种常用的聚类分析的方法,通过给定的k值,将数据分成k个簇,使得每个数据点到聚类中心的距离最小。在没有很明确的偏好算法的情况下,建议可以使用K均值算法来得出初步的聚类分析模型

    语法:

    ...|fit KMeans n_clusters=<int> init=<"k-means++" (default)| random> n_init=<int> max_iter=<int> random_state=<int> <feature_field_1> <feature_field_2> [into model_name]... 
    

    参数说明:

    • n_clusters参数,用来指定形成的簇/中心点的数量。如不提供,默认值为8。
    • init参数,用来指定初始值选择的方式
      • k-means++(默认值): 优化过选择方式
      • random:完全随机
    • n_init参数,用来指定用不同的初始点运行算法的次数。如不提供,默认值为10。
    • max_iter参数,用来指定在单次运算中,KMeans计算反复的最大限度。如不提供,默认值为300。在数据量或者特征数量特别大的情况下,可以适量增大。
    • random_state为随机数种子,用来控制样本自助抽样的随机性和特征抽样的随机性。如果给定特定值,重新跑模型的时候,可以得出同样的结果。

    层次聚类法 - Hierarchical Clustering

    层次聚类法是聚类分析的一种,通过计算不同类别的相似度类创建一个有层次的嵌套的树。 在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类的根节点。不支持模型保存

    语法:

    ...|fit HierarchicalClustering n_clusters=<int | None> linkage=<ward(default) | complete | average | single> affinity=<euclidean(default) | l1 | l2 | manhattan | cosine> distance_threshold=<float | None> <feature_field_1> <feature_field_2>... 
    

    参数说明:

    • n_clusters参数,用来指定形成的簇/中心点的数量。如不提供,默认值为2。与distance_threshold不能一起使用。
    • linkage参数,用来指定计算两个组合数据点间距离的方法
      • linkage=ward(默认值),将组合内各个数据点之间方差最小的组作为最终形成的组。
      • linkage=single,计算两个组合数据点中距离最近的两个数据点间的距离作为这两个组合数据点的距离
      • linkage=complete,计算两个组合数据点中距离最远的两个数据点间的距离作为这两个组合数据点的距离
      • linkage=average,计算两个组合数据点中的每个数据点与其他所有数据点的距离。将所有距离的均值作为两个组合数据点间的距离
    • affinity参数,用来指定计算linkage的方法。
      • affinity=euclidean,使用欧式距离
      • affinity=l1,使用曼哈顿距离(即affinity=manhattan)
      • affinity=l2,使用欧式距离(即affinity=euclidean)
      • affinity=manhattan,使用曼哈顿距离(即affinity=l1)
      • affinity=cosine,使用余弦相似度
    • distance_threshold,用来指定距离阀值。两个组合数据点之间的距离大于阀值的情况下,这两个组合不会合并。与n_clusters不能一起使用。
    • 如果提供distance_threshold且distance_threshold不为None,n_clusters必须为None或者不提供。反之亦然。

    谱聚类 - Spectral Clustering

    谱聚类是一种基于图的聚类方法:通过构建邻接图,将样本数据看作空间中的点,根据这些点之间的距离构建带权重值的边,距离越远的点权重值越低,再通过切图,使一个子图之内的边权重和尽可能高,而不同子图之间的边权重和尽可能低,实现聚类的目的。不支持模型保存

    语法:

    ...|fit SpectralClustering n_clusters=<int> affinity=<nearest_neighbors | rbf(default) | linear | poly | sigmoid> assign_labels=<kmeans (default)| discretize> n_init=<int> gamma=<float> degree=<int> n_neighbors=<int> coef0=<float> <feature_field_1> <feature_field_2>... 
    

    参数说明:

    • n_clusters参数,用来指定谱聚类切图时降维到的维数,也是最后聚类到的簇数。如不提供,默认值为8。

    • affinity参数,用来指定相似矩阵的建立方式。

      • affinity=nearest_neighbors,使用K邻近法
      • affinity=rbf(默认值),使用高斯核函数
      • affinity=linear,使用线性核函数
      • affinity=poly,使用多项式核函数
      • affinity=sigmoid,使用sigmoid核函数
    • assign_labels参数,用来指定最后的聚类方法。

      • assign_labels=kmeans(默认值),使用K-Means聚类方法
      • assign_labels=discretize,使用discretize聚类方法
    • n_init参数,在assign_labels=kmeans的情况下,用来指定用不同的初始值组合跑K-Means聚类的次数。如不提供,默认值为10。

    • gamma参数,在affinity=rbf或者linear或者poly或者sigmoid的情况下,指定核函数系数。当affinity指定为其他核函数时会被忽略。

    • degree参数,在affinit=poly的情况下,用来指定函数的次数。当affinity指定为其他核函数时会被忽略。

    • n_neighbors参数,在affinity=nearest_neighbors的情况下,用来指定K(邻居)的数量。若不提供,默认为10。当affinity指定为其他核函数时会被忽略。

    • coef0参数,在affinity=poly或者sigmoid的情况下,用来指定函数的独立项。若不提供,默认为1.0。

    密度聚类算法 - DBSCAN

    DBSCAN是一种比较有代表性的基于密度的聚类算法,它假定类别可以通过样本分布的紧密程度决定,同一类别的样本,他们之间肯定是紧密相连的,而不同类别的样本,距离会相对比较远。而DBSCAN就是基于这样的假设,将足够密度的区域划分为一个簇,实现聚类的目的。不支持模型保存

    语法:

    ...|fit DBSCAN eps=<float> min_samples=<int> algorithm=<auto (default)| ball_tree | kd_tree | brute> metric=<str> p=<float> <feature_field_1> <feature_field_2>... 
    
    • eps参数,用来指定邻域的距离阈值,和样本距离超过eps距离的样本点不在邻域内。如不提供,默认值为0.5。eps越大,越多的点落在核心对象的邻域,则类别数可能会减少。反之,类别数会增多。

    • min_samples参数,用来指定即样本点要成为核心对象所需要的𝜖-邻域的样本数阈值。如不提供,默认值为5。在eps一定的情况下,min_samples越大,核心对象越少,类别数越多。反之,类别数会减少。

    • algorithm用来指定用来计算最近邻居的算法

      • algorithm=ball_tree,使用BallTree
      • algorithm=kd_tree,使用KDTree
      • algorithm=brute,使用暴力算法
      • algorithm=auto(默认值),尝试用实际fit的数值决定最适合的算法
    • metric用来指定计算邻居间距离的方法,根据algorithm不同,适用的metric方法也有不同,可以匹配的metric可参考Sci-kit Learn支持的距离衡量方法

      • algorithm=ball_tree的情况下,比较常用的metric有:

        • cityblock,使用曼哈顿距离(~metric=l1, metric=manhattan)
        • euclidean,使用欧式距离(~metric=l2)
        • l2,使用欧式距离(~metric=euclidean)
        • l1,使用曼哈顿距离(~metric=cityblock, metric=manhattan)
        • manhattan,使用曼哈顿距离(~metric=l1, metric=cityblock)
        • chebyshev, 使用切比雪夫距离
        • cosine,使用余弦相似度
        • mahalanobis,使用马氏距离,必须提供>=2个特征字段
        • minkowski(默认值),使用闵氏距离,必须同时提供p参数
      • algorithm=kd_Tree,比较常用的metric有:

        • cityblock,使用曼哈顿距离(~metric=l1, metric=manhattan)
        • euclidean,使用欧式距离(~metric=l2)
        • l2,使用欧式距离(~metric=euclidean)
        • l1,使用曼哈顿距离(~metric=cityblock, metric=manhattan)
        • manhattan,使用曼哈顿距离(~metric=l1, metric=cityblock)
        • chebyshev, 使用切比雪夫距离
        • cosine,使用余弦相似度
        • minkowski(默认值),使用闵氏距离,必须同时提供p参数
      • algorithm=brute的情况下,比较常用的metric有:

        • cityblock,使用曼哈顿距离(~metric=l1, metric=manhattan)
        • euclidean,使用欧式距离(~metric=l2)
        • l2,使用欧式距离(~metric=euclidean)
        • l1,使用曼哈顿距离(~metric=cityblock, metric=manhattan)
        • manhattan,使用曼哈顿距离(~metric=l1, metric=cityblock)
        • chebyshev, 使用切比雪夫距离
        • cosine,使用余弦相似度
        • mahalanobis,使用马氏距离,必须提供>=2个特征字段
        • minkowski(默认值),使用闵氏距离
        • seuclidean,使用平方欧式距离
    • p用来指定metric=minkowski的情况下的p参数。若不提供,则默认为2。p必须为正整数。

      • p=1,约等于使用曼哈顿距离(l1)
      • p=2(默认值),约等于使用欧式距离(l2)
      • p=其他正整数,即使用L-p的闵氏距离

    Birch聚类 - Birch

    Birch算法是层次聚类的一种优化算法,适合于数据量啊,类别数也比较多的情况,并且运行速度很快。它使用聚类特征来表示一个簇,并使用聚类特征树(CF-树)来表示聚类的层次结构来实现快速的聚类。

    语法:

    ...|fit Birch threshold=<float> branching_factor=<int> n_clusters=<int> <feature_field_1> <feature_field_2> [into model_name]... 
    
    • threshold用来指定叶节点每个CF的最大样本半径阈值T,它决定了每个CF里所有样本形成的超球体的半径阈值。如不提供,默认值为0.5。一般来说threshold越小,则CF Tree的建立阶段的规模会越大,即BIRCH算法第一阶段所花的时间和内存会越多,如果样本的方差较大,则一般需要增大这个默认值。

    • branching_factor用来指定CF Tree内部节点的最大CF数B,以及叶子节点的最大CF数L。如不提供,默认值为50。如果样本量非常大(>10万),推荐增大该参数。

    • n_clusters用来指定类别数。如不提供,默认值为3。如果类别数非常多,且没有先验知识,则一般输入None。

    以上内容是否对您有帮助?
  • Qvm free helper
    Close