博客
关于我
K-means 和 EM 比较
阅读量:412 次
发布时间:2019-03-06

本文共 1717 字,大约阅读时间需要 5 分钟。

k-means与EM算法深度解析

回顾

k-means算法是机器学习领域中的经典聚类方法之一。其基本思想是通过计算数据点与潜在中心点(cluster center)的距离,实现“物以类聚”的目标。与传统的k-nearest neighbor (KNN)算法不同,k-means采用了迭代优化的方式,通过不断更新中心点,逐步逼近最优解。这种算法简单易懂,适合入门者学习,实现起来也相当直接。

相比之下,Expectation-Maximization (EM)算法则显得更加复杂。EM算法主要用于解决当总体参数无法直接观测时,仍能通过隐变量和参数估计来推断问题。其核心概念包括隐变量、参数估计、先验分布和贝叶斯推断。这些概念在统计学中乃是基础,尤其是在样本估计、极大似然法、全概率与贝叶斯方法等方面。

为了更直观地理解EM算法,常常会通过简单案例来说明其E步骤和M步骤。例如,抛硬币的问题可以直观地展示E步骤和M步骤的操作流程。此外,引入高斯混合模型可以更深入地推导EM算法的工作原理,并证明其收敛性。推导过程中的关键点在于如何定义E步骤和M步骤,常用Jensen不等式和全概率与贝叶斯的关系进行化简。

K-means与EM的异同

其实,高斯混合模型中的EM算法与k-means算法有着相似之处。从EM算法的角度来看,k-means可以看作是一种特殊情况,其具体表现为:

  • Expectation (E步骤): 每个数据点赋值(概率为1)一个cluster。
  • Maximization (M步骤): 更新每个cluster的中心点。
  • 由此可见,k-means算法本质上是EM算法的一种特殊实现。与k-means的“硬分配”(将数据点强制归入一个cluster)不同,EM算法采用“软分配”(将数据点视为多个cluster的混合物),这种区别体现在数据的概率分配上。

    以气质类型的判别为例,k-means算法会简单地将小陈同学归入“抑郁型”;而EM算法则会根据其行为习惯,计算出不同气质类型的概率分布,例如小陈同学有30%的多血质特征,50%的粘液质特征,抑郁和胆汁质各占10%。

    从偏理论来看

    E步骤

    在k-means算法中,判别每个样本属于对应的类别k的函数( r_{nk} )定义为:

    • 如果( k = \arg \min_j |x_n - u_k|^2 ),则返回1;
    • 否则,返回0。

    这相当于逐个计算每个样本到各中心点的距离,选择距离最小的中心点,将其归入该类别。这种判别方法的复杂度为O(kn),类似于高斯混合模型中的( w_j^{(i)} )计算。

    而EM算法的判别则为: [ p^{(i)}(k|n) = \frac{p_k^{(i)} g(x_n; m_k^{(i)}, \sigma_k^{(i)})}{\sum_{m=1}^K p_k^{(i)} g(x_n; m_k^{(i)}, \sigma_k^{(i)})} ] 这正是全概率下的贝叶斯判别。

    M步骤

    无论是k-means还是EM算法,M步骤的核心都是更新cluster中心点。对于k-means,其更新公式为: [ \mu_k = \frac{\sum_{n} r_{nk} x_n}{\sum_{n} r_{nk}} ] 而EM算法的更新公式为: [ m_k^{(i+1)} = \frac{\sum_{n=1}^N p^{(i)}(k|n) x_n}{\sum_{n=1}^N p^{(i)}(k|n)} ]

    总体而言,k-means和EM算法在M步骤上有着相似的目标,即通过最大似然估计更新cluster中心点。然而,EM算法引入了概率分布和贝叶斯框架,使得参数估计更加灵活和高效。

    总结

    通过对比k-means和EM算法,可以看出两者的异同点。k-means算法简单易懂,适合用于“硬分配”场景,而EM算法则更具灵活性,能够处理“软分配”的复杂问题。EM算法涉及概率论、统计学和优化的多个核心知识点,因此学习和实现起来相对更具挑战性。

    在实际应用中,选择哪种算法取决于具体的场景需求。无论是哪种算法,理解其工作原理和优化过程都是提升算法应用能力的关键。

    转载地址:http://ktokz.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现interpolation search插值搜索算法(附完整源码)
    查看>>
    Objective-C实现Interpolation search插值查找算法(附完整源码)
    查看>>
    Objective-C实现intersection交集算法(附完整源码)
    查看>>
    Objective-C实现intro sort内省排序算法(附完整源码)
    查看>>
    Objective-C实现inverse matrix逆矩阵算法(附完整源码)
    查看>>
    Objective-C实现inversions倒置算法(附完整源码)
    查看>>
    Objective-C实现isalpha函数功能(附完整源码)
    查看>>
    Objective-C实现islower函数功能(附完整源码)
    查看>>
    Objective-C实现isPowerOfTwo算法(附完整源码)
    查看>>
    Objective-C实现isupper函数功能(附完整源码)
    查看>>
    Objective-C实现ItemCF算法(附完整源码)
    查看>>
    Objective-C实现ItemCF算法(附完整源码)
    查看>>
    Objective-C实现iterating through submasks遍历子掩码算法(附完整源码)
    查看>>
    Objective-C实现iterative merge sort迭代归并排序算法(附完整源码)
    查看>>
    Objective-C实现jaccard similarity相似度无平方因子数算法(附完整源码)
    查看>>
    Objective-C实现Julia集算法(附完整源码)
    查看>>
    Objective-C实现jump search跳转搜索算法(附完整源码)
    查看>>
    Objective-C实现jumpSearch跳转搜索算法(附完整源码)
    查看>>
    Objective-C实现k nearest neighbours k最近邻分类算法(附完整源码)
    查看>>
    Objective-C实现k-means clustering均值聚类算法(附完整源码)
    查看>>