精华内容
下载资源
问答
  • 聚类Clustering

    2021-03-30 06:11:08
    聚类Clustering This page describes clustering algorithms in MLlib. The guide for clustering in the RDD-based API also has relevant information about these algorithms. 本文描述MLlib中的聚类算法。基于...

    聚类Clustering
    This page describes clustering algorithms in MLlib. The guide for clustering in the RDD-based API also has relevant information about these algorithms. 本文描述MLlib中的聚类算法。基于RDD-API中的聚类指南提供了有关这些算法的相关信息。
    Table of Contents
    • K-means
    o Input Columns
    o Output Columns
    • Latent Dirichlet allocation (LDA)
    • Bisecting k-means
    • Gaussian Mixture Model (GMM)
    o Input Columns
    o Output Columns
    • Power Iteration Clustering (PIC)
    K-means
    k-means is one of the most commonly used clustering algorithms that clusters the data points into a predefined number of clusters. The MLlib implementation includes a parallelized variant of the k-means++ method called kmeans||.
    KMeans is implemented as an Estimator and generates a KMeansModel as the base model.
    k均值是最常用的聚类算法之一,将数据点聚集成预定数量的聚类。MLlib实现包括k-means ++方法的并行变体,称为kmeans ||。。
    KMeans实现,Estimator生成KMeansModel作为基本模型。
    在这里插入图片描述

    Examples
    • Scala
    • Java
    • Python
    • R
    Refer to the Scala API docs for more details.
    import org.apache.spark.ml.clustering.KMeans
    import org.apache.spark.ml.evaluation.ClusteringEvaluator

    // Loads data.
    val dataset = spark.read.format(“libsvm”).load(“data/mllib/sample_kmeans_data.txt”)

    // Trains a k-means model.
    val kmeans = new KMeans().setK(2).setSeed(1L)
    val model = kmeans.fit(dataset)

    // Make predictions
    val predictions = model.transform(dataset)

    // Evaluate clustering by computing Silhouette score
    val evaluator = new ClusteringEvaluator()

    val silhouette = evaluator.evaluate(predictions)
    println(s"Silhouette with squared euclidean distance = $silhouette")

    // Shows the result.
    println("Cluster Centers: ")
    model.clusterCenters.foreach(println)
    Find full example code at “examples/src/main/scala/org/apache/spark/examples/ml/KMeansExample.scala” in the Spark repo.
    Latent Dirichlet allocation (LDA)
    LDA is implemented as an Estimator that supports both EMLDAOptimizer and OnlineLDAOptimizer, and generates a LDAModel as the base model. Expert users may cast a LDAModel generated by EMLDAOptimizer to a DistributedLDAModel if needed.
    LDA实现Estimator,支持EMLDAOptimizer和OnlineLDAOptimizer,生成LDAModel作为基础模型。专家用户可以将LDAModel生成的 EMLDAOptimizer转换为DistributedLDAModel。
    Examples
    • Scala
    • Java
    • Python
    • R
    Refer to the Scala API docs for more details.
    import org.apache.spark.ml.clustering.LDA

    // Loads data.
    val dataset = spark.read.format(“libsvm”)
    .load(“data/mllib/sample_lda_libsvm_data.txt”)

    // Trains a LDA model.
    val lda = new LDA().setK(10).setMaxIter(10)
    val model = lda.fit(dataset)

    val ll = model.logLikelihood(dataset)
    val lp = model.logPerplexity(dataset)
    println(s"The lower bound on the log likelihood of the entire corpus: $ll")
    println(s"The upper bound on perplexity: $lp")

    // Describe topics.
    val topics = model.describeTopics(3)
    println(“The topics described by their top-weighted terms:”)
    topics.show(false)

    // Shows the result.
    val transformed = model.transform(dataset)
    transformed.show(false)
    Find full example code at “examples/src/main/scala/org/apache/spark/examples/ml/LDAExample.scala” in the Spark repo.
    Bisecting k-means
    Bisecting k-means is a kind of hierarchical clustering using a divisive (or “top-down”) approach: all observations start in one cluster, and splits are performed recursively as one moves down the hierarchy.
    Bisecting K-means can often be much faster than regular K-means, but it will generally produce a different clustering.
    BisectingKMeans is implemented as an Estimator and generates a BisectingKMeansModel as the base model.
    将k均值平分是一种使用除法(或“自上而下”)方法的分层聚类:所有观测值都在一个聚类中开始,当一个聚结向下移动时,递归执行拆分。
    平分K均值通常会比常规K均值快得多,但通常会产生不同的聚类。
    BisectingKMeans实现,Estimator并生成BisectingKMeansModel作为基本模型。
    Examples
    • Scala
    • Java
    • Python
    • R
    Refer to the Scala API docs for more details.
    import org.apache.spark.ml.clustering.BisectingKMeans
    import org.apache.spark.ml.evaluation.ClusteringEvaluator

    // Loads data.
    val dataset = spark.read.format(“libsvm”).load(“data/mllib/sample_kmeans_data.txt”)

    // Trains a bisecting k-means model.
    val bkm = new BisectingKMeans().setK(2).setSeed(1)
    val model = bkm.fit(dataset)

    // Make predictions
    val predictions = model.transform(dataset)

    // Evaluate clustering by computing Silhouette score
    val evaluator = new ClusteringEvaluator()

    val silhouette = evaluator.evaluate(predictions)
    println(s"Silhouette with squared euclidean distance = $silhouette")

    // Shows the result.
    println("Cluster Centers: ")
    val centers = model.clusterCenters
    centers.foreach(println)
    Find full example code at “examples/src/main/scala/org/apache/spark/examples/ml/BisectingKMeansExample.scala” in the Spark repo.
    Gaussian Mixture Model (GMM)
    A Gaussian Mixture Model represents a composite distribution whereby points are drawn from one of k Gaussian sub-distributions, each with its own probability. The spark.ml implementation uses the expectation-maximization algorithm to induce the maximum-likelihood model given a set of samples.
    GaussianMixture is implemented as an Estimator and generates a GaussianMixtureModel as the base model.
    高斯混合模型 代表一个复合分布,绘制ķ高斯子分布,每个具有其相应的概率。该spark.ml实现使用 期望最大化 算法,给定一组样本,得出最大似然模型。
    GaussianMixture实现,Estimator并生成GaussianMixtureModel作为基本模型。
    在这里插入图片描述

    Examples
    • Scala
    • Java
    • Python
    • R
    Refer to the Scala API docs for more details.
    import org.apache.spark.ml.clustering.GaussianMixture

    // Loads data
    val dataset = spark.read.format(“libsvm”).load(“data/mllib/sample_kmeans_data.txt”)

    // Trains Gaussian Mixture Model
    val gmm = new GaussianMixture()
    .setK(2)
    val model = gmm.fit(dataset)

    // output parameters of mixture model model
    for (i <- 0 until model.getK) {
    println(s"Gaussian KaTeX parse error: Undefined control sequence: \nweight at position 3: i:\̲n̲w̲e̲i̲g̲h̲t̲={model.weights(i)}\n" +
    s"mu=KaTeX parse error: Undefined control sequence: \nsigma at position 26: …ssians(i).mean}\̲n̲s̲i̲g̲m̲a̲=\n{model.gaussians(i).cov}\n")
    }
    Find full example code at “examples/src/main/scala/org/apache/spark/examples/ml/GaussianMixtureExample.scala” in the Spark repo.
    Power Iteration Clustering (PIC)
    Power Iteration Clustering (PIC) is a scalable graph clustering algorithm developed by Lin and Cohen. From the abstract: PIC finds a very low-dimensional embedding of a dataset using truncated power iteration on a normalized pair-wise similarity matrix of the data.
    spark.ml’s PowerIterationClustering implementation takes the following parameters:
    功率迭代聚类(PIC)是Lin和Cohen开发的可伸缩图聚类算法。PIC在数据的标准化成对相似度矩阵上使用截断的幂次迭代,发现了数据集的非常低维的嵌入。
    spark.ml的PowerIterationClustering实现采用以下参数:
    • k: the number of clusters to create
    • initMode: param for the initialization algorithm
    • maxIter: param for maximum number of iterations
    • srcCol: param for the name of the input column for source vertex IDs
    • dstCol: name of the input column for destination vertex IDs
    • weightCol: Param for weight column name
    • k:要创建的聚类数
    • initMode:初始化算法的参数
    • maxIter:最大迭代次数的参数
    • srcCol:参数,用于源顶点ID的输入列的名称
    • dstCol:目标顶点ID的输入列的名称
    • weightCol:权重列名称的参数
    Examples
    • Scala
    • Java
    • Python
    • R
    Refer to the Scala API docs for more details.
    import org.apache.spark.ml.clustering.PowerIterationClustering

    val dataset = spark.createDataFrame(Seq(
    (0L, 1L, 1.0),
    (0L, 2L, 1.0),
    (1L, 2L, 1.0),
    (3L, 4L, 1.0),
    (4L, 0L, 0.1)
    )).toDF(“src”, “dst”, “weight”)

    val model = new PowerIterationClustering().
    setK(2).
    setMaxIter(20).
    setInitMode(“degree”).
    setWeightCol(“weight”)

    val prediction = model.assignClusters(dataset).select(“id”, “cluster”)

    // Shows the cluster assignment
    prediction.show(false)
    Find full example code at “examples/src/main/scala/org/apache/spark/examples/ml/PowerIterationClusteringExample.scala” in the Spark repo.

    展开全文
  • Clustering聚类

    2017-11-08 11:46:51
    前言: 本文主要翻译sklearn文档Clustering的内容,并进行相关算法的解析和代码实现。本文由callback发布于...谢谢合作!概括本文由来是看见了sklearn的clustering聚类数据

    前言:
    本文主要翻译sklearn文档Clustering的内容,并进行相关算法的解析和代码实现。本文由callback发布于http://blog.csdn.net/u010248552/article/details/78476981, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请留言站内。谢谢合作!

    概括

    本文由来是看见了sklearn的clustering的聚类数据图,如下,对于聚类方法能很好的一眼看出来你需要哪个算法去实现不同场景和不同需求的数据聚类任务。有了这张图,你可以很快的知道你要选什么算法,但是每个算法有它算法的本身特性,这也要求我们在调节算法时知道它的算法过程,各种阈值的合适取值。
    clustering
    下面的表也是对应不同算法的一些细节对比,最关键的就是scale规模,usecase使用场景,和基本的几何原理。
    comparision
    非几何聚类时有用的集群有一个特定的形状,即非流形,欧几里得距离不是正确的度量的标准。这种情况出现在上图的两大行。

    算法细节

    1. k-means
    2. DBSCAN
    3. [GaussianMixture]

    相关资料

    [1]https://www.zhihu.com/question/34554321

    展开全文
  • clustering 聚类算法

    2020-05-17 22:52:00
    文章目录clustering 介绍聚类的定义聚类的评价标准如何确定聚类的个数Calinski-Harabaz 分数具体方法Mean-shift(均值迁移)概述Spectral Clustering(谱聚类)概述Hierarchical Clustering(层次聚类)概述...

    clustering 介绍

    聚类的定义

    聚类与分类的不同在于,聚类所要求划分的类是未知的。也就是说我们对样本数据的划分是不了解。聚类分析的任务就是要明确这个划分。例如我们采集到很多未知的植物标本,并对每株标本的植物学特征进行了记录、量化。那么这些植物标本到底是几个物种呢?聚类分析就可以解决这个问题。

    聚类的评价标准

    聚类质量的判断标准是簇内相似度最高、簇间差异性最高,这个标准我们如何进行衡量呢?

    Calinski-Harabaz 分数

    如何确定聚类的个数

    Deciding the Number of Clusterings

    具体方法

    在这里插入图片描述

    Mean-shift(均值迁移)

    概述

    均值迁移的基本思想是:
    在数据集中选定一个点,然后以这个点为圆心,r为半径,画一个圆(二维下是圆),求出这个点到所有点的向量的平均值,而圆心与向量均值的和为新的圆心,然后迭代此过程,直到满足一点的条件结束。(Fukunage在1975年提出)

    后来Yizong Cheng 在此基础上加入了 核函数 和 权重系数 ,使得Mean-shift 算法开始流行起来。目前它在聚类、图像平滑、分割、跟踪等方面有着广泛的应用。

    图解过程:
    在这里插入图片描述
    由上图可以很容易看到,Mean-shift 算法的核心思想就是不断的寻找新的圆心坐标,直到密度最大的区域。

    Note:
    需要指定类的数目。

    Spectral Clustering(谱聚类)

    概述

    Spectral Clustering(SC,即谱聚类),是一种基于图论的聚类方法,它能够识别任意形状的样本空间且收敛于全局最优解。其基本思想是利用样本数据的相似矩阵进行特征分解后得到的特征向量进行聚类.它与样本特征无关而只与样本个数有关。

    基本思路:
    将样本看作顶点,样本间的相似度看作带权的边,从而将聚类问题转为图分割问题:找到一种图分割的方法使得连接不同组的边的权重尽可能低(这意味着组间相似度要尽可能低),组内的边的权重尽可能高(这意味着组内相似度要尽可能高).

    图解过程:
    在这里插入图片描述
    如上图所示,断开虚线,六个数据被聚成两类。

    Note:
    需要指定类的数目。

    Hierarchical Clustering(层次聚类)

    概述

    在某些情况下,我们想把数据划分为不同层次上的群组,hierarchical clustering 就可以将数据对象组成层次结构,这种层次结构可以称为聚类树

    两种策略

    按照策略可以将方法分为两种:

    1. 凝聚层次聚类
      采用自底向上的策略,首先将每个对象作为一个单独的簇,然后根据某种距离度量合并这些簇形成越来越大的簇,直到所有的对象都在一个簇中(层次的最上层),或者达到一个终止条件。绝大多数层次聚类方法属于这一类。
    2. 分裂层次聚类
      采用自顶向下策略,首先将所有对象置于一个簇中,然后逐渐细分为越来越小的簇,直到每个对象自成一个簇,或者达到某个终止条件。

    终止条件可以是,达到某个希望的簇的数目,或者两个最近的簇之间的距离超过了某个阀值。

    下图描述了一种凝聚层次聚类算法AGNES和一种分裂层次聚类算法DIANA对一个包含五个对象的数据集合 { a,b,c,d,e } 的处理过程。

    在这里插入图片描述

    表示方法

    通常使用一种称为树状图的树形结构表示层次聚类的过程。它展示对象是如何一步步进行分组的。如下图显示上图的五个对象的树状图。

    在这里插入图片描述

    距离度量

    如何度量两个簇之间的距离呢??四个广泛采用的簇间距离度量方法如下,
    ( 其中 ∣ p − p ′ ∣ |p - p'| pp是两个对象或点 p p p p ′ p' p间的距离, m i m_i mi是簇 C i C_i Ci的质心, n i n_i ni是簇 C i C_i Ci中对象数目。)

    在这里插入图片描述

    图示如下:

    在这里插入图片描述

    • 当算法使用最小距离衡量簇间距离时,有时称它为最近邻聚类算法。此外,如果当最近的簇之间的距离超过某个任意的阈值时聚类过程就会终止,则称其为单连接算法(single linkage)。
    • 当一个算法使用最大距离度量簇间距离时,有时称为最远邻聚类算法。如果当最近簇之间的最大距离超过某个任意阈值时聚类过程便终止,则称其为全连接算法 (complete linkage)。

    距离度量的特性

    • 最小度量和最大度量代表了簇间距离度量的两个极端。它们趋向对离群点或噪声数据过分敏感。
    • 使用均值距离和平均距离是对最小和最大距离之间的一种折中方法,而且可以克服离群点敏感性问题。
    • 尽管均值距离计算简单,但是平均距离也有它的优势,因为它既能处理数值数据又能处理分类数据。

    纯粹的层次聚类方法的困难之处

    • 层次聚类方法尽管简单,但经常会遇到合并或分裂点选择的困难。这样的决定是非常关键的,因为一旦一组对象合并或者分裂,下一步的处理将对新生成的簇进行。
    • 不具有很好的可伸缩性,因为合并或分裂的决定需要检查和估算大量的对象或簇。

    层次聚类的改进方法

    BIRCH (Balanced Iterative Reducing and Clustering using Hierarchies)

    Basic Idea

    首先用树结构对对象进行层次划分,其中叶节点或者低层次的非叶节点可以看作是由分辨率决定的“微簇”,然后使用其它的聚类方法对这些微簇进行聚类。

    BIRCH克服了简单的层次聚类方法的两个缺点:

    1. 可伸缩性
    2. 不能撤销前一步所做的工作

    适用:BIRCH算法比较适合于数据量大,类别数K较多的情况,运行速度快,只需要单遍扫描数据集就能进行聚类。

    Method

    BIRCH算法利用了一个树结构来帮助我们快速的聚类,这个数结构类似于平衡B+树,一般将它称之为聚类特征树(Clustering Feature Tree,简称CF Tree)。这颗树的每一个节点是由若干个聚类特征(Clustering Feature,简称CF)组成。从下图我们可以看看聚类特征树是什么样子的:每个节点包括叶子节点都有若干个CF,而内部节点的CF有指向孩子节点的指针,所有的叶子节点用一个双向链表链接起来。

    在这里插入图片描述
    有了聚类特征树的概念,我们再对聚类特征树和其中节点的聚类特征CF做进一步的讲解。

    CF and CF Tree

    CF 定义:

    每个CF是一个三元组,可以用 (N, LS, SS) 表示。
    其中,N代表这个CF中的样本点的数量;LS代表了这个CF中拥有的样本点各特征维度的和向量;SS代表了这个CF中拥有的样本点各特征维度的平方和。
    举个例子如下图,在CF Tree中的某一个节点的某一个CF中,有下面5个样本(3,4), (2,6), (4,5), (4,7), (3,8)。则它对应的:
    N=5;
    LS=(3+2+4+4+3,4+6+5+7+8)=(16,30);
    SS =(32+22+42+42+32+42+62+52+72+82)=(54+190)=244。

    在这里插入图片描述

    CF有一个很好的性质,就是满足线性关系,也就是 C F 1 + C F 2 = ( N 1 + N 2 , L S 1 + L S 2 , S S 1 + S S 2 ) CF_1 + CF_2 = (N_1 + N_2, LS_1 + LS_2, SS_1 + SS_2) CF1+CF2=(N1+N2,LS1+LS2,SS1+SS2)。这个性质从定义也很好理解。如果把这个性质放在CF Tree上,也就是说,在CF Tree中,对于每个父节点中的CF节点,它的(N,LS,SS)三元组的值等于这个CF节点所指向的所有子节点的三元组之和。如下图所示:

    在这里插入图片描述
    从上图中可以看出,根节点的CF1的三元组的值,可以从它指向的6个子节点(CF7 - CF12)的值相加得到。这样我们在更新CF Tree的时候,可以很高效。

    对于CF Tree,我们一般有几个重要参数:

    1. 每个内部节点的最大CF数 B B B
    2. 每个叶子节点的最大CF数 L L L
    3. 第三个参数是针对叶子节点中某个CF中的样本点来说的,它是叶节点每个CF的最大样本半径阈值 T T T,也就是说,在这个CF中的所有样本点一定要在半径小于T的一个超球体内。

    对于上图中的CF Tree,限定了B=7, L=5, 也就是说内部节点最多有7个CF,而叶子节点最多有5个CF。

    CF Tree的生成

    下面我们看看怎么生成CF Tree。我们先定义好CF Tree的参数: 即内部节点的最大CF数B, 叶子节点的最大CF数L, 叶节点每个CF的最大样本半径阈值T。

    在最开始的时候,CF Tree是空的,没有任何样本,我们从训练集读入第一个样本点,将它放入一个新的CF三元组A,这个三元组的N=1,将这个新的CF放入根节点,此时的CF Tree如下图:

    在这里插入图片描述

    现在我们继续读入第二个样本点,我们发现这个样本点和第一个样本点A,在半径为T的超球体范围内,也就是说,他们属于一个CF,我们将第二个点也加入CF A,此时需要更新A的三元组的值。此时A的三元组中N=2。此时的CF Tree如下图:

    在这里插入图片描述

    此时来了第三个节点,结果我们发现这个节点不能融入刚才前面的节点形成的超球体内,也就是说,我们需要一个新的CF三元组B,来容纳这个新的值。此时根节点有两个CF三元组A和B,此时的CF Tree如下图:

    在这里插入图片描述

    当来到第四个样本点的时候,我们发现和B在半径小于T的超球体,这样更新后的CF Tree如下图:

    在这里插入图片描述

    那个什么时候CF Tree的节点需要分裂呢?假设我们现在的CF Tree 如下图, 叶子节点LN1有三个CF, LN2和LN3各有两个CF。我们的叶子节点的最大CF数L=3。此时一个新的样本点来了,我们发现它离LN1节点最近,因此开始判断它是否在sc1,sc2,sc3这3个CF对应的超球体之内,但是很不幸,它不在,因此它需要建立一个新的CF,即sc8来容纳它。问题是我们的L=3,也就是说LN1的CF个数已经达到最大值了,不能再创建新的CF了,怎么办?此时就要将LN1叶子节点一分为二了。

    在这里插入图片描述

    我们将LN1里所有CF元组中,找到两个最远的CF做这两个新叶子节点的种子CF,然后将LN1节点里所有CF sc1, sc2, sc3,以及新样本点的新元组sc8划分到两个新的叶子节点上。将LN1节点划分后的CF Tree如下图:

    在这里插入图片描述

    如果我们的内部节点的最大CF数B=3,则此时叶子节点一分为二会导致根节点的最大CF数超了,也就是说,我们的根节点现在也要分裂,分裂的方法和叶子节点分裂一样,分裂后的CF Tree如下图:

    在这里插入图片描述

    有了上面这一系列的图,相信对于CF Tree的插入就没有什么问题了,总结下CF Tree的插入:

    1. 从根节点向下寻找和新样本距离最近的叶子节点和叶子节点里最近的CF节点
    2. 如果新样本加入后,这个CF节点对应的超球体半径仍然满足小于阈值T,则更新路径上所有的CF三元组,插入结束。否则转入3.
    3. 如果当前叶子节点的CF节点个数小于阈值L,则创建一个新的CF节点,放入新样本,将新的CF节点放入这个叶子节点,更新路径上所有的CF三元组,插入结束。否则转入4。
    4. 将当前叶子节点划分为两个新叶子节点,选择旧叶子节点中所有CF元组里超球体距离最远的两个CF元组,分布作为两个新叶子节点的第一个CF节点。将其他元组和新样本元组按照距离远近原则放入对应的叶子节点。依次向上检查父节点是否也要分裂,如果需要按和叶子节点分裂方式相同。
    BIRCH 算法

    上面讲了半天的CF Tree,终于我们可以步入正题BIRCH算法,其实将所有的训练集样本建立了CF Tree,一个基本的BIRCH算法就完成了,对应的输出就是若干个CF节点,每个节点里的样本点就是一个聚类的簇。也就是说BIRCH算法的主要过程,就是建立CF Tree的过程。

    当然,真实的BIRCH算法除了建立CF Tree来聚类,其实还有一些可选的算法步骤的,现在我们就来看看 BIRCH算法的流程。

    1. 将所有的样本依次读入,在内存中建立一颗CF Tree, 建立的方法参考上一节。
    2. (可选)将第一步建立的CF Tree进行筛选,去除一些异常CF节点,这些节点一般里面的样本点很少。对于一些超球体距离非常近的元组进行合并。
    3. (可选)利用其它的一些聚类算法比如K-Means对所有的CF元组进行聚类,得到一颗比较好的CF Tree.这一步的主要目的是消除由于样本读入顺序导致的不合理的树结构,以及一些由于节点CF个数限制导致的树结构分裂。
    4. (可选)利用第三步生成的CF Tree的所有CF节点的质心,作为初始质心点,对所有的样本点按距离远近进行聚类。这样进一步减少了由于CF Tree的一些限制导致的聚类不合理的情况。

    从上面可以看出,BIRCH算法的关键就是步骤1,也就是CF Tree的生成,其他步骤都是为了优化最后的聚类结果。

    BIRCH算法的参数:

    1. 每个内部节点的最大CF数B (枝平衡因子)。
    2. 每个叶子节点的最大CF数L (叶平衡因子)。
    3. 每个CF的最大样本半径阈值T (空间阀值T)。
    小结

    BIRCH算法可以不用输入类别数K值,这点和K-Means,Mini Batch K-Means不同。如果不输入K值,则最后的CF元组的组数即为最终的K,否则会按照输入的K值对CF元组按距离大小进行合并。

    一般来说,BIRCH算法适用于样本量较大的情况,这点和Mini Batch K-Means类似,但是BIRCH适用于类别数比较大的情况,而Mini Batch K-Means一般用于类别数适中或者较少的时候。BIRCH除了聚类还可以额外做一些异常点检测和数据初步按类别规约的预处理。但是如果数据特征的维度非常大,比如大于20,则BIRCH不太适合,此时Mini Batch K-Means的表现较好。

    对于调参,BIRCH要比K-Means,Mini Batch K-Means复杂,因为它需要对CF Tree的几个关键的参数进行调参,这几个参数对CF Tree的最终形式影响很大。

    最后总结下BIRCH算法的优缺点:

    BIRCH算法的优点:

    1. 节约内存,所有的样本都在磁盘上,CF Tree仅仅存了CF节点和对应的指针。
    2. 聚类速度快,只需要一遍扫描训练集就可以建立CF Tree,CF Tree的增删改都很快。
    3. 可以识别噪音点,还可以对数据集进行初步分类的预处理。

    BIRCH算法的主要缺点有:
    4. 由于CF Tree对每个节点的CF个数有限制,导致聚类的结果可能和真实的类别分布不同。
    5. 对高维特征的数据聚类效果不好。此时可以选择Mini Batch K-Means。
    6. 如果数据集的分布簇不是类似于超球体,或者说不是凸的,则聚类效果不好。

    Reference

    https://www.cnblogs.com/pinard/p/6179132.html
    https://blog.csdn.net/qiu1440528444/article/details/80709663

    Reference

    python实现一个聚类算法

    Clustering by fast search and find of density peaks

    2014 Science

    工具

    PyClustering

    官网

    sklearn

    基于sklearn的聚类算法的聚类效果指标

    sklearn 中文教程

    Reference

    https://blog.csdn.net/xc_zhou/article/details/88316299

    知乎:哪种聚类算法可以不需要指定聚类的个数,而且可以生成聚类的规则?

    这个写的不错:https://www.cnblogs.com/LittleHann/p/6595148.html

    展开全文
  • 聚类clustering

    2016-11-03 19:45:00
    (1)基于划分聚类算法(partition clustering):建立数据的不同分割,然后用相同标准评价聚类结果。(比如最小化平方误差和) 典型算法:k-means、k-medoids K-means基本假设:对于每一个 cluster ,可以选出一个...

    聚类:把相似的东西分到一组,是无监督学习

    聚类算法的分类

    (1)基于划分聚类算法(partition clustering):建立数据的不同分割,然后用相同标准评价聚类结果。(比如最小化平方误差和)

    典型算法:k-means、k-medoids

    K-means 基本假设:对于每一个 cluster ,可以选出一个中心点,使得该 cluster 中的所有点到该中心点的距离小于到其他 cluster 的中心的距离。

    算法步骤:

    1、选择K个点作为初始中心;

    2、Repeat

    3、      将每个点归类到最近的中心,形成K个簇;

    4、      重新计算每个簇的中心;

    5、Until  簇的中心不再变化或迭代了最大的步数。

    k-medoids:k-medoids 和 k-means 不一样的地方在于中心点的选取,在 k-means 中,我们将中心点取为当前 cluster 中所有数据点的平均值,而在 k-medoids 中,我们将中心点的选取限制在当前 cluster 所包含的数据点的集合中。即我们将从当前 cluster 中选取这样一个点——它到其他所有(当前 cluster 中的)点的距离之和最小——作为中心点。 k-medoids 对数据的要求比 k-means 要低。

    (2)基于模型的聚类算法:对于每个类假定一个分布模型,试图找到每个类最好的模型。该方法主要分为基于概率模型的方法和基于神经网络模型的方法。

    概率模型主要指概率生成模型(generative Model),同一”类“的数据属于同一种概率分布,这种方法的优点就是对”类“的划分不那么”坚硬“,而是以概率形式表现,每一类的特征也可以用参数来表达;但缺点就是执行效率不高,特别是分布数量很多并且数据量很少的时候。其中最典型、也最常用的方法就是高斯混合模型(GMM),GMM和k-means很像,不过GMM是学习出一些概率密度函数来,简单地说,k-means的结果是每个数据点被分配到其中某一个cluster了,而GMM则给出这些数据点被分配到每个cluster的概率,又称作 soft assignment 。

    基于神经网络模型的方法主要指SOM(Self Organized Maps)。

    (3)降维算法: 先降维,再聚类

    典型算法:Spectral clustering,Ncut

    (4)基于层次聚类算法(hierarchical method):对给定的数据对象集合进行层次的分解,根据层次的形成方法,又可以分为凝聚和分裂方法两大类;层次聚类的关键是度量相似性,常用的就是欧式距离(向量对应分量差的组合)和绝对值距离(向量间距离)。

    典型算法:BIRCH、CURE、ROCK、CHEMALOEN等。

    (5)基于密度聚类算法:根据领域对象的密度或者某种密度函数来生成聚类,使得每个类在给定范围的区域内必须至少包含一定数目的点;

    典型算法:DBSCAN、OPTICS

    (6)基于网格的聚类算法:将对象空间量化为有限数目的单元,形成一个网格结构,使所有聚类操作都在这个网格结构上进行,使聚类速度得到较大提高;

    典型算法:STING、CLIQUE

    转载于:https://www.cnblogs.com/yujing611033/p/6027975.html

    展开全文
  • 在之前的系列中,大部分都是关于监督学习(除了PCA那一节),接下来的几篇主要分享一下关于非监督学习中的聚类算法(clustering algorithms)。 一、先了解一下聚类分析(clustering analysis) Cluster analysis or...
  • 聚类(Clustering)定义、聚类思想及形式、距离的度量.pdf
  • 聚类算法,密度聚类,高效聚类,无监督聚类,快速聚类
  • Hierarchical Clustering(层次聚类

    万次阅读 2017-10-15 13:27:04
    层次聚类原理:唔?排序的图?分治?没错,与原型聚类和密度聚类不同,层次聚类试图在不同的“层次”上对样本数据集进行划分,一层一层地进行聚类。就划分策略可分为自底向上的凝聚方法(agglomerative hierarchical...
  • ____tz_zs学习笔记聚类(Clustering) 顾名思义,就是将相似样本聚合在一起,属于机器学习中的非监督学习 (unsupervised learning) 问题。聚类的目标是找到相近的数据点,并将相近的数据点聚合在一起。实现聚类的算法...
  • 聚类spectral clustering,构图和切图,拉普拉斯矩阵
  • 聚类Spectral Clustering sklearn.cluster.SpectralClustering聚类(Spectral Clustering, SC), 是一种基于图论的聚类方法——将带权无向图划分为两个或两个以上的最优子图,使子图内部尽量相似,而...
  • 层次聚类算法描述
  • 语音分割与语音聚类 speaker segmentation and clustering
  • 密度聚类(Density peaks Clustering)Python实现.pdf
  • R构建层次聚类模型(Hierarchical Clustering).pdf
  • 聚类(Clustering)定义、聚类思想及形式、距离的度量 目录 聚类(Clustering)定义、聚类思想及形式、距离的度量 聚类(Clustering)定义 聚类思想及形式 距离的度量 聚类(Clustering)定义 聚类(Clustering):就是...
  • SpectralClustering-AutoNum 自动确定光谱聚类聚类数。 实施不同的方法并进行比较。
  • 星座聚类 CS 229 星座聚类项目。 它包含一个命令版本和一个 GUI 版本。 作者:, 。 文件列表: dataProcessing.py : 数据库处理函数 algorithm.py :包含所有算法类的脚本。 basicFun.py : 包含所有基本和常用...
  • Fast K-means ...K-均值聚类也称为快速聚类法, Fast K-means clustering version 1.6 (1.46 MB) by Sebastien PARIS Fast mex K-means clustering algorithm with possibility of K-mean++ initialization.
  • 聚类系列-谱聚类(spectral clustering

    万次阅读 2017-06-05 09:45:55
     谱聚类(spectral clustering)是一种基于图论的聚类方法,主要思想是把所有的数据看做空间中的点,这些点之间可以用边连接起来。距离较远(或者相似度较低)的两个点之间的边权重值较低,而距离较近(或者相似度...
  • 层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树,距离越小,相似度越高。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类...
  • R语言聚类分析之层次聚类(hierarchical clustering)实战 目录 R语言聚类分析之层次聚类(hierarchical clustering)实战 #距离计算 #层次聚类(基于平均链接距离) #选择聚类簇的个数 #最终聚类方案 #...
  • git clone https://github.com/alamages/SpectralClustering.git cd SpectralClustering mkdir build && cd build qmake .. 信息 该代码支持特征向量和无向未加权图聚类。 输入向量必须以 libsvm 格式提供。 输入...
  • PHP 的聚类算法 用法 use \webd\clustering\ KMeans ; use \webd\clustering\ GMeans ; use \webd\clustering\ RnPoint ; // These examples use points in Rn, but some algorithms (like KMeans) // support ...
  • DBSCAN clustering algorithm - 密度聚类
  • Clustering % Algorithm 的实现。 笔记 在我们基于讨价还价博弈的 k 均值聚类方法中,我们使用聚类间距离的最大值和平均值的线性组合作为聚类中心(玩家)的效用函数。 根据我们的最佳知识,在具有嵌入信息的不同...
  • 凝聚聚类 分层凝聚聚类算法 输入 3 维点集,根据欧几里德距离分组为最近的 k 个集群。 目前聚类算法支持 4 种不同类型的 Linkage Single Linkage(集群之间的距离基于最近的点) 完全联动(簇间距离以最远点为准)...
  • MATLAB上的聚类/子空间聚类算法 此存储库不再处于主动开发中。 但是,欢迎对现有算法的实现提出任何问题。 [2020年10月] 1.聚类算法 K均值 K-均值++ 一般而言,该算法类似于K-means 。 与经典的K-means随机选择...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 209,935
精华内容 83,974
关键字:

clustering