47、聚类算法:K-means、EM算法及应用详解

K-means与EM聚类算法详解

聚类算法:K-means、EM算法及应用详解

1. K-means聚类示例

K-means是一种常用的聚类算法,下面通过一个具体例子来了解它。假设有20个单词,将它们表示为共现计数的向量,使用K-means算法将这些单词聚类成5个簇。具体聚类结果如下表所示:
| 簇编号 | 单词 | 与簇质心的距离 |
| — | — | — |
| 1 | ballot | (0.281) |
| 1 | polls | (0.301) |
| 1 | seats | (0.32) |
| 2 | profit | (0.211) |
| 2 | finance | (0.22) |
| 3 | NFL | (0.33) |
| 3 | Reds | (0.33) |
| 3 | Sox | (0.33) |
| 3 | inning | (0.33) |
| 3 | quarterback | (0.33) |
| 3 | scored | (0.33) |
| 3 | score | (0.33) |
| 4 | researchers | (0.23) |
| 4 | science | (0.23) |
| 5 | Scott | (0.29) |
| 5 | Barbara | (0.29) |
| 5 | Edward | (0.29) |

从这个例子可以看出,前四个簇分别对应“政府”“金融”“体育”和“研究”主题,最后一个簇包含人名。聚类的好处很明显,通过对单词进行聚类展示,能更轻松地理解样本中出现的单词类型以及它们之间的关系。

K-means算法的初始簇中心通常是随机选取的。初始中心的选择是否重要取决于待聚类对象集合的结构。很多集合表现良好,大多数初始化方式都会得到质量相近的聚类结果。但对于表现不佳的集合,可以先对对象的一个子集运行层次聚类算法来计算出较好的簇中心,这就是Buckshot算法的基本思想。Buckshot算法首先对数据的一个随机样本(样本大小为完整集合大小的平方根)应用平均凝聚聚类(GAAC)。GAAC的时间复杂度为二次方,但由于样本大小的关系,应用于该样本会使算法的整体复杂度变为线性。K-means的重新分配步骤也是线性的,因此整体复杂度为$O(n)$。

2. EM算法:K-means的“软”版本

EM算法可以看作是K-means聚类的“软”版本。下面通过一个例子来说明。假设初始有一组随机的簇中心,在K-means聚类中,我们可以在一次迭代中得到最终的中心。而EM算法进行的是软分配,例如,右下角的点主要属于一个簇,但也部分属于另一个簇。结果是,在第一次迭代中,两个簇中心都会向所有三个对象的质心移动,只有在第二次迭代后才会达到稳定的最终状态。

另一种理解EM算法的方式是将其视为一种估计模型隐藏参数值的方法。我们观察到了一些数据$X$,可以根据具有参数$\theta$的某个模型$p$来估计数据的概率$P(X|\theta)$。但如何找到使数据似然性最大的模型呢?这个点在参数空间中是一个最大值,因此我们知道概率表面在那里是平坦的。对于每个模型参数$\theta$,我们希望设置$\frac{\partial P(X|\theta)}{\partial \theta}=0$并求解$\theta$。不幸的是,这通常会得到一组非线性方程,目前还没有已知的解析求解方法。不过,我们可以使用EM算法来近似找到最大值。

3. 用于高斯混合模型的EM算法

在将EM算法应用于聚类时,我们将聚类视为对概率分布混合的估计。其思想是,观察到的数据是由几个潜在原因生成的。每个原因独立地对生成过程做出贡献,但我们只看到最终的混合结果,而不知道哪个原因贡献了什么。我们将数据表示为一对来形式化这个概念:
- 可观测数据$X = {x_1, x_2, \cdots, x_n}$,其中每个$x_i$是对应于数据点的向量。
- 不可观测数据$Z = {z_1, z_2, \cdots, z_n}$,其中在每个$z_i = {z_{i1}, z_{i2}, \cdots, z_{ik}}$中,如果对象$i$属于簇$j$(即假设它是由该潜在原因生成的),则$z_{ij}$为1,否则为0。

如果我们知道各个簇(或原因)的分布类型,就可以使用EM算法进行聚类。在估计高斯混合模型时,我们假设每个簇是一个高斯分布。EM算法会确定分布参数(在我们的例子中,是每个高斯分布的均值和方差)以及各个原因的先验概率(或相对重要性、权重)的最可能估计值。

多元正态分布(高斯分布)的$m$维高斯族由均值或中心$\mu$和一个$m\times m$的可逆正定对称矩阵(协方差矩阵$\Sigma$)参数化。高斯分布的概率密度函数为:
[P(x|\mu, \Sigma)=\frac{1}{(2\pi)^{\frac{m}{2}}|\Sigma|^{\frac{1}{2}}}\exp\left(-\frac{1}{2}(x - \mu)^T\Sigma^{-1}(x - \mu)\right)]

假设数据是由$k$个高斯分布生成的,我们希望找到形式如下的最大似然模型:
[P(X|\theta)=\prod_{i = 1}^{n}\sum_{j = 1}^{k}\pi_jP(x_i|\mu_j, \Sigma_j)]
其中,$\theta = {\pi_1, \pi_2, \cdots, \pi_k, \mu_1, \mu_2, \cdots, \mu_k, \Sigma_1, \Sigma_2, \cdots, \Sigma_k}$,$\pi_j$是第$j$个高斯分布的先验概率。

下面是一个高斯混合模型的例子:
| 主要簇 | 单词 | 簇1 | 簇2 | 簇3 | 簇4 | 簇5 |
| — | — | — | — | — | — | — |
| 1 | ballot | 0.63 | 0.12 | 0.04 | 0.09 | 0.11 |
| 1 | polls | 0.58 | 0.11 | 0.06 | 0.10 | 0.14 |
| 1 | Gov | 0.58 | 0.12 | 0.03 | 0.10 | 0.17 |
| 1 | seats | 0.55 | 0.14 | 0.08 | 0.08 | 0.15 |
| 2 | profit | 0.11 | 0.59 | 0.02 | 0.14 | 0.15 |
| 2 | finance | 0.15 | 0.55 | 0.01 | 0.13 | 0.16 |
| 3 | NFL | 0.12 | 0.66 | 0.01 | 0.09 | 0.11 |
| 3 | Reds | 0.13 | 0.05 | 0.58 | 0.09 | 0.16 |
| 3 | sox | 0.05 | 0.01 | 0.86 | 0.02 | 0.06 |
| 3 | inning | 0.05 | 0.01 | 0.86 | 0.02 | 0.06 |
| 3 | quarterback | 0.03 | 0.01 | 0.93 | 0.01 | 0.02 |
| 3 | score | 0.06 | 0.02 | 0.82 | 0.03 | 0.07 |
| 3 | scored | 0.12 | 0.04 | 0.65 | 0.06 | 0.13 |
| 4 | researchers | 0.08 | 0.03 | 0.79 | 0.03 | 0.07 |
| 4 | science | 0.08 | 0.12 | 0.02 | 0.68 | 0.10 |
| 5 | Scott | 0.12 | 0.12 | 0.03 | 0.54 | 0.19 |
| 5 | Barbara | 0.12 | 0.12 | 0.11 | 0.11 | 0.54 |
| 5 | Edward | 0.10 | 0.10 | 0.05 | 0.15 | 0.59 |

在这个模型中,我们使用表14.4中K-means聚类的质心作为五个簇的均值$\mu$,使用统一的对角协方差矩阵$\Sigma = 0.05I$和统一的先验概率$\pi = 0.2$。后验概率可以解释为簇成员概率。对于每个单词,表14.4中的簇仍然是主导簇。例如,“ballot”在簇1(它在K-means聚类中的簇)中的成员概率比在其他簇中更高。但每个单词在所有其他簇中也有非零的成员概率,这有助于评估单词与主题之间的关联强度。比较“体育”簇的两个成员“inning”和“score”,可以看到“inning”与“体育”主题的关联很强($P = 0.93$),而“score”与其他簇也有一定的关联(例如,与“政府”簇的$P = 0.12$),这很好地体现了软聚类的实用性。

接下来,我们开发用于估计高斯混合模型参数的EM算法。设$\theta = {\pi_1, \pi_2, \cdots, \pi_k, \mu_1, \mu_2, \cdots, \mu_k, \Sigma_1, \Sigma_2, \cdots, \Sigma_k}$,数据$X$在参数$\theta$下的对数似然为:
[\log P(X|\theta)=\sum_{i = 1}^{n}\log\left(\sum_{j = 1}^{k}\pi_jP(x_i|\mu_j, \Sigma_j)\right)]

我们的目标是找到使上述对数似然最大的参数$\theta$。由于这涉及到对数和的形式,不能直接计算最大值,因此使用EM算法通过迭代来近似求解。

EM算法是对以下循环陈述的迭代解决方案:
- 估计:如果我们知道$\theta$的值,就可以计算模型隐藏结构的期望值。
- 最大化:如果我们知道模型隐藏结构的期望值,就可以计算$\theta$的最大似然值。

我们通过对$\theta$进行初始猜测来打破循环,并在期望步骤和最大化步骤之间来回迭代,因此称为EM算法。
- 期望步骤(E-step) :计算隐藏变量$z_{ij}$的期望值,它可以解释为簇成员概率。给定当前参数,计算一个对象属于任何一个簇的可能性。
- 最大化步骤(M-step) :根据簇成员概率计算模型的最可能参数。

EM算法的一个关键特性是单调性:每次进行E和M步骤的迭代,模型在给定数据下的似然性都会增加,这保证了每次迭代产生的模型参数在给定我们看到的数据下更有可能。但该算法通常只能找到局部最大值,而不一定能找到全局最优解,这与像SVD这样能保证找到全局最优解的最小二乘法不同。

具体实现时,首先初始化所有参数。合适的做法是将每个高斯分布的协方差矩阵$\Sigma_j$初始化为单位矩阵,每个权重$\pi_j$初始化为$\frac{1}{k}$,$k$个均值$\mu_j$分别选择为从$X$中随机选择的一个数据点的随机扰动。

E-step是计算参数$\gamma_{ij}$,它是隐藏变量$z_{ij}$的期望值,如果$j$生成了$x_i$,$z_{ij}$为1,否则为0。
[
\gamma_{ij}=\frac{\pi_jP(x_i|\mu_j, \Sigma_j)}{\sum_{l = 1}^{k}\pi_lP(x_i|\mu_l, \Sigma_l)}
]

M-step是根据期望值$\gamma_{ij}$重新计算参数(每个高斯分布的均值、方差和先验概率)作为最大似然估计。这些是高斯分布均值和方差的最大似然估计。高斯分布的权重重新计算如下:
[
\pi_j=\frac{\sum_{i = 1}^{n}\gamma_{ij}}{n}
]

一旦重新计算了均值、方差和先验概率,我们就重复进行下一次E和M步骤的迭代,只要每次步骤中对数似然有显著改善,就继续迭代。

下面是EM算法估计高斯混合模型参数的流程图:

graph TD;
    A[初始化参数] --> B[E-step:计算γ_ij];
    B --> C[M-step:重新计算参数];
    C --> D{对数似然是否显著改善};
    D -- 是 --> B;
    D -- 否 --> E[结束];
4. EM算法的其他应用

EM算法不仅用于聚类和高斯混合模型,在统计自然语言处理中还有其他应用,以下是一些例子:
- Baum - Welch重新估计 :在Baum - Welch或前向 - 后向算法中,E步骤计算每个状态的期望转移次数(从观察到的数据)以及每对状态之间的期望转移次数。这里的不可观测数据是不可观测的状态转移。在E步骤中,根据模型的当前参数计算这些不可观测数据的期望值。M步骤根据不可观测数据的期望值计算参数的新最大似然估计,这些参数包括初始状态概率、状态转移概率和符号发射概率。
- 内外算法 :该算法中的不可观测数据是特定规则是否用于生成特定单词子序列。E步骤计算这些数据的期望值,对应于特定规则的期望使用次数。M步骤根据这些期望值计算参数的最大似然估计,这里的参数是规则概率,最大似然估计就是对特定非终结符的相关期望值进行求和。
- 无监督词义消歧 :无监督词义消歧算法与EM估计高斯混合模型非常相似,只是概率模型不同。E步骤再次计算记录簇成员的隐藏二进制变量的期望值,但概率是基于该部分描述的贝叶斯独立模型计算的,而不是高斯混合模型。M步骤根据期望值重新计算一个簇(或词义,我们将每个簇解释为一个词义)生成特定单词的概率作为最大似然估计。
- K-means :K-means可以解释为使用EM算法估计高斯混合模型的一个特殊情况。假设在算法的每次迭代中只重新计算每个高斯分布的均值,先验概率和方差固定。如果将方差固定得非常小,高斯分布的形状将是一个从中心急剧下降的尖峰。结果是,根据E步骤计算的后验概率,每个对象将以非常接近1.0的概率属于一个簇。也就是说,为了重新计算均值,这是一种硬分配,因为成员概率非常小的对象对均值计算的影响可以忽略不计。不过,在出现平局的情况下有所不同。即使方差很小,平局的对象在两个簇中的成员概率也会相等,而K-means会对平局情况做出硬选择。

5. EM算法的总结与注意事项

EM算法非常有用且目前很流行,但也需要了解它的不足之处。
- 对参数初始化敏感 :算法对参数的初始化非常敏感,除非参数初始化良好,否则通常会陷入参数空间中的许多局部最大值之一。一种解决方法是使用另一种聚类算法的结果来初始化EM算法的参数,例如,K-means算法是为高斯混合模型的EM算法找到初始簇中心估计的有效方法。
- 收敛速度慢 :EM算法的收敛速度可能非常慢。虽然通过EM算法进行重新估计保证会提高(或至少不会降低)模型在给定数据下的似然性,但重要的是要记住,它并不能保证改善模型中未实际包含的其他方面,例如系统根据某些外部规则分配词性标签的能力。这里存在EM算法所最大化的内容与评估系统性能的目标函数之间的不匹配,在这种情况下,EM算法可能会产生有害影响。
- 适用情况 :EM算法仅在没有更直接的方法来解决手头的约束优化问题时才真正需要。在有代数解或可以通过简单的迭代方程求解器(如牛顿法)找到解的简单情况下,最好采用其他方法。

6. 聚类相关的其他知识
  • 进一步阅读资料 :关于聚类的一般介绍可以参考相关文献。在信息检索中关于聚类工作的综述可以在一些资料中找到。构建最小生成树的算法在某些文献中有介绍,对于一般情况,这些算法的时间复杂度为$O(n\log n)$,其中$n$是图中的节点数。
  • 可视化技术 :聚类用于数据分析和理解时,与将高维空间投影到(通常)二维或三维的可视化技术密切相关。常用的三种技术是主成分分析(PCA)、多维缩放(MDS)和Kohonen映射或自组织映射(SOM),这些多维空间的空间表示是图14.1中树状图的替代方法。
  • 认知建模中的聚类 :聚类也可以看作是认知建模中类别归纳的一种形式。许多研究人员试图通过对语料库派生的单词表示进行聚类来归纳句法类别,也有人尝试根据句法证据找到语义相关单词的簇。
  • 聚类算法的效率 :随着文本集合和自然语言处理数据集的规模不断增大,聚类算法的效率变得越来越重要。Buckshot算法由Cutting等人于1992年提出,还有一些更高效的$O(n)$时间算法(基于簇层次结构)由Cutting等人于1993年以及Silverstein和Pedersen于1997年描述。

总之,聚类算法在数据分析、自然语言处理等领域有着广泛的应用,不同的算法有各自的特点和适用场景。在实际应用中,需要根据具体问题选择合适的算法,并注意算法的参数初始化、收敛速度等问题,以获得更好的聚类效果。

聚类算法:K-means、EM算法及应用详解

7. 聚类算法的对比分析

为了更清晰地了解不同聚类算法的特点,下面对K-means和EM算法进行对比分析,具体内容如下表所示:
| 算法 | 分配方式 | 复杂度 | 全局最优性 | 对初始化的敏感度 | 应用场景 |
| — | — | — | — | — | — |
| K-means | 硬分配,每个对象明确属于一个簇 | 整体复杂度为$O(n)$ | 通常只能找到局部最优解 | 初始中心选择可能影响结果,对表现不佳的集合较敏感 | 适用于数据分布较为规则,对聚类速度要求较高的场景 |
| EM算法 | 软分配,对象可以部分属于多个簇 | 整体复杂度受迭代次数等因素影响 | 通常只能找到局部最优解 | 对参数初始化非常敏感,易陷入局部最大值 | 适用于需要考虑对象与多个簇的关联程度,数据分布较为复杂的场景 |

通过这个表格,我们可以根据具体的数据特点和需求来选择合适的聚类算法。例如,如果数据分布比较集中,且希望快速得到聚类结果,K-means可能是一个不错的选择;而如果需要更细致地分析对象与多个簇的关系,EM算法可能更合适。

8. 聚类算法的实际应用案例

以下通过一个简单的实际应用案例,展示聚类算法在自然语言处理中的作用。假设我们有一个新闻文章数据集,包含不同主题的新闻,我们希望使用聚类算法将这些文章分为不同的主题类别。
- 数据预处理 :首先,对新闻文章进行预处理,包括去除停用词、词干提取等操作,将文章转换为向量表示。
- 选择聚类算法 :这里我们可以选择K-means或EM算法。如果希望快速得到大致的聚类结果,可以选择K-means;如果希望更精确地分析文章与多个主题的关联,选择EM算法。
- 聚类操作
- K-means :随机选择$k$个初始簇中心,将每个文章向量分配到距离最近的簇中心,然后更新簇中心,重复这个过程直到簇中心不再变化。
- EM算法 :初始化参数,包括协方差矩阵、权重和均值。进行E-step计算隐藏变量的期望值,再进行M-step重新计算参数,不断迭代直到对数似然不再显著改善。
- 结果分析 :聚类完成后,分析每个簇中的文章,确定每个簇所代表的主题。例如,一个簇中大部分文章都与体育赛事相关,那么这个簇可以标记为“体育”主题。

以下是这个应用案例的流程图:

graph TD;
    A[数据预处理] --> B{选择聚类算法};
    B -- K-means --> C[随机选择初始簇中心];
    C --> D[分配文章到最近簇中心];
    D --> E[更新簇中心];
    E --> F{簇中心是否变化};
    F -- 是 --> D;
    F -- 否 --> G[结果分析];
    B -- EM算法 --> H[初始化参数];
    H --> I[E-step:计算隐藏变量期望值];
    I --> J[M-step:重新计算参数];
    J --> K{对数似然是否显著改善};
    K -- 是 --> I;
    K -- 否 --> G;
9. 聚类算法的优化建议

为了提高聚类算法的性能和效果,可以采取以下优化建议:
- 参数调优
- K-means :尝试不同的$k$值,通过评估指标(如轮廓系数)选择最优的$k$。
- EM算法 :合理初始化参数,例如可以使用K-means的结果来初始化EM算法的簇中心,避免陷入局部最大值。
- 数据预处理 :对数据进行标准化处理,确保不同特征具有相同的尺度,避免某些特征对聚类结果产生过大影响。
- 使用集成方法 :结合多种聚类算法的结果,例如先使用K-means得到初始聚类,再使用EM算法进行精细调整。

10. 总结与展望

聚类算法在数据分析、自然语言处理等领域具有重要的应用价值。K-means算法简单高效,适用于快速聚类;EM算法通过软分配提供了更细致的聚类信息,但对参数初始化和收敛速度有一定要求。在实际应用中,需要根据具体问题选择合适的算法,并进行适当的优化。

未来,随着数据量的不断增加和数据复杂度的提高,聚类算法将面临更大的挑战和机遇。一方面,需要进一步提高算法的效率和准确性,以处理大规模、高维度的数据;另一方面,结合深度学习等新技术,开发更智能、自适应的聚类算法将是一个重要的研究方向。同时,聚类算法在更多领域的应用也值得探索,如医疗、金融等领域,为这些领域的数据分析和决策提供支持。

总之,聚类算法作为数据分析的重要工具,将在未来发挥更加重要的作用,我们需要不断研究和改进这些算法,以适应不断变化的需求。

【四轴飞行器】非线性三自由度四轴飞行器模拟器研究(Matlab代码实现)内容概要:本文围绕非线性三自由度四轴飞行器模拟器的研究展开,重点介绍基于Matlab代码实现的四轴飞行器动力学建模与仿真方法。研究构建了考虑非线性特性的飞行器数学模型,涵盖姿态动力学与运动学方程,实现了三自由度(滚转、俯仰、偏航)的精确模拟。文中详细阐述了系统建模过程、控制算法设计思路及仿真结果分析,帮助读者深入理解四轴飞行器的飞行动力学特性与控制机制;同时,该模拟器可用于算法验证、控制器设计与教学实验。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的高校学生、科研人员及无人机相关领域的工程技术人员,尤其适合从事飞行器建模、控制算法开发的研究生和初级研究人员。; 使用场景及目标:①用于四轴飞行器非线性动力学特性的学习与仿真验证;②作为控制器(如PID、LQR、MPC等)设计与测试的仿真平台;③支持无人机控制系统教学与科研项目开发,提升对姿态控制与系统仿真的理解。; 阅读建议:建议读者结合Matlab代码逐模块分析,重点关注动力学方程的推导与实现方式,动手运行并调试仿真程序,以加深对飞行器姿态控制过程的理解。同时可扩展为六自由度模型或加入外部干扰以增强仿真真实性。
基于分布式模型预测控制DMPC的多智能体点对点过渡轨迹生成研究(Matlab代码实现)内容概要:本文围绕“基于分布式模型预测控制(DMPC)的多智能体点对点过渡轨迹生成研究”展开,重点介绍如何利用DMPC方法实现多智能体系统在复杂环境下的协同轨迹规划与控制。文中结合Matlab代码实现,详细阐述了DMPC的基本原理、数学建模过程以及在多智能体系统中的具体应用,涵盖点对点转移、避障处理、状态约束与通信拓扑等关键技术环节。研究强调算法的分布式特性,提升系统的可扩展性与鲁棒性,适用于多无人机、无人车编队等场景。同时,文档列举了大量相关科研方向与代码资源,展示了DMPC在路径规划、协同控制、电力系统、信号处理等多领域的广泛应用。; 适合人群:具备一定自动化、控制理论或机器人学基础的研究生、科研人员及从事智能系统开发的工程技术人员;熟悉Matlab/Simulink仿真环境,对多智能体协同控制、优化算法有一定兴趣或研究需求的人员。; 使用场景及目标:①用于多智能体系统的轨迹生成与协同控制研究,如无人机集群、无人驾驶车队等;②作为DMPC算法学习与仿真实践的参考资料,帮助理解分布式优化与模型预测控制的结合机制;③支撑科研论文复现、毕业设计或项目开发中的算法验证与性能对比。; 阅读建议:建议读者结合提供的Matlab代码进行实践操作,重点关注DMPC的优化建模、约束处理与信息交互机制;按文档结构逐步学习,同时参考文中提及的路径规划、协同控制等相关案例,加深对分布式控制系统的整体理解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值