【机器学习】【无监督学习——聚类】从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例

从零开始掌握聚类分析:探索数据背后的隐藏模式与应用实例

基本概念

聚类(Clustering) 是一种无监督学习方法,其目的是将一组数据点分成若干个簇(clusters),使得同一簇内的数据点彼此之间具有较高的相似性,而不同簇之间的数据点相似性较低。然而一共有几个蔟不是事先给定的,是由待分类的数据的特征决定的。简单来说,聚类的目的就是通过无监督学习的方法,发现数据中的自然分组结构,将数据分为几堆这样,

那什么是呢?簇是一组具有相似特征的数据点或对象组成的集合。简单来说,簇是数据点按照某种相似性度量被分组的结果,其中每个簇内的成员彼此之间比与其他簇的成员更加相似。就像在一个菜篮子里面,通过辨识篮子里面蔬菜的特征,将蔬菜分成了几类、几堆。

聚类分类

根据不同的聚类原理和算法特点,聚类算法可以分为以下几类:

  • 基于划分的聚类算法:如K-Means、K-Medoids、CLARANS等。这类算法通过迭代优化目标函数,将数据集划分为预定的K个簇。
  • 基于密度的聚类算法:如DBSCAN、OPTICS、Mean Shift等。这类算法通过密度可达性来识别簇,能够识别出任意形状的簇。
  • 基于层次的聚类算法:如AGNES(自底向上)、DIANA(自顶向下)等。这类算法通过逐步合并或分裂现有的簇,形成一棵聚类树。
  • 基于网格的聚类算法:如STING、WaveCluster等。这类算法将数据空间划分为有限数量的单元格,形成网格结构,然后在网格上进行聚类。
  • 基于模型的聚类算法:如高斯混合模型(GMM)、隐马尔可夫模型(HMM)等。这类算法假设数据由一系列的概率分布生成,通过优化模型参数来进行聚类。

聚类算法的评价指标

聚类算法的评价指标又称为性能度量指标,透过这个指标我们可以分析聚类算法的聚类结果的好坏。通常认为,通过聚类算法之后,簇内相似度越高算法分类效果越好,蔟间相似度越低算法分类效果越好,反之。

聚类算法的评价通常依赖于内部指标外部指标两大类。下面一一讲解着两种指标:

(1)内部指标

内部指标主要衡量聚类结果的紧凑性和分离性,不需要外部参考模型或基准数据,它是直接通过考察聚类结果得出的。常见的内部指标包括:

轮廓系数(Silhouette Coefficient)

轮廓系数是衡量聚类效果的一个综合指标,它结合了簇内凝聚度和簇间分离度。对于每个样本点,轮廓系数定义为:
s ( i ) = b ( i ) − a ( i ) max ⁡ { a ( i ) , b ( i ) } s(i) = \frac{b(i) - a(i)}{\max\{a(i), b(i)\}} s(i)=max{ a(i),b(i)}b(i)a(i)
其中:

  • a ( i ) a(i) a(i) 是样本点 i i i 到同一簇内其他点的平均距离,衡量了簇内的凝聚度。
  • b ( i ) b(i) b(i) 是样本点 i i i 到最近的其他簇中点的平均距离,衡量了簇间的分离度。

轮廓系数的取值范围为 [ − 1 , 1 ] [-1, 1] [1,1],其中: s ( i ) s(i) s(i) 接近 1 表示样本点 i i i 被很好地分配到了正确的簇中、接近 0 表示样本点 i i i 可能处于两个簇的边界上、接近 -1 表示样本点 i i i 被分配到了错误的簇中。

对于整个数据集,轮廓系数是所有样本点的轮廓系数的平均值

DB指数(Davies-Bouldin Index)

DB指数是衡量聚类效果的一个指标,它基于簇内紧凑度和簇间分离度的比值。DB指数的公式为:
D B = 1 k ∑ i = 1 k max ⁡ j ≠ i ( σ i + σ j d ( c i , c j ) ) DB = \frac{1}{k} \sum_{i=1}^{k} \max_{j \neq i} \left( \frac{\sigma_i + \sigma_j}{d(c_i, c_j)} \right) DB=k1i=1kj=imax(d(ci,cj)σi+σj)
其中:

  • k k k 是簇的数量。
  • σ i \sigma_i σi σ j \sigma_j σj 分别是簇 i i i 和簇 j j j 的平均簇内距离。
  • d ( c i , c j ) d(c_i, c_j) d(ci,cj) 是簇 i i i 和簇 j j j 的中心点之间的距离。
  • max ⁡ j ≠ i \max_{j \neq i} maxj=i 表示对所有的 j j j 不等于 i i i 的簇进行计算。

DB指数的值越小,表示聚类效果越好,因为这意味着簇内距离较小而簇间距离较大。

Dunn指数

Dunn指数是基于簇间最小距离和簇内最大距离的一个比值,用于衡量聚类的紧密度和分离度。Dunn指数的公式为:
D I = min ⁡ 1 ≤ i ≤ k { min ⁡ j ≠ i ( d min ⁡ ( C i , C j ) max ⁡ 1 ≤ l ≤ k d max ⁡ ( C l ) ) } DI = \min_{1 \leq i \leq k} \left\{ \min_{j \neq i} \left( \frac{d_{\min}(C_i, C_j)}{\max_{1 \leq l \leq k} d_{\max}(C_l)} \right) \right\} DI=1ikmin{ j=imin(max1lkdmax(Cl)dmin(Ci,Cj))}
其中:

  • d min ⁡ ( C i , C j ) d_{\min}(C_i, C_j) dmin(Ci,Cj) 是簇 C i C_i Ci 和簇 $ C_j$ 之间的最小距离。
  • d max ⁡ ( C l ) d_{\max}(C_l) dmax(Cl) 是簇 C l C_l Cl 内的最大距离。
  • min ⁡ 1 ≤ i ≤ k \min_{1 \leq i \leq k} min1ik min ⁡ j ≠ i \min_{j \neq i} minj=i 分别表示对所有的簇进行最小值计算。

Dunn指数的值越大,表示聚类效果越好,因为簇间的最小距离相对较小,而簇内的最大距离相对较大,说明簇之间分离得较好,簇内数据点较为紧密。

(2)外部指标

外部指标需要借助外部某个参考模型或已知数据集的真实标签来评估聚类结果的准确性。常见的外部指标包括:

Jaccard系数

Jaccard系数是衡量两个集合相似度的一个指标,它通过比较两个集合的交集和并集的大小来确定它们的相似程度。在聚类分析中,Jaccard系数可以用来衡量两个簇之间的相似度。数学公式如下:

J ( A , B ) = ∣ A ∩ B ∣ ∣ A ∪ B ∣ J(A, B) = \frac{|A \cap B|}{|A \cup B|} J(A,B)=ABAB

其中:

  • ∣ A ∩ B ∣ |A \cap B| AB 是簇 A 和簇 B 的交集的元素数量。
  • ∣ A ∪ B ∣ |A \cup B| AB 是簇 A 和簇 B 的并集的元素数量。

Jaccard系数的取值范围是 [0, 1],其中 0 表示两个簇没有交集,1 表示两个簇完全相同。值越大,表示两个簇越相似。

Fowlkes-Mallows指数(FMI)

Fowlkes-Mallows指数是基于簇对的正确匹配和错误匹配来评估聚类效果的指标。它通过计算正确匹配的元素对数量的平方与所有匹配对(正确匹配和错误匹配)的总数之比来衡量聚类的质量。数学公式如下:

F M I = T P 2 T P + F P + F N FMI = \frac{TP^2}{TP + FP + FN} FMI=TP+FP+FNTP2

其中:

  • T P TP TP 是正确匹配的元素对数量,即两个簇中都有相同标签的元素对。
  • F P FP FP 是错误匹配的元素对数量,即两个簇中标签不同的元素对。
  • F N FN FN 是未匹配的元素对数量,即至少有一个簇中没有标签的元素对。

FMI的取值范围是 [0, 1],值越大,表示聚类效果越好。

兰德指数(Rand Index)

兰德指数是衡量聚类结果与真实标签一致性的指标。它通过计算正确匹配的元素对数量与所有可能元素对的数量之比来评估聚类的准确性。数学公式如下:

R I = T P + T N T P + T N + F P + F N RI = \frac{TP + TN}{TP + TN + FP + FN} RI=TP+TN+FP+FNTP+TN

其中:

  • T P TP TP 是正确匹配的元素对数量。
  • T N TN TN 是两个簇中都没有相同标签的元素对数量。
  • F P FP FP 是错误匹配的元素对数量。
  • F N FN FN 是未匹配的元素对数量。

RI的取值范围也是 [0, 1],值越大,表示聚类结果与真实标签的一致性越高。
请注意,这些指标的计算通常需要真实的聚类标签,因此在实际应用中,它们主要用于评估聚类算法的性能,特别是在有监督学习环境中。在没有真实标签的情况下,这些指标无法直接应用。

常见聚类算法简介

基于划分的聚类算法——K-Means算法

K-Means算法是一种经典的基于划分的聚类算法,特别适用于大规模数据集。其基本思想是:给定一个数据集和一个整数K,算法通过迭代过程将数据集划分为K个簇,使得每个数据点与其所属簇的中心点(均值)的距离之和最小,最终形成若干个圆形或椭圆形的簇。

数学表示

设我们有 n n n个数据点 { x 1 , x 2 , . . . , x n } \{x_1,x_2,...,x_n\} { x1,x2,...,xn},其中每个 x i ∈ R d x_i\in\mathbb{R}^d xiRd表示一个 d d d维向量。我们的目标是找到 k k k个簇心 { μ 1 , μ 2 , . . . , μ k } \{\mu_1,\mu_2,...,\mu_k\} { μ1,μ2,...,μk},使得所有点到它们所属簇心的距离平方和最小化:

J = ∑ i = 1 k ∑ x j ∈ C i ∣ ∣ x j − μ i ∣ ∣ 2 J=\sum_{i=1}^{k}\sum_{x_j\in C_i}||x_j-\mu_i||^2 J=i=1kxjCi∣∣xjμi2

这里 C i C_i Ci表示第 i i i个簇中的所有点, μ i \mu_i μi是第 i i i个簇的簇心,而 ∣ ∣ x j − μ i ∣ ∣ 2 ||x_j-\mu_i||^2 ∣∣xjμi2是欧几里得距离的平方。

算法步骤

K-Means 算法由两个主要步骤组成:分配(Assignment)和更新(Update)。这两个步骤交替进行直到收敛。

1. 初始化
  • 选择初始簇心:随机选择 k k k个数据点作为初始簇心,或者使用更复杂的初始化方法如K-Means++来提高效率。
2. 分配步骤

对于每个数据点 x j x_j xj,计算它与所有簇心之间的距离,并将其分配给最近的那个簇心所在的簇。具体来说,对于每一个数据点 x j x_j xj,我们找到使下式最小化的 i i i

i = arg ⁡ min ⁡ i ′ ∣ ∣ x j − μ i ′ ∣ ∣ 2 i=\arg\min_{i'}||x_j-\mu_{i'}||^2 i=argimin∣∣xjμi2

这一步骤可以写作:

C i = { x j : ∣ ∣ x j − μ i ∣ ∣ 2 ≤ ∣ ∣ x j − μ i ′ ∣ ∣ 2 , ∀ i ′ ≠ i } C_i=\{x_j:||x_j-\mu_i||^2\leq||x_j-\mu_{i'}||^2,\forall i'\neq i\}

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宸码

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值