EM 算法是求参数极大似然估计的一种方法,它可以从非完整数据集中对参数进行估计,是一种非常简单实用的学习算法。这种方法可以广泛地应用于处理缺损数据、截尾数据以及带有噪声等所谓的不完全数据,可以具体来说,我们可以利用EM算法来填充样本中的缺失数据、发现隐藏变量的值、估计HMM中的参数、估计有限混合分布中的参数以及可以进行无监督聚类等等。

贴相关几个好文章:从最大似然到EM算法浅解

混合高斯模型(Mixtures of Gaussians)和EM算法

斯坦福大学机器学习——EM算法求解高斯混合模型

关于算法的原理推导上面文章介绍的很详细了,在这里再白话一下个人认识的关键几点:

(1)我们要估计的是什么?估计的是未知的参数,谁的参数?你认为你的数据符合的模型的参数,那么就需要认识到我们的数据符合什么模型。看到许多用的都是数据符合高斯(混合)模型,公式也就是正态分布的那个公式:

P(x)=12π−−√σexp(−(x−u)22σ2)

P(x)=\dfrac{1}{\sqrt{2\pi}\sigma}exp(-\dfrac{(x-u)^2}{2\sigma^2})
所以在估计参数前是认为数据符合这个模型的,而这个模型需要均值与方差,所以需要它们,这样再来一个新数据的话才能计算它属于这一模型的概率。

(2)关于EM算法的初始化参数问题,看了好多文章,感觉都没有怎么说在EM算法里面,参数初始化是多么的重要,直到自己在具体实现EM算法,发现结果怎么怎么不好的时候,查了许多原因才意到这个问题。虽然说EM算法是个鸡蛋问题,但是这个鸡蛋问题怎么感觉有一点特殊,在初始化的时候必须给一组像样的离的不是很远的蛋,最后在反复进化的过程中才能长成完全的鸡,否则的话你在初始化的时候给一个大石头,那么结果一般情况下不太容易进化成鸡。

好了,至于详细原理,网络资源众多就不在累述。然而原理众多但怎么用代码实现的却很少,这里以一个简单的例子(图像的分割,其实就是无监督聚类)来说明实现过程。在聚类时,设置聚类数,那么每一类数据认为是服从一个高斯分布的,那么我们通过EM算法来估计各个类中的高斯参数。关于灰度图像,在聚类里面其实就是一个一维特征的样本,每个像素点视为一个样本点,值得大小视为其具有的特征,这样就可以了,聚类完以后再把它转化为一个图像显示出来,matlab下代码如下:

clc
clear
close all
img = double(imread('lena.jpg'));
%设置聚类数
cluster_num = 4;
%随机初始化参数--至关重要
%我这样选择可以更大程度的贴近真实均值
%从而效果才会更好
mu = (1:cluster_num)./(cluster_num + 1) * max(max(img));
sigma = mu;
pw = zeros(cluster_num,size(img,1)*size(img,2));
pc = rand(1,cluster_num);
pc = pc/sum(pc);%将类概率归一化
max_iter = 50;%以迭代次数来作为停止的条件
iter = 1;
while iter <= max_iter%----------E-------------------for i = 1:cluster_num%矩阵操作--速度快MU = repmat(mu(i),size(img,1)*size(img,2),1);%高斯模型temp = 1/sqrt(2*pi*sigma(i))*exp(-(img(:)-MU).^2/2/sigma(i));temp(temp<0.000001) = 0.000001;%防止出现0
%       pw(i,:) = log(pc(i)) + log(temp);pw(i,:) = pc(i) * temp;endpw = pw./(repmat(sum(pw),cluster_num,1));%归一%----------M---------------------%更新参数集for i = 1:cluster_numpc(i) = mean(pw(i,:));mu(i) = pw(i,:)*img(:)/sum(pw(i,:));sigma(i) = pw(i,:)*((img(:)-mu(i)).^2)/sum(pw(i,:));end%------------show-result---------------[~,label] = max(pw);%改大小label = reshape(label,size(img));imshow(label,[])title(['iter = ',num2str(iter)]);pause(0.1);M(iter,:) = mu;S(iter,:) = sigma;iter = iter + 1;
end
%将均值与方差的迭代过程显示出来
figure
for i = 1:cluster_numplot(M(:,i));hold on
end
figure
for i = 1:cluster_numplot(S(:,i));hold on
end


均值随代数变化图

方差随代数变化图

可以看到这是设置4类的变化图,程序里面的参数初始化设置中,尤其是对均值Mu的设置很重要,设置的不好的话分割的效果就很常,也就是说参数估计的也很差,并且分割要求的类数越大(也就是需要估计的参数越多),对初始值的要求越高。

实战EM算法与图像分割相关推荐

  1. 基于Kmeans聚类算法的图像分割(色彩分割)实战

    基于Kmeans聚类算法的图像分割(色彩分割)实战 图像分割是将一幅图像分割成多个像素区域的任务.属于同一对象类型的所有像素都被分配到同一类别下.图像分类是给一副完整的图像一个类别,目标检测是检测到图 ...

  2. OpenCV实战——基于GrabCut算法的图像分割

    OpenCV实战--基于GrabCut算法的图像分割 1. GrabCut 算法 2. 图像分割实战 3. 完整代码 相关链接 1. GrabCut 算法 在 OpenCV 策略设计模式一节中,我们已 ...

  3. 西瓜书+实战+吴恩达机器学习(二三)EM算法和变分推断

    文章目录 0. 前言 1. EM算法 2. 变分推断 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 EM算法是常用的估计参数隐变量的方法,它是一种迭代式算法,E ...

  4. 机器学习算法_机器学习之EM算法和概率图模型

    [晓白]今天我准备更新Machine Learning系列文章希望对机器学习复习和准备面试的同学有帮助!之前更新了感知机和SVM,决策树&代码实战,关注我的专栏可以的文章哦!今天继续更新EM算 ...

  5. em算法 实例 正态分布_人人都能看懂的EM算法推导

    ↑ 点击蓝字 关注极市平台作者丨August@知乎(已授权)来源丨https://zhuanlan.zhihu.com/p/36331115编辑丨极市平台 极市导读 EM算法到底是什么,公式推导怎么去 ...

  6. python 数学期望_python机器学习笔记:EM算法

    完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote EM算法也称期望最大化 ...

  7. em算法直观_直观地解释了10种图形算法

    em算法直观 重点 (Top highlight) Graphs have become a powerful means of modelling and capturing data in rea ...

  8. 从最大似然到EM算法浅解 http://blog.csdn.net/zouxy09/article/details/8537620

    1. EM blog的举例就是group 然后就是每个group的function很有效地串联所学的知识,看到的论文,所有的思考,都是有一定的逻辑关系,如何逐渐develop你的想法,都是有一定的源头 ...

  9. [Python从零到壹] 六十一.图像识别及经典案例篇之基于纹理背景和聚类算法的图像分割

    祝大家新年快乐,阖家幸福,健康快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所 ...

最新文章

  1. TVMNN编译Compiler栈
  2. android action pick,Intent中各种常见的Action
  3. 【Dual-Path-RNN-Pytorch源码分析】model的架构图
  4. 掌握这10个Python小技巧,让你敲代码速度快5倍不止
  5. FlashDevelop调试Air出错
  6. 机器学习的理论知识点总结
  7. 2_less中的数值运算
  8. Netty 整合 MessagePack 序列化框架 + LengthFieldBasedFrameDecoder 自定义解码器
  9. random随机数类
  10. SQL数据库置疑恢复
  11. python树莓派_树莓派python
  12. 5款实用报表工具分析,报表工具这样选!
  13. OPEN CASCADE Curve Continuity
  14. day 83 Vue学习三之vue组件
  15. 你应该掌握的JavaScript高阶技能(六)
  16. 对英文字母按照不区分大小写进行排序
  17. ERP在企业财务管理中的应用
  18. 干货解答:如何设置Facebook Messenger 自动回复?
  19. 股市大涨该买吗?教你用算法量化交易行为!
  20. mysql存储过程之循环(WHILE,REPEAT和LOOP)

热门文章

  1. 极点五笔状态栏和候选窗口显隐
  2. 用自己拍的一张照片做海报
  3. python 视频转场_OpenGL 实现视频编辑中的转场效果
  4. 智源社区AI周刊No.105:谷歌FLAN-T5 30亿参数即超越GPT-3性能;Copilot推出语音编程新功能,但面临诉讼...
  5. 《预训练周刊》第63期:微软视觉语言预训练综述、最新大模型课程
  6. Js逆向教程-10常见代码混淆
  7. Linux的777权限
  8. html的css雪花动效,《前端每日实战》第171号作品:用纯 CSS 绘制一朵美丽的雪花...
  9. 【python】(四)python常用数据结构
  10. python考研选什么专业好就业_人工智能考研专业就业怎么样 哪些院校开设人工智能专业...