精华内容
下载资源
问答
  • 层次聚类: 优点: 1,距离和规则的相似度容易定义,限制少; 2,不需要预先制定聚类数; 3,可以发现类的层次关系; 4,可以聚类成其它形状 缺点: 1,计算复杂度太高; 2,奇异值也能产生很大影响; 3,算法很可能...

    k-means:

    优点:
    1,简单,易于理解和实现;
    2,时间复杂度低
    缺点:
    1,需要对均值给出定义,
    2,需要指定要聚类的数目;
    3,一些过大的异常值会带来很大影响;
    4,算法对初始选值敏感;
    5,适合球形聚类

    层次聚类:

    优点:
    1,距离和规则的相似度容易定义,限制少;
    2,不需要预先制定聚类数;
    3,可以发现类的层次关系;
    4,可以聚类成其它形状

    缺点:
    1,计算复杂度太高;
    2,奇异值也能产生很大影响;
    3,算法很可能聚类成链状

    密度聚类
    优点:
    1, 可以对任意形状的稠密数据集进行聚类,相对的,K-Means之类的聚类算法一般只适用于凸数据集。
    2、 可以在聚类的同时发现异常点,对数据集中的异常点不敏感。
    3、聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响。
    缺点:
    1、如果样本集的密度不均匀、聚类间距差相差很大时,聚类质量较差,这时用DBSCAN聚类一般不适合。
    2、如果样本集较大时,聚类收敛时间较长,此时可以对搜索最近邻时建立的KD树或者球树进行规模限制来改进。
    3、 调参相对于传统的K-Means之类的聚类算法稍复杂,主要需要对距离阈值ϵ,邻域样本数阈值MinPts联合调参,不同的参数组合对最后的聚类效果有较大影响。

    展开全文
  • 聚类算法总结 - 优缺点对比

    万次阅读 2019-08-27 09:55:19
    聚类算法是一种无监督的算法,由于不需要训练集,算法简单快速,引用在一些工程里比较简单突出,今天来了解一下聚类算法。 k-means算法(k均值算法) 算法步骤: (1)随机选取 K 个点,作为 K 类的聚类中心,用 ...

    前言

    聚类算法是一种无监督的算法,由于不需要训练集,算法简单快速,引用在一些工程里比较简单突出,今天来了解一下聚类算法。

    k-means算法(k均值算法)

    算法步骤:

    • (1)随机选取 K 个点,作为 K 类的聚类中心,用 K i K_i Ki表示

    • (2)遍历所有的数据点 P j P_j Pj,通过计算距离,找到距离 P j P_j Pj 最近的聚类中心点 K i K_i Ki,此时可以说第 j 个数据属于第 i 类

    • (3)分别计算第 i 类的所有数据的中心点,作为该类的新的聚类中心点。

    • (4)重复进行(2)(3)步骤。直到每一类的聚类中心不再发生变化

    从算法中我们需要确定以下几个标准:

    • k值的确定,我们必须确定我们算法中需要分几类
    • 计算距离公式,这个公式我们可以利用欧式距离来计算,
    • 聚类中心的计算:因为要不断更新聚类中心点,需要一个更新策略来更新
    优点
    • k-平均算法是解决聚类问题的一种经典算法,算法简单、快速。
    • 对处理大数据集,该算法是相对可伸缩的和高效率的,因为它的复杂度大约是 O ( n k t ) O(nkt) O(nkt),其中n是所有对象的数目,k是簇的数目,t是迭代的次数。通常k<<n。这个算法经常以局部最优结束。
    • 算法尝试找出使平方误差函数值最小的k个划分。当簇是密集的、球状或团状的,而簇与簇之间区别明显时,它的聚类效果很好。
    缺点
    • 对 K 值敏感。也就是说,K 的选择会较大程度上影响分类效果。在聚类之前,我们需要预先设定 K 的大小,但是我们很难确定分成几类是最佳的,比如上面的数据集中,显然分为 2 类,即K = 2 最好,但是当数据量很大时,我们预先无法判断。

    • 对离群点和噪声点敏感。如果在上述数据集中添加一个噪音点,这个噪音点独立成一个类。很显然,如果 K = 2,其余点是一类,噪音点自成一类,原本可以区分出来的点被噪音点影响,成为了一类了。如果 K = 3,噪音点也是自成一类,剩下的数据分成两类。这说明噪音点会极大的影响其他点的分类。

    • 初始聚类中心的选择。K-means 是随机选择 K 个点作为初始的聚类中心。但是,我们可以对这个随机性进行一点约束,使迭代速度更快。举个例子,如果上面的数据集我随机选择了(0,0)和(1,0)两个点,或者选择了(1.5,1.5)和(9,9)两个点,即可以加快迭代速度,也可以避免陷入局部最优。

    • 只能聚凸的数据集。所谓的凸数据集,是指集合内的每一对点,连接两个点的直线段上的每个点也在该集合内。通俗讲就是K-means 聚类的形状一般只能是球状的,不能推广到任意的形状,但是有研究表明,若采用 Bregman 距离,则可显著增强此类算法对更多类型簇结构的适用性

    改进
    • 针对K值的选择问题,主要是 K 的值必须认为预先设定,并且在整个算法执行过程中无法更改。此时,可以利用 ISODATA 算法:当属于某个类别的样本数过少,就将这个类别剔除;当属于这个类别的样本过多、分散程度很大的时候,就将这个类别分为两个子类,此时 K 也就会 + 1了,一些说明:虽然有很多启发式用于自动确定 k 的值,但是实际应用中,最常用的仍然是基于不同的 K 值,多次运行取平均值(周志华 《机器学习》书 P218)

    • 针对离群点和噪声点,我们可以使用一些算法,比如 RANSAC 、LOF 等剔除离群点。此外,基于 K-means 的改进算法有 k-medoids 和 k-medians

    • 对于初始聚类中心点的问题,K-means ++ 不再随机选择 K 个聚类中心:假设已经选取了 m 个聚类中心( 0 < m < K),m = 1时,随机选择一个聚类中心点;在选取第 m+1 个点的时候,距离当前 m 个聚类中心点的中心越远的点,越会以更高的概率被选为第 m+1 个聚类中心。这种方法在一定程度上可以让“随机”选择的聚类中心点的分布更均匀。此外还有 canopy 算法等。

    • K-means 是使用欧式距离来测量,显然,这种度量方式并不适合于所有的数据集。换句话说,K-means 比较适合聚那些球状的簇。参照 SVM 中核函数的思想,将样本映射到另外一个特征空间,就可以改善聚类效果。代表算法是;kernel K-means

    DBSCAN算法:基于密度的聚类算法

    算法流程:

    • 以每一个数据点 x i x_i xi为圆心,以 eps值 为半径画一个圆圈。这个圆圈被称为 x i x_i xi eps 邻域

    • 对这个圆圈内包含的点进行计数。
      (1) 如果一个圆圈里面的点的数目超过了密度阈值 MinPts,那么将该圆圈的圆心记为核心点,又称核心对象。
      (2) 如果某个点的 eps 邻域内点的个数小于密度阈值但是落在核心点的邻域内,则称该点为边界点
      (3) 既不是核心点也不是边界点的点,就是噪声点

    • 核心点 x i x_i xi的 eps 邻域内的所有的核心点连在一起,这样不断的将区域内的核心点连在一起,核心点的区域内又有核心点相当于从 x 1 x_1 x1 - > x 2 x_2 x2 - > . . . - > x n x_n xn,类似于密度传导一样,那么, x n x_n xn x 1 x_1 x1 密度可达。这个性质说明了由密度直达的传递性,可以推导出密度可达。

    • 如果对于 x k x_k xk,使 x i x_i xi x j x_j xj都可以由 x k x_k xk密度可达,那么,就称 x x i x_i xi x j x_j xj 密度相连。将密度相连的点连接在一起,就形成了我们的聚类簇。

    通过上述算法我们可以看到算法需要两个参数:

    • eps值,半径值,用来做区域
    • MinPts值,用来判断哪些点是核心点

    西瓜书上的算法图:

    [外链图片转存失败(img-XUnqJLD8-1566869759407)(https://raw.githubusercontent.com/Klauszhao/picture/master/picture/cluster/DBSCAN%E8%81%9A%E7%B1%BB%E7%AE%97%E6%B3%95.png)]

    英文算法:
    [外链图片转存失败(img-rOHqxEAp-1566869523673)(https://raw.githubusercontent.com/Klauszhao/picture/master/picture/cluster/DBSCAN%E8%8B%B1%E6%96%87%E7%89%88.jpg)]

    优点
    • 自适应的聚类,不需要提前设定K值大小,可以自适应的做聚类结果。

    • 对噪声不敏感。这是因为该算法能够较好地判断离群点,并且即使错判离群点,对最终的聚类结果也没什么影响

    • 能发现任意形状的簇。这是因为DBSCAN 是靠不断连接邻域呢高密度点来发现簇的,只需要定义邻域大小和密度阈值,因此可以发现不同形状,不同大小的簇

    • 聚类结果没有偏倚,相对的,K-Means之类的聚类算法初始值对聚类结果有很大影响

    缺点
    • 对两个参数的设置敏感,即圈的半径 eps 、阈值 MinPts

    • DBSCAN 使用固定的参数识别聚类。显然,当聚类的稀疏程度不同,聚类效果也有很大不同。即数据密度不均匀时,很难使用该算法

    • 如果数据样本集越大,收敛时间越长。此时可以使用 KD 树优化

     
    from sklearn.datasets.samples_generator import make_circles
    import matplotlib.pyplot as plt
     
    import time
    from sklearn.cluster import KMeans
     
    from sklearn.cluster import DBSCAN
     
    X,y_true = make_circles(n_samples=1000,noise=0.15) #这是一个圆环形状的
     
    plt.scatter(X[:,0],X[:,1],c=y_true)
    plt.show()
     
     
    #DBSCAN 算法
    t0 = time.time()
    dbscan = DBSCAN(eps=.1,min_samples=6).fit(X)  # 该算法对应的两个参数
    t = time.time()-t0
    plt.scatter(X[:, 0], X[:, 1], c=dbscan.labels_)
    plt.title('time : %f'%t)
    plt.show()
    

    凝聚式层次聚类

    层次聚类可以分为凝聚(agglomerative)层次聚类和分裂(divsive)层次聚类。分裂层次聚类采用的就是"自顶而下"的思想,先将所有的样本都看作是同一个簇,然后通过迭代将簇划分为更小的簇,直到每个簇中只有一个样本为止。凝聚层次聚类采用的是"自底向上"的思想,先将每一个样本都看成是一个不同的簇,通过重复将最近的一对簇进行合并,直到最后所有的样本都属于同一个簇为止。

    算法步骤:

    • 我们首先将每个数据点视为一个单一的簇,即如果我们的数据集中有 X 个数据点,那么我们就有 X 个簇。然后,我们选择一个测量两个簇之间距离的距离度量标准。作为例子,我们将用 average linkage,它将两个簇之间的距离定义为第一个簇中的数据点与第二个簇中的数据点之间的平均距离。
    • 在每次迭代中,我们将两个簇合并成一个。这两个要合并的簇应具有最小的 average linkage。即根据我们选择的距离度量标准,这两个簇之间的距离最小,因此是最相似的,应该合并在一起。
    • 重复步骤 2 直到我们到达树根,即我们只有一个包含所有数据点的簇。这样我们只需要选择何时停止合并簇,即何时停止构建树,来选择最终需要多少个簇!

    从算法中我们可以知道,我们需要提供一下:

    • 距离计算公式,计算两个类之间的距离

    在凝聚层次聚类中,判定簇间距离的两个标准方法就是单连接(single linkage)和全连接(complete linkage)。单连接,是计算每一对簇中最相似两个样本的距离,并合并距离最近的两个样本所属簇。全连接,通过比较找到分布于两个簇中最不相似的样本(距离最远),从而来完成簇的合并。

    凝聚层次聚类除了通过单连接和全连接来判断两个簇之间的距离之外,还可以通过平均连接(average linkage)和ward连接。使用平均连接时,合并两个簇所有成员间平均距离最小的两个簇。使用ward连接,合并的是使得SSE增量最小的两个簇。

    优点
    • 1、距离和规则的相似度容易定义,限制少
    • 2、不需要预先制定聚类数
    • 3、可以发现类的层次关系
    缺点
    • 1,计算复杂度太高;
    • 2,奇异值也能产生很大影响;
    • 3,算法很可能聚类成链状

    参考博客

    聚类算法(一)—— k-means算法以及其改进算法
    聚类算法(三)——基于密度的聚类算法(以 DBSCAN 为例)
    聚类算法(二)、聚类算法的系统性比较

    展开全文
  • 层次聚类的介绍

    万次阅读 2016-03-04 20:43:12
    AGNES算法(自底向上层次聚类)  AGNES(Agglomerative Nesting) 是凝聚的层次聚类算法,如果簇C1中的一个对象和簇C2中的一个对象之间的距离是所有属于不同簇的对象间欧式距离中最小的,C1和C2可能被合并。这是一...





    AGNES算法(自底向上层次聚类)

           AGNES(Agglomerative Nesting) 是凝聚的层次聚类算法,如果簇C1中的一个对象和簇C2中的一个对象之间的距离是所有属于不同簇的对象间欧式距离中最小的,C1和C2可能被合并。这是一种单连接方法,其每个簇可以被簇中的所有对象代表,两个簇之间的相似度由这两个簇中距离最近的数据点对的相似度来确定。

     

           算法描述:

                  输入:包含n个对象的数据库,终止条件簇的数目k

                  输出:k个簇

    (1)       将每个对象当成一个初始簇

    (2)       Repeat

    (3)                根据两个簇中最近的数据点找到最近的两个簇

    (4)                合并两个簇,生成新的簇的集合

    (5)       Until达到定义的簇的数目

           算法性能:

    (1)       简单,但遇到合并点选择困难的情况。

    (2)       一旦一组对象被合并,不能撤销

    (3)       算法的复杂度为O(n的平方),不适合大数据集

           DIANA(Divisive Analysis)算法属于分裂的层次聚类,首先将所有的对象初始化到一个簇中,然后根据一些原则(比如最邻近的最大欧式距离),将该簇分类。直到到达用户指定的簇数目或者两个簇之间的距离超过了某个阈值。

           DIANA用到如下两个定义:

    (1)       簇的直径:在一个簇中的任意两个数据点都有一个欧氏距离,这些距离中的最大值是簇的直径

    (2)       平均相异度(平均距离):

                        

           算法描述:

                  输入:包含n个对象的数据库,终止条件簇的数目k

                  输出:k个簇,达到终止条件规定簇数目

    (1)       将所有对象整个当成一个初始簇

    (2)       For ( i=1;i!=k;i++) Do Begin

    (3)         在所有簇中挑选出具有最大直径的簇;

    (4)           找出所挑出簇里与其他点平均相异度最大的一个点放入splinter group,剩余的放入old party中。

    (5)           Repeat

    (6)             在old party里找出到splinter group中点的最近距离不大于old party中点的最近距离的点,并将该点加入splinter group

    (7)           Until 没有新的old party的点被分配给splinter group;

    (8)       Splinter group 和old party为被选中的簇分裂成的两个簇,与其他簇一起组成新的簇集合

    (9)       END

           算法性能:

                  缺点是已做的分裂操作不能撤销,类之间不能交换对象。如果在某步没有选择好分裂点,可能会导致低质量的聚类结果。大数据集不太适用。


    层次聚类算法的分析:

    层次聚类法的优点是可以通过设置不同的相关参数值,得到不同粒度上的多层次聚类结构;在聚类形状方面,层次聚类适用于任意形状的聚类,并且对样本的输入顺序是不敏感的。 
    层次聚类的不足之处是算法的时间复杂度大,层次聚类的结果依赖聚类的合并点和分裂点的选择。并且层次聚类过程最明显的特点就是不可逆性,由于对象在合并或分裂之后,下一次聚类会在前一次聚类基础之上继续进行合并或分裂,也就是说,一旦聚类结果形成,想要再重新合并来优化聚类的性能是不可能的了。聚类终止的条件的不精确性是层次聚类的另一个缺点,层次聚类要求指定一个合并或分解的终止条件,比如指定聚类的个数或是两个距离最近的聚类之间最小距离阈值。


    展开全文
  • 层次聚类定义、层次聚类过程可视化、簇间距离度量、BIRCH、两步聚类、BIRCH算法优缺点 目录 层次聚类定义、层次聚类过程可视化、簇间距离度量、BIRCH、两步聚类、BIRCH算法优缺点 层次聚类定义 层次聚类过程可视...

    层次聚类定义、层次聚类过程可视化、簇间距离度量、BIRCH、两步聚类、BIRCH算法优缺点

    目录

    展开全文
  • 上篇博客介绍的层次聚类,尤其是AGNES这一传统的层次聚类算法。这篇博客介绍层次聚类的优化算法。...优缺点: 适合大规模数据集,线性效率; 只适合分布呈凸形或者球形的数据集、需要给定聚类个数和簇之间
  • 聚类算法汇总 一、方法名字 ...K均值算法的缺点: 1)在簇的平均值可被定义的情况下才能使用,可能不适用于某些应用; 2) 在 K-means 算法中 K 是事先给定的,这个 K 值的选定是非常难以估计的。很多时候,事...
  • 聚类算法优缺点总结

    千次阅读 2020-07-01 23:57:12
    聚类算法优缺点总结 目录 K均值算法 二分K-均值算法 Min单链凝聚层次聚类 Max全链凝聚层次聚类 组平均凝聚层次聚类 Ward方法 质心方法 Lance-Williams公式 DBSCAN密度聚类 聚类算法分析的角度 数据具有大小很不同...
  • 层次聚类和Kmeans

    2020-12-21 20:56:12
    文章目录层次聚类层次聚类流程层次聚类优缺点Kmeans聚类Kmeans聚类流程K-Means的优缺点 层次聚类 层次聚类流程 (1) 计算两两样本之间的距离; (2) 将距离最小的两个类合并成一个新类; (3) 重新计算新类与所有类之间...
  • kmeans-聚类优缺点

    千次阅读 2019-07-18 20:17:59
    K-Means要点:  1)对于K-Means算法,首先要注意的是k值的选择,一般来说,我们会根据对数据的先验...由于我们是启发式方法,k个初始化的质心的位置选择对最后的聚类结果和运行时间都有很大的影响,因此需要选择...
  • 聚类算法(二)—— 优缺点对比

    千次阅读 2020-07-10 18:47:45
    各种聚类算法优缺点: https://blog.csdn.net/randompeople/article/details/91351177 总结下: Kmeans 优点: 简单快速 可处理大数据集,高效可伸缩,复杂度O(nkt),经常以局部最优结束 尝试找出使平方误差...
  • 聚类算法优缺点分析

    千次阅读 2020-12-11 10:03:46
    不均匀的话,聚类效果不好,样本大,收敛时间长 凝聚式层次聚类 速度快,对异常值影响不大,使用内存小 对高斯簇聚类效果不好 EM算法 基于图 使用降维技术,适合高维空间。对聚类类别少准确率高。 对参数敏感,不...
  • 层次聚类(Hierarchical Clustering)是聚类算法的一种,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树,距离越小,相似度越高。在聚类树中,不同类别的原始数据点是树的最低层,树的顶层是一个聚类...
  • 一.聚类的概念 ...(1)基于层次聚类 原理:试图在不同层次上对数据集进行划分,从而形成树形的聚类结构。数据集的划分可采用“自底向上”的聚合策略和“自顶向下”的拆分策略。 (2)基于分割(划分)的
  • 层次聚类(AGNES)

    千次阅读 2018-12-02 17:00:54
    AGNES层次聚类,采用自底向上聚合策略的算法。先将数据集的每个样本看做一个初始的聚类簇,然后算法运行的每一步中找出距离最近的两个 类簇进行合并,该过程不断重复,直至达到预设的聚类簇的个数。 ''' #计算两个...
  • 层次聚类算法介绍

    2020-07-15 00:23:38
    3合并算法思想1)重心法2)最短距离法3)最长距离法4)组间平均连接法5)组内平均链接法4算法流程程序执行过程:5 示例与分析5.1基于最小值的层次聚类优缺点5.2 基于最大值的层次聚类优缺点5.3基于组平均优缺点 ...
  • 层次聚类算法

    千次阅读 2017-04-23 21:59:48
    层次聚类的基本概念  层次聚类方法是古老而且常用的聚类方法。层次聚类方法又有两种产生层次聚类的基本方法。 凝聚的:该方法是自底向上的方法,初始每个对象看做一个簇,每一步合并最相近的簇,最终形成一个簇。...
  • Python中的凝聚层次聚类示例

    千次阅读 2019-01-02 09:19:07
    层次聚类算法将相似的对象分组到称为聚类的组中。层次聚类算法有两种: 凝聚(Agglomerative )-自下而上的方法。从许多小聚类开始,然后将它们合并到一起,创建更大的聚类。 分裂 (Divisive )- 自上而下的方法...
  • 聚类算法(4)--Hierarchical clustering层次聚类

    万次阅读 多人点赞 2018-11-07 17:45:47
    3、层次聚类优缺点 二、python实现 1、sklearn实现 2、scipy实现 树状图分类判断 一、层次聚类 1、层次聚类的原理及分类 1)层次法(Hierarchicalmethods)先计算样本之间的距离。每次将距离最近的点合并到...
  • 1. 层次聚类 1.1 层次聚类的原理及分类 1)层次法(Hierarchicalmethods):先计算样本之间的距离。每次将距离最近的点合并到同一个类。然后,再计算类与类之间的距离,将距离最近的类合并为一个大类。不停的合并...
  • 作者 | Josh Thompson编译 | 张睿毅、王雨桐来源 | 数据派THU原文 | Choosing the Right Clustering Algorithm for your Dataset - KDnuggets聚类算法十分容易上手,但是选择恰当的聚类算法并不是一件容易的事。...
  • 机器学习(聚类六)——层次聚类

    千次阅读 2020-04-13 16:28:34
    这篇博客开始另外一种聚类——层次聚类层次聚类和K-Means是同一类的,属于划分聚类。层次聚类方法对给定的数据集进行层次的分解,直到满足某种条件为止.
  • 层次聚类笔记

    2019-08-27 09:49:57
    层次聚类算法原理一、聚类算法的分类层次聚类合并算法 一、聚类算法的分类 层次聚类 划分聚类:图论、Kmean 基于密度:DBSCAN 基于网格 层次聚类 通过计算不同类别数据节点间的相似度来创建一颗有层次的...
  • 一、层次聚类 - 单连接聚类(Single Link) Step: 1、假设每个点是一个类(1,2,3,4,5,6,7,8) 2、计算每个类两两之间的距离 3、距离最短的类,合并为同一个类,如果类中有多个,根据不同层次算法选择的距离不同 ...
  • (十七 层次聚类

    2021-02-01 11:46:04
    层次聚类 参考 什么是层次聚类 层次聚类(Hierarchical Clustering)是聚类算法的一种,顾名思义就是要一层一层地进行聚类,通过计算不同类别数据点间的相似度来创建一棵有层次的嵌套聚类树。在聚类树中,不同类别的...
  • 机器学习sklearn(13)层次聚类

    千次阅读 2019-04-09 20:34:15
    层次聚类(Hierarchical Clustering)是聚类算法的一种,基于层次的聚类算法(Hierarchical Clustering)可以是凝聚的(Agglomerative)或者分裂的(Divisive),取决于层次的划分是“自底向上”还是“自顶向下”。...
  • 层次聚类详解(附代码)

    万次阅读 2018-07-31 14:48:39
    本篇博客主要介绍机器学习算法中的层次聚类层次聚类不同于传统的K-Means聚类算法,它在初始K值和初始聚类中心点的选择问题上会存在优势。  层次聚类 层次聚类就是一层一层的进行聚类,可以由下向上,或由上向下...
  • 层次聚类算法是建立簇的层次,每个结点是一个簇,且又包含了子簇结点。层次聚类算法包括聚集聚类算法和分裂聚集算法。分裂聚集是从一个大的簇划分为小的结点。而聚集聚类是反过来的,从单个结点到一个大的簇。 2 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,856
精华内容 1,942
关键字:

层次聚类的优缺点