回顾

前几篇对 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. Wireshark抓包笔录--之指定IP地址筛选捕获结果

    Wireshark安装 1.去官网下载相应的安装包 地址如下:https://www.wireshark.org/ 2.安装步骤,一路next,需要同意的地方点同意 3.安装完成后打开软件,如下: W ...

  2. Centos系统配置bond0

    版权声明:本文为博主原创文章,支持原创,转载请附上原文出处链接和本声明. 本文链接地址:https://www.cnblogs.com/wannengachao/p/11942254.html 1.查 ...

  3. B/S架构与C/S架构(略讲)

    B/S架构基本概念 B/S是Browser/Server,即浏览器/服务器架构.Browser指的是Web浏览器,极少数事务逻辑在前端实现,但主要事务逻辑在服务器端实现. B/S三层体系结构可以定义为 ...

  4. 在Rust中,cargo使用国内镜像源

    一个编程语言依赖包管理的普通问题. cargo解决得比较优雅. 一,新建$HOME/.cargo/config文件 [source.crates-io] registry = "https: ...

  5. drf框架知识总结

  6. Django的下载与创建。

    一.下载 (1)下载命令. 在cmd中输入下载命令: pip3 install django==1.11.11 1.11.11是该版本号. (2)pycharm中下载 直接在pycharm中下载set ...

  7. getpatch

    import time import os import math import sys import os,os.path,shutil import numpy as np import cv2 ...

  8. CF358D Dima and Hares

    CF358D Dima and Hares 洛谷评测传送门 题目描述 Dima liked the present he got from Inna very much. He liked the p ...

  9. 用 FFLIB 实现 Apex 企业设计模式

    Apex 企业设计模式将应用分为服务层.模型层.选择逻辑层.工作单元几个部分.FFLIB 是一个开源的 Apex 框架,可以帮助开发者快速建立相关的功能. FFLIB 的安装 FFLIB 可以直接部署 ...

  10. Java常识2

    JDK 的下载 安装 下载 官网 github安装 傻瓜式安装 JDK .JRE 注意问题 安装软件的 路径不能包含中文 空格 path环境变量 windows操作系统执行命令是所要搜寻的路径为什么要 ...