【数据挖掘】第8章 聚类分析: 基本概念和算法

8 聚类分析: 基本概念和算法


一、聚类分析概述

1)什么是聚类分析

聚类分析仅根据在数据中发现的描述对象及其关系的信息,将数据对象分组。其目标是, 组内的对象之间是相似的(相关的),而不同的组中的对象是不同的(不相关的)。
组内的相似性(同质性)越大,组间差别越大,聚类就越好。

在这里插入图片描述
聚类分析的应用
在这里插入图片描述

2)不同的簇类型

簇(Cluster)的定义是不精确的
在这里插入图片描述
不同的簇类型

  • Well-separated clusters(明显分离的簇)
  • Center-based clusters(基于中心的簇)
  • Contiguous clusters(基于邻近的簇)
  • Density-based clusters (基于密度的簇)
  • Property or Conceptual (概念簇)
    在这里插入图片描述
3)聚类算法的分类

大体上,主要的聚类算法可以划分为如下几类:划分方法层次方法基于密度的方法基于网格的方法

1–划分方法
▪ 给定一个有N个元组或者记录的数据集,划分方法将构造K个分组,每一个分组就代表一个聚类,K<N。而且这K分组满足下列条件:
1)每一个分组至少包含一个数据记录;
2)每一个数据记录隶属于且仅属于一个分组;
▪ 对于给定的K,算法首先给出一个初始的分组方法,以后通过反复迭代的方法改变分组,使得每一次改进之后分组方案都较前一次好,所谓的“好”的标准就是同一分组的记录越相似越好,而不同分组中的记录则越相异越好。
▪ 最著名与最常用的划分方法是 k-均值方法 和 k-中心点方法。

2–基于层次的方法
▪ 一个层次的聚类方法是将数据对象组成一棵聚类的树。根据层次分解是自底向上还是自顶向下形成,层次的聚类方法可以进一步分为聚合式层次聚类(agglomerative)和分裂式层次聚类(divisive)。
▪ 聚合式的层次聚类,其层次过程的方向是自底向上的。将样本集合中的每个对象作为一个初始簇,然后将最近的两个簇合并,组成新的簇,再将这个新簇与剩余的簇中最近的合并,这种合并过程需要反复进行,直到所有的对象最终被聚到一个簇中。
▪ 分裂式的层次聚类,其层次过程的方向是自顶向下的,最初先将有关对象放到一个簇中,然后将这个簇分裂,分裂的原则是使两个子簇之间的聚类尽可能的远,分裂的过程也反复进行,直到某个终止条件被满足时结束。不论是合并还是分解的过程,都会产生树状结构,树的叶子节点对应各个独立的对象,顶点对应一个包含了所有对象的簇。
▪ 常见的层次聚类算法有:BIRCH算法、CURE算法、ROCK算法等。

3–基于密度的方法
▪ 基于密度的方法与其他方法的一个最根本的区别是:它不是基于各种各样的距离,而是基于密度的,它将簇看做是数据空间中被低密度区域分割开的高密度对象区域,这种方法的优势是善于发现空间数据库中任意形状的聚类。
▪ 基于密度的聚类根据空间密度的差别,把具有相似密度的点作为聚类。由于密度是一个局部概念,这类算法又称为局部聚类(Local Clustering)。一般情况下,基于密度的聚类只扫描一次数据库,故又称为是单次扫描聚类(Single Scan Clustering)。
▪ 基于密度的聚类方法主要:DBSCAN算法、DENCLUE算法。

4–基于网格的方法
▪ 基于网格的方法采用一个多分辨率的网格数据结构。它将数据空间量化,并将其划分为有限数目的网格单元,所有的聚类操作都在网格上进行。该算法的优势在于处理速度快,处理时间与数据对象的数目无关。
▪ 基于网格的聚类方法有STING算法和CLIQUE算法等。

二、K-均值聚类算法

K-means Clustering
K均值是基于原型的、划分的聚类技术。
典型的基于原型的、划分的聚类算法: K均值K中心点

  • K均值用 质心 定义原型,其中质心是一组点的均值。 K均值聚类用于n维连续空间中的对象。它试图发现用户指定个数(K)的簇(由质心代表)。
  • K中心点使用 中心点 定义原型,其中中心点是一组点中最有代表性的点。K中心点聚类可以用于广泛的数据,因为它只需要对象之间的邻近性度量。尽管质心几乎从来不对应实际的数据点,但是根据定义,中心点必须是一个实际的数据点。
1)基本K均值算法

K均值的算法步骤:首先选择K个初始质心,其中K是用户指定的参数,即所期望的簇的个数。每个点指派到最近的质心,而指派到一个质心的点集为一个簇。然后,根据指派到簇的点,更新每个簇的质心。重复指派和更新步骤,直到簇不发生变化,或等价的,直到质心不发生变化。

算法流程如下:
在这里插入图片描述
K-means Clustering: Example
在这里插入图片描述
K-均值聚类的距离度量与目标函数
考虑邻近度量为欧几里得距离的数据
度量聚类质量最常用的是误差的平方和(SSE)
▪ 对于每个点, 其误差是到最近质心的距离
▪ 为了得到 SSE, 我们对每个点的误差求平方和    S S E = ∑ i = 1 K ∑ x ∈ C i d i s t 2 ( c i , x ) SSE=\displaystyle\sum_{i=1}^{K}\sum_{x\in C_i}dist^2(c_i,x) SSE=i=1KxCidist2(ci,x)
x x x是簇 $C_i $的点, c i c_i ci 是簇 C i C_i Ci的代表点
  可以证明 c i c_i ci 对应于簇的质心(均值)    c i = 1 m i ∑ x ∈ C i x c_i=\frac{1}{m_i}\displaystyle\sum_{x\in C_i}x ci=mi1xCix

▪ 给定两个聚类, 我们可以选择具有最小SSE的聚类

其它距离度量
K-means也可以用于非欧氏空间数据
例, 文档数据

  • 通常, 文档用余弦相似性度量
    距离是相异性度量, 而余弦是相似性度量
    质心仍然用均值
    最近的质心是最相似的质心
  • 目标: 最大化簇中文档与簇的质心的相似性
    总凝聚度    T o t a l c o h e s i o n = ∑ i = 1 K ∑ x ∈ C i c o s i n e ( x , c i ) Totalcohesion=\displaystyle\sum_{i=1}^{K}\sum_{x\in C_i}cosine(x,c_i) Totalcohesion=i=1KxCicosine(x,ci)

K均值:邻近度、质心和目标函数的常见选择
在这里插入图片描述

基本K均值算法存在的问题

  • 不同的初始质心将收敛得到不同的目标函数,可能只能达到局部最优解。
  • 随机选取初始质心,拙劣的初始质心,可能导致很糟糕的聚类结果。
  • 可能产生空簇
  • 容易受到离群点的影响
  • 不能处理非球形簇、不同尺寸和不同密度的簇

1–初始质心问题
在这里插入图片描述
解决初始质心的选择问题
方法1:多次运行,选取最小的SSE
方法2:采用小部分数据,并进行层次聚类得到初始质心
方法3:选择多于K个的初始质心,并在其中选出K个分布广泛的作为初始质心。

  • 随机地选择第一个点,或取所有点的质心作为第一个点。然后,对于每个后继初始质心,选择离已经选取过的初始质心最远的点。
  • 使用这种方法,确保了选择的初始质心不仅是随机的,而且是散开的。
  • 但是,这种方法可能选中离群点。
  • 此外,求离当前初始质心集最远的点开销也非常大。为了克服这个问题,通常该方法用于点样本。

2–可能产生空簇
如果所有的点在指派步骤都未分配到某个簇,就会得到空簇。
如果这种情况发生,则需要某种策略来选择一个替补质心,否则的话,平方误差将会偏大。
一种方法是选择一个距离当前任何质心最远的点。这将消除当前对总平方误差影响最大的点。
另一种方法是从具有最大SSE的簇中选择一个替补的质心。这将分裂簇并降低聚类的总SSE。

如果有多个空簇,则该过程重复多次。

3–容易受到离群点的影响
使用平方误差时,离群点会过度影响所发现的簇
在可能的条件下,提前删除离群点
也可以在后处理时识别离群点

4–不能处理非球形簇、不同尺寸和不同密度的簇
在这里插入图片描述

2)k-中心点聚类方法

k-均值算法对离群点很敏感!

  • 因为具有特别大的值的对象可能显著地影响数据的均值.

k-中心点(k-Medoids):距离质心最近的点

  • 不采用簇中对象的平均值作为参照点, 而是选用簇中最靠近中心的对象, 即中心点(medoid)作为参照点.。
    在这里插入图片描述

三、凝聚层次聚类

层次聚类
将数据对象以树状的层次关系来看待。依层次建构的方式,一般分成两种来进行:凝聚的 、分裂的
在这里插入图片描述

  • 凝聚的: 从点作为个体簇开始,每一步合并两个最接近的簇,直到只剩下一个簇
  • 分裂的: 从包含所以点的某个簇开始,每一步分裂一个簇,直到只剩下单点簇

传统的层次聚类算法使用形似性矩阵或聚类矩阵;每次合并或分裂一个簇

1)基本的凝聚层次聚类算法

基本算法流程
在这里插入图片描述
关键操作是如何计算簇之间的邻近性

2)如何计算簇之间的邻近性

在这里插入图片描述
簇相似性: MIN or Single Link
单链,又称最短距离法,两个簇的邻近度定义为两个不同簇中任意两点之间的最短距离。
在这里插入图片描述
簇相似性: MAX or Complete Linkage
全链,又称最长距离法,两个簇的邻近度定义为两个不同簇中任意两点之间的最长距离。
在这里插入图片描述
簇相似性: Group Average
组平均法,两个簇的邻近度定义为两个不同簇中所有点对邻近度的平均值。
在这里插入图片描述
在这里插入图片描述

3)层次聚类的主要问题
  • 缺乏全局目标函数。
    凝聚层次聚类不能视为全局优化一个目标函数。
  • 处理不同大小的聚类能力。
    即如何处理待合并的簇对的相对大小。
    有两种方法:加权,平等的对待所有簇;非加权,考虑每个簇的点数。
  • 合并决策是最终的。
    对于合并两个簇,凝聚层次算法倾向于作出好的局部决策,因为它们可以使用所有点的逐对相似度信息。然而,一旦作出合并两个簇的决策,以后就不能撤销。有一些技术试图克服“合并是最终的”这一限制。一种方法试图通过如下方法来修补层次聚类,移动树的分支以改善全局目标函数。另一种方法使用划分聚类技术(如K均值)来创建许多小簇,然后从这些小簇出发进行层次聚类。

bingo~   ✨ 只要心中花千树,人生何处不逢春。

  • 3
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是一个简单的 DBSCAN 聚类算法实例: 假设我们有以下 10 个数据点: ``` data = [(2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 4), (4, 5), (6, 6), (7, 7), (8, 8)] ``` 我们要使用 DBSCAN 算法对这些数据点进行聚类。首先,我们需要选择两个参数:半径 `eps` 和最小数据点数 `min_samples`。这里我们选取 `eps=1.5` 和 `min_samples=3`。 接下来,我们按照以下步骤进行聚类: 1. 随机选择一个未被访问过的数据点 p。 2. 找出以 p 为中心,半径为 eps 的圆内的所有数据点。 3. 如果圆内的数据点数目大于等于 min_samples,则将这些数据点标记为核心点,并创建一个新的簇。 4. 如果圆内的数据点数目小于 min_samples,则将 p 标记为噪声点。 5. 从圆内的所有数据点开始,递归地找出所有密度可达的数据点,并将它们加入到当前簇中。 6. 重复以上步骤,直到所有数据点都被访问过。 根据以上步骤,我们可以得到以下聚类结果: ``` data_labels = [-1, 0, 0, 0, 0, 0, 0, -1, 1, 2] ``` 其中,-1 表示噪声点,0 表示第一个簇,1 表示第二个簇,2 表示第三个簇。 具体实现可以使用 Python 的 Scikit-learn 库,代码如下: ```python from sklearn.cluster import DBSCAN data = [(2, 3), (2, 4), (2, 5), (3, 4), (3, 5), (4, 4), (4, 5), (6, 6), (7, 7), (8, 8)] dbscan = DBSCAN(eps=1.5, min_samples=3) data_labels = dbscan.fit_predict(data) print(data_labels) ``` 输出结果为: ``` [-1 0 0 0 0 0 0 -1 1 2] ``` ### 回答2: DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一种密度聚类算法,可以用来发现具有相似特征的数据点群集,并且可以识别数据中的噪声。 下面是一个使用DBSCAN算法的实例: 假设我们有一组二维数据点,要对其进行聚类操作。数据点的分布如下: (1, 2), (2, 3), (3, 3), (8, 9), (9, 10), (10, 8), (4, 5), (7, 7), (8, 7), (9, 6) 在执行DBSCAN算法之前,我们需要指定两个参数:邻域半径(ε)和最小点数(MinPts)。假设我们将ε设为2.5,MinPts设为3。 首先,选择一个未被访问的数据点(例如,(1, 2)),以这个点为中心,找到其ε领域内的所有点。如图所示,与(1, 2)距离小于2.5的点有(2, 3)和(3, 3)。 然后,对于每个邻域内的点,再次找到其ε领域内的所有点。我们发现(2, 3)和(3, 3)的ε领域内没有其他点。 由于(2, 3)满足最小点数的要求(MinPts≤2),所以将它标记为核心点,并为其创建一个新的簇。然后,将(3, 3)标记为已访问。 对于下一个未被访问的点(4, 5),重复上述过程。发现与(4, 5)距离小于2.5的点有(7, 7)和(8, 7),(7, 7)又与(8, 7)距离小于2.5。 (4, 5)、(7, 7)和(8, 7)满足最小点数的要求,所以它们都被标记为核心点,并为它们创建一个新的簇。 然后,按照相同的过程,依次处理所有未被访问的数据点。 最后,剩余的无法满足最小点数要求的点都被标记为噪声,它们不属于任何一个簇。 根据以上的操作,我们可以得到两个聚类簇,分别包含点(1, 2)、(2, 3)、(3, 3)和(4, 5)、(7, 7)、(8, 7),并且有三个噪声点(8, 9)、(9, 10)、(10, 8)。 DBSCAN算法通过基于密度的定义来进行聚类,可以发现任意形状的簇,并且相对于K-means等算法对噪声更加鲁棒。 ### 回答3: DBSCAN是一种基于密度的聚类算法,可以自动发现具有相似密度的数据点。它的主要优势是可以处理任意形状的聚类,并且不需要事先指定聚类数目。 下面是一个关于DBSCAN聚类算法的实例: 我们假设有一个二维数据集,包含一些分布不规则的数据点。我们希望使用DBSCAN算法将数据点聚类成若干个簇。 首先,我们选择一个适当的半径r和一个最小的密度阈值minPts作为DBSCAN算法的参数。然后从数据集中选择一个未访问的数据点作为起始点。接下来,我们计算起始点的ε-邻域,即与起始点距离不超过r的所有数据点。如果ε-邻域中的数据点数目大于等于minPts,说明起始点是一个核心点。 然后,我们将这个核心点及其ε-邻域中的所有数据点标记为一个簇,并继续对这个簇中的每个未访问点进行进一步的密度可达判断。如果某个点也是核心点,则将其ε-邻域中的所有未访问点添加到当前簇中。 如果一个数据点不是核心点,但是在其他簇的ε-邻域中,我们将其标记为边界点。边界点不会形成新的簇,但是会被分配到相应的簇中。 最后,如果一个数据点既不是核心点也不是边界点,则将其标记为噪声点。 通过这样的过程,我们可以将数据点划分为若干个簇,每个簇代表一个聚类。而噪声点则表示无法归类的数据。 DBSCAN算法不仅适用于二维数据,也可以用于高维数据。它的聚类结果不仅能够处理不同形状的簇,还能够自动确定簇的个数。因此,在实际应用中,DBSCAN算法具有较高的灵活性和可靠性,并且被广泛应用于数据挖掘和机器学习领域。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值