层次聚类算法原理

一、层次聚类算法原理与步骤

层次聚类算法是一种基于距离的聚类方法,其原理基于样本间的相似度或距离度量。层次聚类算法将数据样本集合视为簇,通过合并数据样本集合不断生成树形结构,最终将所有数据样本集合聚类至整个树形结构只有一个根节点的情形。其主要步骤包括:

1、计算样本间的距离/相似度矩阵。


def pairwise_distances(X, Y=None, metric='euclidean', **kwds):
    X, Y = check_pairwise_arrays(X, Y)
    if metric == "euclidean":
        distances = - 2 * safe_sparse_dot(X, Y.T, dense_output=True)
        distances += (X ** 2).sum(axis=1).reshape(-1, 1) + (Y ** 2).sum(axis=1)
        return np.maximum(distances, 0)
    ...

2、将每个样本各自分到一个簇中。


def _initialize(X):
    n_samples = X.shape[0]
    clusters = np.arange(n_samples).reshape(-1, 1)
    sizes = np.ones(n_samples, dtype=np.int)
    return clusters, sizes, n_samples

3、迭代地根据距离/相似度矩阵合并最近的两个簇。


def _single_linkage(D, n_clusters, connectivity=None, n_neighbors=None):
    if n_neighbors is not None:
        if connectivity is None:
            connectivity = kneighbors_graph(n_neighbors=n_neighbors, X=D, include_self=True)
        connectivity = 0.5 * (connectivity + connectivity.T)

    if sparse.issparse(D):
        return _single_linkage_sparse(D, n_clusters, connectivity)
    else:
        return _single_linkage_dense(D, n_clusters, connectivity)

4、重复步骤3直至所有数据样本均聚类至整个树形结构只有一个根节点的情形。

二、层次聚类算法对链式效应的影响

层次聚类算法的链式效应表示的是不同高度的簇在合并时可能造成错误累积,进而导致最终的聚类结果产生偏差。当样本的真实类别结构为非二叉树形结构时,链式效应可能会进一步加剧聚类结果的偏差,这是层次聚类算法的局限之一。

举例而言,现有5个样本,它们真实的类别分别为{1,2},{3,4},以及{5},且这三个类别之间的距离均相等。若进行层次聚类,在不同高度的簇合并时可能会遵从不同的合并方式,导致最终聚类结果出现误差。

三、层次聚类算法原理及应用举例

层次聚类算法原理核心其实是基于距离的度量方式。聚类中的层次,由树状图表现。层次聚类广泛应用于生物学领域的基因表达数据分析,以及社会人文科学领域的数据分析,如客群分析、电商推荐系统等。

以客群分析为例,若想对用户进行分群,首先需要构建相应的样本特征,比如用户的年龄、地区、消费行为等。之后根据这些特征计算样本间的距离/相似度,通过层次聚类算法将样本分为不同的簇群。在此基础上,根据每个簇群对应的用户特征或者其聚类结果进行相关的分析和应用。

四、层次聚类算法概念

层次聚类算法主要包含以下几个概念:

1、样本间的距离/相似度:用于量化样本之间的差异,通常采用欧几里得距离、曼哈顿距离等方式。

2、簇:每个簇由多个样本组成,其特征可以通过簇内的样本特征的均值或者其他任意的方式得到。

3、树形结构:层次聚类算法的聚类结果以树状图的形式呈现,树的每个节点都对应一个数据集合,树的叶节点表示数据集合中的单个样本。

五、层次聚类的三种方法

层次聚类算法根据簇间的距离度量方法的不同,可以分为以下三种方法:

1、最小距离法(single-linkage):簇间距离定义为最近的两个数据样本之间的距离,可以有效地抑制链式效应,但同时也增加了噪音点的影响。

2、最大距离法(complete-linkage):簇间距离定义为当前两个数据簇中距离最远的两个样本之间的距离,可以抑制噪音点的影响,但容易因为马尔科夫现象而偏向相同大小簇的合并。

3、组平均法(average-linkage):簇间距离定义为两个簇中样本间距离的平均值,中庸而平衡。

六、层次聚类方法优缺点

层次聚类算法的优点主要在于:

1、不需要指定簇的数量,节省了决策过程中的主观因素;

2、可视化效果好,更直观地观察聚类结果;

3、能够处理非凸分布、大小差异较大的数据分布;

4、适合于大量数据的场景,预测效果较好。

但其缺点也显而易见:

1、每步迭代计算量较大,效率较低;

2、受到初始聚类中心的影响较大,结果易受到大量噪音样本的影响;

3、算法的结果可能受到距离度量方式的影响。

七、SPSS层次聚类法

SPSS作为一种统计分析软件,层次聚类算法也被广泛应用。其默认的层次聚类方法为最小距离法。

使用SPSS进行层次聚类需要进行以下步骤:

1、选择相应的数据集;

2、指定变量会被包含在聚类分析中;

3、选择层次聚类法方法和判断聚类数量的准则;

4、对聚类结果进行覆盖和分析。


IMPORT  FILE='/path/to/data' 
        /TYPE=CSV
        /ARRANGEMENT=DELIMITED
        /DELIMITERS="," 
        /FIRSTCASE=2 
        /DATATYPEMIN PERCENTAGE=95.0
        /VARIABLES=name1 name2 name3... 
        /USE=IF CURRENTVAR('name1')=-999.
        /CLEAR.

CLUSTER name1 name2 name3 
  /LINKAGE = SINGLE 
  /DISTANCE = EUCLIDEAN 
  /METHOD = HIERARCHICAL(4)
  /CRITERIA = CUT(number of clusters)   
   distance(distance cutoff)
   merge(times merged together)
   change in cluster similarity
    (increment in R square)
  /PRINT THRESHOLD 
  /COMPARE = NONE 
  /MISSING=LISTWISE.

八、层次聚类算法有哪些

除了文中已经提到的最小距离法、最大距离法、组平均法,层次聚类算法还有:

1、centroid粗略法:按照每个簇内的样本的坐标向量平均值得到该数据簇的中心。

2、median cut法:将图像转化为样本点存储,按照样本点在像素颜色空间的分布情况将空间分为几个区域,在每个区域内分别进行层次聚类,使层次聚类与图像质量的关联更加显著。

3、Ward方法:以凝聚中心法为基础,升级计算方式,使用重心距离衡量两个簇之间的相似度。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/190447.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-29 22:34
下一篇 2024-11-29 22:34

相关推荐

  • 蝴蝶优化算法Python版

    蝴蝶优化算法是一种基于仿生学的优化算法,模仿自然界中的蝴蝶进行搜索。它可以应用于多个领域的优化问题,包括数学优化、工程问题、机器学习等。本文将从多个方面对蝴蝶优化算法Python版…

    编程 2025-04-29
  • Python实现爬楼梯算法

    本文介绍使用Python实现爬楼梯算法,该算法用于计算一个人爬n级楼梯有多少种不同的方法。 有一楼梯,小明可以一次走一步、两步或三步。请问小明爬上第 n 级楼梯有多少种不同的爬楼梯…

    编程 2025-04-29
  • AES加密解密算法的C语言实现

    AES(Advanced Encryption Standard)是一种对称加密算法,可用于对数据进行加密和解密。在本篇文章中,我们将介绍C语言中如何实现AES算法,并对实现过程进…

    编程 2025-04-29
  • Harris角点检测算法原理与实现

    本文将从多个方面对Harris角点检测算法进行详细的阐述,包括算法原理、实现步骤、代码实现等。 一、Harris角点检测算法原理 Harris角点检测算法是一种经典的计算机视觉算法…

    编程 2025-04-29
  • 数据结构与算法基础青岛大学PPT解析

    本文将从多个方面对数据结构与算法基础青岛大学PPT进行详细的阐述,包括数据类型、集合类型、排序算法、字符串匹配和动态规划等内容。通过对这些内容的解析,读者可以更好地了解数据结构与算…

    编程 2025-04-29
  • 瘦脸算法 Python 原理与实现

    本文将从多个方面详细阐述瘦脸算法 Python 实现的原理和方法,包括该算法的意义、流程、代码实现、优化等内容。 一、算法意义 随着科技的发展,瘦脸算法已经成为了人们修图中不可缺少…

    编程 2025-04-29
  • 神经网络BP算法原理

    本文将从多个方面对神经网络BP算法原理进行详细阐述,并给出完整的代码示例。 一、BP算法简介 BP算法是一种常用的神经网络训练算法,其全称为反向传播算法。BP算法的基本思想是通过正…

    编程 2025-04-29
  • 粒子群算法Python的介绍和实现

    本文将介绍粒子群算法的原理和Python实现方法,将从以下几个方面进行详细阐述。 一、粒子群算法的原理 粒子群算法(Particle Swarm Optimization, PSO…

    编程 2025-04-29
  • Python回归算法算例

    本文将从以下几个方面对Python回归算法算例进行详细阐述。 一、回归算法简介 回归算法是数据分析中的一种重要方法,主要用于预测未来或进行趋势分析,通过对历史数据的学习和分析,建立…

    编程 2025-04-28
  • 象棋算法思路探析

    本文将从多方面探讨象棋算法,包括搜索算法、启发式算法、博弈树算法、神经网络算法等。 一、搜索算法 搜索算法是一种常见的求解问题的方法。在象棋中,搜索算法可以用来寻找最佳棋步。经典的…

    编程 2025-04-28

发表回复

登录后才能评论