首先来说,聚类算法是一种无监督学习算法,用于将一组数据按照它们的相似性划分成不同的组(称为“簇”)。它不会依赖预先定义的标签,而是自动根据数据本身的特性发现这些组。
聚类就像把一堆东西分类整理,比如按照颜色、大小、形状把玩具分成不同的篮子。
如果需要本文PDF版本的同学,文末获取~
另外,文末有总结性的干货~
一起来看下具体细化内容~
层次聚类是聚类算法的一种,它会一步步地将数据点聚合到一起,形成一棵“聚类树”(称为树状图,dendrogram)。根据需求,可以在不同的层级选择划分结果。
层次聚类有两种主要方式:
1.凝聚式(自底向上):每个数据点开始作为一个独立的簇,逐步将最近的簇合并,直到只剩一个大簇。2.分裂式(自顶向下):从一个大簇开始,将其逐步拆分成更小的簇。
场景:假设你是一家餐馆老板,餐厅里来了6位顾客,他们互相认识的程度(即亲密关系)如下:
目标:把这些人分成若干组,关系更近的坐在一起。
每个人都是一个独立的簇:
从距离矩阵中,找到最近的两个人:
于是合并成一个簇:
更新簇和其他人的距离。常见方法是最小距离法,即取簇中任意两点的最小距离:
更新后的距离矩阵:
再次寻找最近的两个:
合并成一个簇:
更新距离矩阵:
继续:
最终可构造树状图,将人群分成更大的簇直到合并成一个。
层次聚类像是搭积木,根据“距离”逐步合并,最终形成一个分类树。你可以在任何层级“剪开”,得到需要的簇。例如:
层次聚类的核心在于定义簇之间的相似性(或距离),并逐步合并最近的簇。以下是具体推导过程。
给定数据集,其中,我们需要将数据划分成个簇,使得:
基本目标:通过一系列的合并操作生成一个树状结构(树状图,dendrogram)。
在聚类中,核心是定义两点或两簇之间的距离。常见的距离计算方法包括:
假设和是两个簇,簇中的点集合分别是和。常见定义方式有:1.最小距离法(SingleLinkage):
适合找“紧密连接”的簇。
2.最大距离法(CompleteLinkage):
更强调“整体分离”。
3.平均距离法(AverageLinkage):
考虑两簇之间所有点的平均距离。
4.质心距离法(CentroidLinkage):
其中,质心$\mu_1=\frac1}{C_1|\sum_{x_i\inC_1}x_i$,质心距离计算较快,但可能不适合非凸形状。
数据点集合,距离度量,簇间距离定义(如最小距离)。
生成的树状图或任意层次的簇划分。
1.初始化:每个点单独成为一个簇,记为。
2.计算距离矩阵:计算所有簇之间的初始距离,构造距离矩阵,其中。
3.合并簇:
4.重复步骤3:直到簇数量减少到1或达到预期层次。
5.输出:生成一棵树状图。
假设当前簇为,合并后形成新簇,剩下的簇为。
新簇到其他簇的距离更新公式取决于距离度量:
(加权平均)。
1.初始距离矩阵计算:
需要计算两两点之间的距离。
2.合并操作:在每次合并中更新距离矩阵,涉及次操作,共次合并:
1.初始化距离矩阵(欧几里得距离):
2.合并最近的点:
1.可解释性强:层次聚类通过生成树状图(Dendrogram)展现数据的分层结构,直观显示数据的分组关系。便于分析簇的形成过程和相似性。
2.无需预设簇数量:与-均值聚类等方法不同,不需要事先指定簇的数量,适用于对未知数据的探索。
3.适合发现分层结构:如果数据具有自然的层次或嵌套关系(如家族谱系、生物分类),层次聚类可以很好地捕捉这种结构。
4.对噪声点更鲁棒:相比密度聚类,层次聚类对小规模的噪声点影响较小,尤其是“单链”或“全链”方法。
5.灵活的距离定义:支持多种簇间距离计算方式(单链、全链、平均等),能够根据任务需求调整方法。
2.合并不可逆:一旦将两个点或簇合并,无法撤回。初始合并错误可能影响最终结果。
3.对距离度量敏感:不同的距离度量方法会显著影响结果,选择不当可能导致误差。
4.无法处理非凸簇:由于基于距离,层次聚类难以处理非凸形状的簇(如环形、蛇形)。
5.缺乏中心:层次聚类无法提供簇的“中心”点或代表性样本,不适合用来直接生成摘要信息。
基于市场细分(消费者行为聚类),我们下面来实现具体细节:
1.生成模拟消费者数据:包含年龄、收入、购买频率等。2.应用层次聚类算法:生成聚类结果。3.生成两个图形:
代码:
PCA投影后的聚类结果:数据被降维至二维平面,使用颜色标识不同簇。图中展示了层次聚类的分组效果。
树状图(Dendrogram):展示了层次聚类的分层结构,显示不同簇的合并过程。可以通过剪切树状图来决定分组数量。