OpenCV4.1.1版本的EM算法实现

OPENCV之EM算法篇  OPENCV之EM算法篇EM算法是求解最大似然函数极值的一种解法,使用的是迭代求解的方法,并且保证收敛。EM算法的应用相当广泛,包括混合高斯模型的求解,隐马尔科夫模型的求解,最大后验概率模型的求解等。最常用的是混合高斯模型的求解,把混合概率密度分解为一系列的高斯分量之和。关于EM算法的具体流程可参考网上,个人推荐一个介绍的不错的,《pattern recognition and mach 阅读详情

看了《模式识别与机器学习》,希望能够将其中的一些概念性较强的内容加以实现,来加强和巩固自己的理解

EM算法——《模式识别与机器学习 第九章》

  1. 潜在变量的引入:使得复杂的概率分布可以有简单的分量组成。观测变量上的复杂的边缘概率分布可以通过观察变量与与潜在变量组成的扩展空间上的更加便于计算的联合概率分布来表示
  2. EM算法——期望最大化:寻找带有潜在变量的模型的最⼤似然估计的⼀个⼀般的⽅法是期望最⼤化(EM)算法。其中,在许多应⽤中,参数由最⼤似然⽅法确定,通常会使⽤EM算法
    解释来说就是:E,求期望(Expectation),利用概率模型参数的现有估计值,计算潜在变量的期望;M,求极大(Maximization),利用E 步上求得的潜在变量的期望,对参数模型进行最大似然估计。所得参数估计值用于下个E步的计算,重复至收敛。
  3. K均值聚类中的EM思想:其中,uk表示聚类的中心,xn表示D维欧几里得空间的随机变量x的N次观测结果。rnk表示二值指示变量,使用1-of-K表示方式,rnk表示数据点xn被分配到类别k。
    J为目标函数。最终的目标是找到{rnk}和{uk}的值,使得J达到最小值。在这里插入图片描述
    在这个过程中,由于涉及到两个待优化变量,所以,分阶段对其进行最优化,同时在对一个变量进行优化时,保持另一个值固定不变。其中,更新rnk和更新uk的两个阶段分别对应于EM算法中的E步骤和M步骤。
    在这里插入图片描述
    对于rnk的最优化:固定uj,即将聚类中心固定住,将每个观测值赋给最近的聚类中心
    在这里插入图片描述
    uk的分母相当于聚类k中的数据点数目,此时uk即为类别k的所有数据点的均值
  4. K均值算法:在实际应⽤中,⼀个更好的初始化步骤是将聚类中心选择为由K个随机数据点组成的子集。还有⼀点值得注意的地⽅,K均值算法本身经常被用于在EM算法之前初始化高斯混合模型的参数。
  5. K均值算法的online random算法:使用顺序更新算法,对于每个数据点xn,使用下式更新最近的代表向量uk在这里插入图片描述
  6. k中心点算法:K均值算法中使用欧几里得距离作为数据点与代表向量之间的不相似程度的度量,此时限制了能够处理的数据变量的类型,也会使得中心点的确定对异常点不具有鲁棒性。此时,引入更加一般的不相似程度的度量在这里插入图片描述
    此时,E步骤涉及到为每个数据点分配聚类,使得与对应的聚类代表的不相似程度最小。
    但是,M步骤通常比K均值的情形更加复杂,因此通常会将聚类原型 限制为等于 某个分配到那个聚类的数据向量,从而使得算法可以适⽤于任何不相似程度的度量V(.,.)。即,M步骤涉及到在分配到那个聚类的Nk个点上的离散搜索
  7. 用于高斯混合模型的EM:
    高斯混合分布函数:其中pai k为混合系数
    在这里插入图片描述
    那么对于每个观测数据点,都存在一个对应的潜在变量zn。该潜在变量为一个K为二值随机变量,采用1-of-K表示方法。根据哪个元素非零,向量z有K个可能的状态。
    在这里插入图片描述
    将pai k看做zk=1的先验概率,那么上式即为观测到x之后,对应的后验概率。
  8. 可以使用EM方法来解决由于奇异性的存在造成的应用于高斯混合模型的最大似然框架中的一个大问题
  9. 高斯混合模型的对数似然函数在这里插入图片描述
    令其关于高斯分量的均值uk的均值等于0, 则有在这里插入图片描述
    整理得在这里插入图片描述在这里插入图片描述其中,Nk看作分配到聚类k的数据点的有效数量。 此时后验概率表示分量k对生成xn的责任
    同理,关于混合系数pai k最大化lnp,使用拉格朗日乘数法,在这里插入图片描述
    得到在这里插入图片描述即第k个分量的混合系数为那个分量对于解释数据点的责任的平均值
    在这里插入图片描述
    在这里插入图片描述
  10. EM算法的另一种观点:在实际应用中,没有完整数据集{X, Z},只有不完整的数据X。在这里插入图片描述在这里插入图片描述
    此时,适用于未观测的变量对应于数据集里的缺失值的清晰。观测值的概率分布可以通过对所有变量的联合概率分布关于缺失变量求和或积分的方式得到
  11. 一般形式的EM算法:目标是最大化似然函数在这里插入图片描述
    引入一个定义在潜在变量上的分布q(Z),对于任意的q(Z)有
    在这里插入图片描述
    其中,KL散度满足KL(q||p)>=0,当且仅当q(Z)=p(Z|X,θ)时等号成立
    在E步骤中,下界L(q, θ旧)关于q(Z)被最大化,而θ旧保持不变
    在M步骤中,分布q(Z)保持古典,下界L(q, θ)关于θ进行最大化,得到θ新

EM算法的OpenCV实现

  1. EM算法属于非监督学习算法,可以从给定的样本集中,计算出高斯混合系数的最大似然估计,也能得到每个样本对应的标注值。
  2. 关键是使用下述语句
    Ptr em = EM::create();
    em->setClustersNumber(3);
    em->setCovarianceMatrixType(EM::COV_MAT_SPHERICAL);
    em->setTermCriteria(TermCriteria(TermCriteria::COUNT+TermCriteria::EPS, 500, 0.1));
    em->trainEM(data, noArray(), modifiedImage, noArray());
OpenCV4学习笔记(46)——特征提取与描述之AKAZE特征提取描述算法 在之前的笔记《OpenCV4学习笔记(38)》中,整理记录了我本人对于经典特征算法——SIFT算法一些流程的理解,而今天要整理的是SIFT算法的其中一种改进算法,也即AKAZE特征算法。 AKAZE特征算法是SIFT特征算法的一种改进版本,但不使用高斯模糊来构建尺度空间,因为高斯模糊具有丢失边缘信息的缺点,进而采用非线性扩散滤波来构建尺度空间,从而保留图像更多的边缘特征。 在特征点提取阶段,AKA... 阅读详情

相关推荐

ADC学习(3)——采样电路

第三章 采样电路

夏风喃喃的博客 3万+

EM算法学习笔记_2(opencv自带EM sample学习)

  实验说明:   在上一讲EM算法学习笔记_1(对EM算法的简单理解) 中已经用通俗的语言简单的介绍了下EM算法,在这一节中就采用opencv自带的一个EM sample来学习下opencv中EM 算法类的使用,顺便也体验下EM 算法的实际应用。   环境:Ubuntu12.04+Qt4.8.2+QtCreator2.5+opencv2.4.2   在这里需要使用2个与EM算法有关的类,...

weixin_34337265的博客 286

拆解特斯拉Optimus的关节技术:谐波减速器在仿人机器人中的5个精妙设计

本文深度解析特斯拉Optimus仿人机器人关节中的谐波减速器技术,揭示其五大工程突破:微型化材料革命、两万分之一圈精度实现、碳纤维柔轮轻量化、智能运维系统及国产替代方案。重点探讨谐波减速器如何通过创新设计和先进材料实现精准传动,为仿人机器人提供高效可靠的关节动力解决方案。

omega的博客 1075

EM算法及python简单实现

x1,x2,...,xnx_1,x_2,...,x_nx1​,x2​,...,xn​ θ^=argmax∑i=1nlogp(xi∣θ)\hat{\theta}=argmax\sum\limits_{i=1}^n log p(x_i|\theta)θ^=argmaxi=1∑n​logp(xi​∣θ) θ^=argmax∑i=1nlogp(xi∣θ)=argmax∑i=1nlog∑zip(xi,zi∣θ)\hat{\theta}=argmax\sum\limits_{i=1}^n log p(x_i|\th

dawnyi_yang的博客 5046

Openclaw Onboarding向导全攻略——如何配置你的第一个AI助手

很多新手在成功运行 `openclaw --version` 后,面对黑底白字的终端就陷入了迷茫:“安装好了,然后呢?” 本篇我们就彻底解决这个问题,带你完整走完 `openclaw onboard` 交互式初始化配置向导的每一步,从“安装完成”到“真正能用”,只差这一个向导的距离。 本文为2026年3月最新版,适配OpenClaw v2026.2.x 稳定版,所有步骤均经过实测验证,可直接落地。

夏日清风 1917

UVM实战 卷I学习笔记1——简单的UVM验证平台:只有driver

目录验证平台的组成最简单的验证平台——只有driverUVM如何搭建driver:加入factory机制加入objection机制加入virtual interface 个人《UVM实战卷I》学习随手笔记,此书作者:张强 验证平台的组成 一个验证平台要实现的基本功能: 模拟DUT的各种真实使用情况——给DUT施加各种激励→driver实现激励功能; 根据DUT的输出判断DUT行为是否与预期符合→scoreboard(也称为checker)——需注意判断的东西和判断的标准是什么; 收集DUT的输出并传递

weixin_41979380的博客 3890

EM算法及OpenCV源码分析

关于EM原理,见: EM算法的启动和终止 算法执行的开始步骤有三种指定方式。如果使用了CvEM::START_AUTO_STEP,则会调用k-means算法估计最初的参数,K-means会随机地初始化类中心,KMEANS_PP_CENTERS,这会导致EM算法得到不同的结果,如果数据量越大,则这种差异性会变小。 如果指定CvEM::START_E_STEP或CvEM::START

工作笔记 6536

京瓷扫描驱动安装_京瓷喷头拆解和供墨原理剖析

在工业喷头打印领域,京瓷喷头作为主流喷头广泛应用于喷墨行业,目前京瓷喷头市面上销售主要有两个系列:KJ4A和KJ4B。其中KJ4A系列设计是用于油性墨水,例如UV墨水,主要用在广告领域;而KJ4B设计用于水性墨水,例如活性、分散墨水等,主要用在数码印花领域。最近我们团队对京瓷喷头进行了拆解分析,本期和大家分享一下我们对京瓷喷头拆解和喷头供墨原理的研究。京瓷喷头介绍1. KJ4A系列(油性)如下图所...

weixin_39883906的博客 1673

opencv2.4.9中期望最大(EM)算法理解

简介 首先,明确问题。假如,我需要了解成都这个城市所有人口的身高情况,如果我是万能的上帝(其实不信上帝),只要告诉我某个人的生成八字我就可以知道ta的身高,但可惜我不是,如果还是想知道这个城市中任何人的身高,就只有采用统计推断的办法了,假设我知道整个城市所有人的身高分布(总体分布)情况,给定一个人的其他情况,我就能大概推断出ta的身高了,如何才能知道总体分布,不可能将所有人的分布都统计下

CHIERYU的专栏 3038

FEniCS学习笔记01:centos7下通过conda安装FEniCSx0.7

2023年版本的Fenicsx0.7,官网推荐使用conda命令安装集成好的Python包,因此我们的安装思路是先安装Anaconda,再按照官网步骤安装Fenics。

huahua_xiao的博客 5056

图神经网络学习笔记-点云数据处理(专题七)

本教程解释了如何利用图神经网络(Graph Neural Networks,GNNs)来处理和训练点云数据。尽管点云默认情况下不具有图结构,但我们可以利用 PyG 的转换工具,将其转化为适合 PyG 所提供的全套 GNN 模型的形式。关键思想是从点云数据中创建一个,通过 GNN 的消息传递机制,从中学习有意义的局部几何结构。这些点的表示可以被用于例如点云分类或分割等任务。

351

EM算法及其实现

EM算法简单解释举一个例子代码实现 简单解释 Nature Biotech在他的一篇EM tutorial文章《Do, C. B., & Batzoglou, S. (2008). What is the expectation maximization algorithm?. Nature biotechnology, 26(8), 897.》中,用了一个投硬币的例子来讲EM算法的思想。 假设有两枚硬币A、B,以相同的概率随机选择一个硬币,进行如下的抛硬币实验:共做5次实验,每次实验独立的抛十次,

qq_45697152的博客 1101

C/C++基础讲解(四十三)之图形篇之绘制直线、圆、圆弧、 椭圆

程序主要是基于Visual studio 2019进行编译完成了,有兴趣的小伙伴可以自己安装下Visual studio 2019,网上有现成的教程,当然了,如果有问题,也可以和我联系,这里我们主要讲解些源码实例,不多说了,言归正传。 C语言,做为学习其他语言的基础语言,其重要性就不言而喻了.下面我将和大家一起来学习探讨C语言的相关奥秘。 实例1:绘制直线 实例2:绘制圆 实例2:绘制圆弧 实例2:绘制椭圆

hnjzfwy的博客 1235

EMGU中的机器学习算法之:EM算法

使用EMGU3.4.1版本,修复了EMGU.ML中的EM算法。

Zythonista的博客 449

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

em算法的java实现,OPENCV EM算法详解和JAVA实现

1EM算法是一种迭代算法,主要用于计算后验分布的众数或极大似然估计,广泛地应用于缺损数据、截尾数据、成群数据、带有讨厌参数的数据等所谓不完全数据的统计推断问题。2EM算法是一种非监督的学习算法,它的输入数据事先不需要进行标注。相反,该算法从给定的样本集中,能计算出高斯混和参数的最大似然估计。也能得到每个样本对应的标注值,类似于kmeans聚类(输入样本数据,输出样本数据的标注)。3优点:EM算法简...

weixin_39776787的博客 352

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

opencv3中的机器学习算法之:EM算法

不同于其它的机器学习模型,EM算法是一种非监督的学习算法,它的输入数据事先不需要进行标注。相反,该算法从给定的样本集中,能计算出高斯混和参数的最大似然估计。也能得到每个样本对应的标注值,类似于kmeans聚类(输入样本数据,输出样本数据的标注)。实际上,高斯混和模型GMM和kmeans都是EM算法的应用。 在opencv3.0中,EM算法的函数是trainEM,函数原型为: bool t...

weixin_30737363的博客 217

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

OPENCV EM算法详解和JAVA实现

1EM算法是一种迭代算法,主要用于计算后验分布的众数或极大似然估计,广泛地应用于缺损数据、截尾数据、成群数据、带有讨厌参数的数据等所谓不完全数据的统计推断问题。2EM算法是一种非监督的学习算法,它的输入数据事先不需要进行标注。相反,该算法从给定的样本集中,能计算出高斯混和参数的最大似然估计。也能得到每个样本对应的标注值,类似于kmeans聚类(输入样本数据,输出样本数据的标注)。3优点:EM算法简

懒人日志 2927

OpenCV_EM算法

直接调用opencv中的EM算法: 在头文件中定义: CvEM em; CvEMParams em_params; 但这时候会提示CvEM 未定义。查了相关资料发现CvEM类在opencv2.4.9版本中被放在legacy.hpp中, 因此调用时需要加头文件 #include

xiao_lxl的专栏 1689

Ubuntu18.04配置opencv3.4.1+opencv_contrib3.4.1

出现如下问题: 解决方法: 查看CUDA版本,如CUDA11.5 sudo apt-get update sudo apt-get install nvidia-cuda-toolkit-11-5 然后重新编译即可。

LMing的博客 3749

EM算法原理解析

本文引用了如下几篇文章,感谢大牛们的付出 https://www.cnblogs.com/wjy-lulu/p/7010258.html https://www.cnblogs.com/Gabby/p/5344658.html https://www.cnblogs.com/wjy-lulu/p/7009038.html EM算法的定义及应用范围 EM算法,即最大期望算法(Expe...

贾路飞的博客 1988

OPENCV 1.0 RC1 版本介绍

 注:下面内容是从发布版本的 changelog 文件中翻译过来的,仅供参考。======================OPENCV 1.0 RC1 , 发布时间:2006年8月======================>>> 新函数与新特征   - 支持的新编译器/环境:     * GCC 4.x      * Visual Studio .NET 2005.       注意

3400

使用opencv中基于高斯混合模型(GMM)的EM算法进行数据点分类demo

环境: Win10+VS2015+opencv3.4.x opencv生成随机数据点,使用基于高斯混合模型(GMM)的EM算法进行数据点分类 源码: void GMM_EM( ) { Mat img(600, 600, CV_8UC3);//图像 RNG rng(12345);//随机数生成器,初始化可以传入一个64位的整型参数作为随机数产生器的初值 //颜色索引表,根据分类数...

ganwenbo2011的博客 1090

em算法的java实现,em算法java代码

2 O p e n C V的目标检测方法 O p e n C V计算机视觉库用一系列 C函数和 C+ + 类 实现了 图像处理和计算机 视觉方 面的很 多通用 算法 , 支持 ......Java 集成开发环境(IDE Enterprise 企业版 Developer 开发版 Foundation 基础版 Messages 消肖息格 Structure 结构窗格 Project 工程 Files ...

weixin_39630515的博客 448

Opencv2.4.9源码分析——Expectation Maximization

一、原理   期望极大算法(EM,Expectation Maximization)是一种能够得到极大似然参数估计的迭代方法。虽然EM算法在不同的领域被更早的提出,但它是由Dempster等人于1977年被正式命名并给出解释。 对于一个除了拥有未知参数和可观测变量外,还包含隐含变量的统计模型来说,是无法用极大似然方法直接得到参数的,这是因为我们不能像极大似然法那样,同时对未知参数和隐含变量求

赵春江的专栏 5927

OpenCV机器学习(3)期望最大化(Expectation-Maximization, EM)算法cv::ml::EM

cv::ml::EM 是 OpenCV 机器学习模块中的一部分,用于实现期望最大化(Expectation-Maximization, EM)算法。EM 算法是一种迭代方法,通常用于估计有限混合模型(如高斯混合模型,GMM)的参数。它在数据聚类、密度估计等领域有着广泛应用。

jndingxin的专栏 765
上一篇: 图像处理和图像识别中常用的OpenCV函数
下一篇: C++中的()操作符重载及STL传递比较函数
chenying66
博客等级 码龄10年 31粉丝 42原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值