回顾

前几篇对 k-means 有过理解和写了一版伪代码, 因为思想比较非常朴素, 就是初始化几个中心点, 然后通过计算距离的方式, "物以类聚", 不断迭代中心点, 最后收敛, (中心点不变化) 就搞定了, 代码也容易实现, 算法也基本不涉及数学, 感觉就是通用的全民入门算法. 跟 KNN 这种hello world 级别是一个等级, 简单易懂, 实用性高, 易实现.

而相对 EM 算法则有些难明白一些, 它涉及几个核心概念: 隐变量, 参数估计, 先验分布, 贝叶斯. 它所要解决的问题, 其实就是,当无法直接观测到总体参数时, 但有知道它是由其他隐含因子影响着的, 再此之下, 如何进行参数估计, 其实也就是咱当年学统计学中, 用样本来估计总体, 方法无非是,极大似然法, 全概率与贝叶斯, 高斯分布 这些基础知识而已.

为了说明EM算法, 显示以扔硬币 的小案例来直观认识 EM 算法的 E, M 步骤分别是做了什么事情, 从比较直观来看, 然后有引入高斯混合模型 来深刻推导了一波EM算法, 同时证明了EM算法的收敛性. 推导的难点在于, 如何去定义

E, M步骤, 然后技巧上是用了Jensen不等式, 并引入了 concave函数的特性(全局最优解), 过程其实就用到了高斯分布, 化简用的是全概率 与贝叶斯的关系, 也就是全概率, 联合分布, 条件概率..这些基础知识, 嗯. 总体来说还是不难的, 可能写代码实现有点小复杂, 后面试着整一整, 这里主要重点整透理论, 代码会copy 就差不多行了.

K-means 与 EM

其实, 不难发现, 高斯混合模型(Mixture of Gaussian) EM 算法与 K-means 是相似的. K-means 从 EM 视角来看,

  • Expectation : 每一个点赋值(概率为1)一个 cluster
  • Maximization: 更新每一个 cluster 的中心

由此可得到:K-means 算法其实是EM算法的一种特殊情况.

K-means 选择将一个数据点归为一个 cluster (概率100%, hard decision); 而 EM 算法选择将一个数据点看作是多个cluster (或分布) 的混合物(soft decision).

case: 人的气质类型

(补一下性格的本质: 是习惯, 习惯决定性格, 性格决定命运, 是有科学性滴)

记得以前学心理学的时候, 谈到气质类型的章节, 一种经典的体液分法(5世纪前), 认为人体有四种液体, 不同的体液比例混合形成了四种典型气质类型:

  • 多血质: 活泼, 敏感, 好动, 反应快, 喜欢交往...., 典型人物: 王熙凤, 姚明, 科比, 詹姆斯
  • 胆汁质: 直率, 热情, 冲动, 情绪化... 典型人物: 张飞, 鲁智深, 奥尼尔, 恩比德
  • 粘液质: 安静, 稳重, 反应慢, 沉默寡言, 善于忍耐, 典型人物: 鲁肃, 司马懿, 邓肯, 卡哇伊
  • 抑郁质: 孤僻, 行动迟缓, 体验深刻, 多愁善感, 善于察觉细节... 典型人物: 林黛玉, 罗斯

需求: 如何通过一个的性格(行为习惯) 来判断小陈同学的气质类型

  • K-means: 小陈同学比较孤僻, 沉默寡言, 总沉浸在自己的世界... 但偶尔也活泼好动..嗯, 就判定为抑郁型
  • EM: 综合来看, 小陈同学有 30%是多血的, 50%是粘液的, 抑郁, 胆汁各10%, 嗯...大概率, 偏向粘液质一点.

从偏理论来看

E-步骤

K-means 的 \(r_{nk}\) 判断每个样本属于对应的类别 k

def \(r_{nk}\) :

​ IF \(k = arg \ min_j \ ||x_n - u_k||^2\) :

​ return 1

​ ELSE:

​ return 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 \limits _{m=1}^K p_k^{(i)} g(x_n; m_k^{(i)} \sigma_k^{(i)})}\)

就是一个全概率下的贝叶斯嘛.

def $P(k|n) $ :

​ IF \(k = arg \ max _s \ p(s| x_n, m_k, \sigma_k)\) :

​ return 1

​ ELSE:

​ return 0

M-步骤

K-means 就是在遍历完一轮后, 进行中心点的更新

\(\mu_k = \frac {\sum \limits _{n} r_{nk} x_n}{\sum \limits _{n} r_{nk}}\)

就是将当前该类别下的所有点, 加起来, 再求平均, 得到中心

EM 也是做一样的事情呀

\(m_k^{(i+1)} = \frac {\sum \limits _{n=1}^N p^{(i)}(k|n)x_n} {\sum \limits _{n=1}^N p^{(i)}(k|n)}\)

就到这里吧, 这篇主要是回忆和小结一波 k-means 和 EM算法, 感觉EM算法整明白了对自信心提升还是蛮大的, 因为它涉及概率分布, 参数估计, 最大似然, 贝叶斯等, 这些都是概率论的核心知识点呀, 是需要一定功力的哦.

K-means 和 EM 比较的更多相关文章

  1. KNN 与 K - Means 算法比较

    KNN K-Means 1.分类算法 聚类算法 2.监督学习 非监督学习 3.数据类型:喂给它的数据集是带label的数据,已经是完全正确的数据 喂给它的数据集是无label的数据,是杂乱无章的,经过 ...

  2. 软件——机器学习与Python,聚类,K——means

    K-means是一种聚类算法: 这里运用k-means进行31个城市的分类 城市的数据保存在city.txt文件中,内容如下: BJ,2959.19,730.79,749.41,513.34,467. ...

  3. Andrew Ng机器学习公开课笔记 -- Mixtures of Gaussians and the EM algorithm

    网易公开课,第12,13课 notes,7a, 7b,8 从这章开始,介绍无监督的算法 对于无监督,当然首先想到k means, 最典型也最简单,有需要直接看7a的讲义   Mixtures of G ...

  4. Weka中EM算法详解

    private void EM_Init (Instances inst) throws Exception { int i, j, k; // 由于EM算法对初始值较敏感,故选择run k mean ...

  5. 快速查找无序数组中的第K大数?

    1.题目分析: 查找无序数组中的第K大数,直观感觉便是先排好序再找到下标为K-1的元素,时间复杂度O(NlgN).在此,我们想探索是否存在时间复杂度 < O(NlgN),而且近似等于O(N)的高 ...

  6. 高斯混合模型参数估计的EM算法

    # coding:utf-8 import numpy as np def qq(y,alpha,mu,sigma,K,gama):#计算Q函数 gsum=[] n=len(y) for k in r ...

  7. 网络费用流-最小k路径覆盖

    多校联赛第一场(hdu4862) Jump Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  8. numpy.ones_like(a, dtype=None, order='K', subok=True)返回和原矩阵一样形状的1矩阵

    Return an array of ones with the same shape and type as a given array. Parameters: a : array_like Th ...

  9. 当我们在谈论kmeans(2)

        本稿为初稿,后续可能还会修改:如果转载,请务必保留源地址,非常感谢! 博客园:http://www.cnblogs.com/data-miner/ 其他:建设中- 当我们在谈论kmeans(2 ...

  10. 当我们在谈论kmeans(3)

        本系列意在长期连载分享,内容上可能也会有所删改: 因此如果转载,请务必保留源地址,非常感谢! 博客园:http://www.cnblogs.com/data-miner/(暂时公式显示有问题) ...

随机推荐

  1. postman---postman文件夹介绍以及批量执行用例

    我们在做测试的过程中,都会多次请求接口,都会把接口保存下来,方便下次直接请求,节省时间不用每次都重新输入,我们一起看下Postman如何保存接口会话 保存请求作用 Postman可以将各个请求组合保存 ...

  2. 密度峰值聚类算法(DPC)

    密度峰值聚类算法(DPC) 凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1. 简介 基于密度峰值的聚类算法全称为基于快速搜索和发现密度峰值的聚类算法(cl ...

  3. 借助meta影藏顶部菜单

    1===>报错 Cannot find module 'webpack/lib/Chunk' 删除node_modules 然后重新下载 4==> 现在已进入页面,底部就有四个菜单,在点击 ...

  4. 面向对象程序设计(JAVA) 第10周学习指导及要求

    2019面向对象程序设计(Java)第10周学习指导及要求 (2019.11.1-2019.11.4)   学习目标 1.掌握java异常处理技术: 2.了解断言的用法: 3.了解日志的用途: 4.掌 ...

  5. 安装Microsoft Office 2010 提示需要安装MSXML版本6.10.1129.0 的解决方案

    1.先按照https://blog.csdn.net/c_lanxiaofang/article/details/80410868进行处理安装 2.安装vison2010,如果还存在提示未安装MSXM ...

  6. babel速览

    babel babel初衷 在es6出现之后,由于此版本的巨大改变,给人们带来了很多革命性的技术支持,但是当时很多浏览器对es6支持有限,babel就是为了达到写最新的语法,可以在任意浏览器运行而出现 ...

  7. springcloud源码分析(一)之采用redis实现注册中心

    注册中心 在分布式架构中注册中心起到了管理各种服务功能包括服务的注册.发现.熔断.负载.降级等功能,在分布式架构中起到了不可替代的作用.常见的注册中心有eureka,zookeeper等等,在spri ...

  8. Codeforces Round #596 (Div. 2, based on Technocup 2020 Elimination Round 2) F. Tree Factory 构造题

    F. Tree Factory Bytelandian Tree Factory produces trees for all kinds of industrial applications. Yo ...

  9. 解决 Ubuntu16.04 + opencv4.1 源码编译错误 Makefile:160: recipe for target 'all' failed

    最近源码编译 opencv,出现下面的错误 [ %] Built target opencv_dnn Makefile:: recipe for target 'all' failed google ...

  10. Comment file

    /// This is the head comment of a file. /*********************************************************** ...