实战EM算法与图像分割
EM 算法是求参数极大似然估计的一种方法,它可以从非完整数据集中对参数进行估计,是一种非常简单实用的学习算法。这种方法可以广泛地应用于处理缺损数据、截尾数据以及带有噪声等所谓的不完全数据,可以具体来说,我们可以利用EM算法来填充样本中的缺失数据、发现隐藏变量的值、估计HMM中的参数、估计有限混合分布中的参数以及可以进行无监督聚类等等。
贴相关几个好文章:从最大似然到EM算法浅解
混合高斯模型(Mixtures of Gaussians)和EM算法
斯坦福大学机器学习——EM算法求解高斯混合模型
关于算法的原理推导上面文章介绍的很详细了,在这里再白话一下个人认识的关键几点:
(1)我们要估计的是什么?估计的是未知的参数,谁的参数?你认为你的数据符合的模型的参数,那么就需要认识到我们的数据符合什么模型。看到许多用的都是数据符合高斯(混合)模型,公式也就是正态分布的那个公式:
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算法与图像分割相关推荐
- 基于Kmeans聚类算法的图像分割(色彩分割)实战
基于Kmeans聚类算法的图像分割(色彩分割)实战 图像分割是将一幅图像分割成多个像素区域的任务.属于同一对象类型的所有像素都被分配到同一类别下.图像分类是给一副完整的图像一个类别,目标检测是检测到图 ...
- OpenCV实战——基于GrabCut算法的图像分割
OpenCV实战--基于GrabCut算法的图像分割 1. GrabCut 算法 2. 图像分割实战 3. 完整代码 相关链接 1. GrabCut 算法 在 OpenCV 策略设计模式一节中,我们已 ...
- 西瓜书+实战+吴恩达机器学习(二三)EM算法和变分推断
文章目录 0. 前言 1. EM算法 2. 变分推断 如果这篇文章对你有一点小小的帮助,请给个关注,点个赞喔,我会非常开心的~ 0. 前言 EM算法是常用的估计参数隐变量的方法,它是一种迭代式算法,E ...
- 机器学习算法_机器学习之EM算法和概率图模型
[晓白]今天我准备更新Machine Learning系列文章希望对机器学习复习和准备面试的同学有帮助!之前更新了感知机和SVM,决策树&代码实战,关注我的专栏可以的文章哦!今天继续更新EM算 ...
- em算法 实例 正态分布_人人都能看懂的EM算法推导
↑ 点击蓝字 关注极市平台作者丨August@知乎(已授权)来源丨https://zhuanlan.zhihu.com/p/36331115编辑丨极市平台 极市导读 EM算法到底是什么,公式推导怎么去 ...
- python 数学期望_python机器学习笔记:EM算法
完整代码及其数据,请移步小编的GitHub 传送门:请点击我 如果点击有误:https://github.com/LeBron-Jian/MachineLearningNote EM算法也称期望最大化 ...
- em算法直观_直观地解释了10种图形算法
em算法直观 重点 (Top highlight) Graphs have become a powerful means of modelling and capturing data in rea ...
- 从最大似然到EM算法浅解 http://blog.csdn.net/zouxy09/article/details/8537620
1. EM blog的举例就是group 然后就是每个group的function很有效地串联所学的知识,看到的论文,所有的思考,都是有一定的逻辑关系,如何逐渐develop你的想法,都是有一定的源头 ...
- [Python从零到壹] 六十一.图像识别及经典案例篇之基于纹理背景和聚类算法的图像分割
祝大家新年快乐,阖家幸福,健康快乐! 欢迎大家来到"Python从零到壹",在这里我将分享约200篇Python系列文章,带大家一起去学习和玩耍,看看Python这个有趣的世界.所 ...
最新文章
- TVMNN编译Compiler栈
- android action pick,Intent中各种常见的Action
- 【Dual-Path-RNN-Pytorch源码分析】model的架构图
- 掌握这10个Python小技巧,让你敲代码速度快5倍不止
- FlashDevelop调试Air出错
- 机器学习的理论知识点总结
- 2_less中的数值运算
- Netty 整合 MessagePack 序列化框架 + LengthFieldBasedFrameDecoder 自定义解码器
- random随机数类
- SQL数据库置疑恢复
- python树莓派_树莓派python
- 5款实用报表工具分析,报表工具这样选!
- OPEN CASCADE Curve Continuity
- day 83 Vue学习三之vue组件
- 你应该掌握的JavaScript高阶技能(六)
- 对英文字母按照不区分大小写进行排序
- ERP在企业财务管理中的应用
- 干货解答:如何设置Facebook Messenger 自动回复?
- 股市大涨该买吗?教你用算法量化交易行为!
- mysql存储过程之循环(WHILE,REPEAT和LOOP)
热门文章
- 极点五笔状态栏和候选窗口显隐
- 用自己拍的一张照片做海报
- python 视频转场_OpenGL 实现视频编辑中的转场效果
- 智源社区AI周刊No.105:谷歌FLAN-T5 30亿参数即超越GPT-3性能;Copilot推出语音编程新功能,但面临诉讼...
- 《预训练周刊》第63期:微软视觉语言预训练综述、最新大模型课程
- Js逆向教程-10常见代码混淆
- Linux的777权限
- html的css雪花动效,《前端每日实战》第171号作品:用纯 CSS 绘制一朵美丽的雪花...
- 【python】(四)python常用数据结构
- python考研选什么专业好就业_人工智能考研专业就业怎么样 哪些院校开设人工智能专业...