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

本文共 1712 字,大约阅读时间需要 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/

    你可能感兴趣的文章
    Opencv识别图中人脸
    查看>>
    OpenCV读写avi、mpeg文件
    查看>>
    opencv里用calcCovarMatrix计算协方差矩阵
    查看>>
    OpenCV错误:在setSize中断言失败(s&>;=0)-尝试将图像放置在网络摄像头提要上时
    查看>>
    opencv面向对象设计初探
    查看>>
    OpenCV(1)读写图像
    查看>>
    OpenCV:不规则形状区域中每种颜色的像素数?
    查看>>
    OpenCV:概念、历史、应用场景示例、核心模块、安装配置
    查看>>
    OpenDaylight融合OpenStack架构分析
    查看>>
    OpenERP ORM 对象方法列表
    查看>>
    openEuler Summit 2022 成功举行,开启全场景创新新时代
    查看>>
    openEuler 正式开放:推动计算多样化时代的到来
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_openeuler切换root用户_su:拒绝权限_passwd: 鉴定令牌操作错误---国产瀚高数据库工作笔记001
    查看>>
    OpenEuler23.03欧拉系统_安装瀚高数据库企业版6.0.4_踩坑_安装以后系统无法联网_启动ens33网卡---国产瀚高数据库工作笔记002
    查看>>
    OpenFeign 入门与实战
    查看>>
    OpenFeign源码学习
    查看>>
    OpenFeign组件声明式服务调用
    查看>>
    openfeign远程调用不起作用解决_使用Spring Boot的spring.factories进行注入---SpringCloud Alibaba_若依微服务框架改造---工作笔记007
    查看>>
    openfire开发(四)消息拦截器
    查看>>
    openfire源码解读之将cache和session对象移入redis以提升性能
    查看>>