我自己用C++写了个GMM(Gaussian mixture model)模型
我自己用C++写了个GMM(Gaussian mixture model)模型
Written for an assignment
之前粗粗了解了GMM的原理,但是没有细看,现在有个Assignment让用C++手写一个GMM模型,有点方,花了一些时间写出来了。
先吐槽下,这两天算是把网上关于GMM的博客扒了个遍。网上关于GMM的教程虽然很多,但是存在严重的理论和编程脱节,属于那种一看就会了、一打开编辑器就麻爪的文章
先自己评价下写的这个模型:
- 缺点
- 矩阵类是自己实现的,效率比较差(用C++做科学编程工作实在比较少,不知道有现成的库,而且C++给我留下的就是造核弹先从磨剪子开始的这种原始的感觉)。中途发现计算行列式和逆矩阵的性能太差了,上网一搜发现了Eigen库的存在,但是因为结构已经搭好了,所以只在这两个方法内使用了该库
- 理论上更换main方法的MODELNUMBER常数就可以选择GMM中使用的高斯函数的数量,但是只根据样本分布情况测试并使用了使用两个的情况,其他情况可能有bug(现在已知weight初始化的时候只写了两个高斯函数时的情况,有Bug,但是属于那种好发现、好调整的bug)
- 面向对象的不纯粹:是的,我是个Java狗。但是最后有两个方法,没有封装为工具类
- 都写在一个文件了:这个嘛emmm,是我发现C++调用其他文件资源很麻烦之后就偷了个懒
- 优点
- 面向对象,结构简单易懂
- 实现是基于这篇文章的,理论和编程搭配起来看很容易懂
- 比我之前康过的网上的其他实现好懂一点~
未尽事宜,请看README
项目地址:https://github.com/blackcoffeebar/MyGMM
我自己用C++写了个GMM(Gaussian mixture model)模型的更多相关文章
- 高斯混合模型Gaussian Mixture Model (GMM)——通过增加 Model 的个数,我们可以任意地逼近任何连续的概率密分布
从几何上讲,单高斯分布模型在二维空间应该近似于椭圆,在三维空间上近似于椭球.遗憾的是在很多分类问题中,属于同一类别的样本点并不满足“椭圆”分布的特性.这就引入了高斯混合模型.——可以认为是基本假设! ...
- 混合高斯模型(Gaussian mixture model, GMM)
1. 前言 这就是为什么我要学习一下二维高斯分布的原因: 总感觉数学知识不够用呐,顺带把混合高斯模型也回顾一下. 2. 单高斯模型(Gaussian single model, GSM) 2.1 一维 ...
- 高斯混合模型Gaussian Mixture Model (GMM)
混合高斯模型GMM是指对样本的概率密度分布进行估计,而估计采用的模型(训练模型)是几个高斯模型的加权和(具体是几个要在模型训练前建立好).每个高斯模型就代表了一个类(一个Cluster).对样本中的数 ...
- kaldi基于GMM的单音素模型 训练部分
目录 1. gmm-init-mono 模型初始化 2. compile-train-graghs 训练图初始化 3. align-equal-compiled 特征文件均匀分割 4. gmm-acc ...
- 从零写一个Asp.net core手脚架(模型验证)
一个asp.net core项目,一定包含了各种的实体,在RESTful api里面,有很多的参数传递,不建立实体则大量的参数需要自定验证正确性,并且Action上面会写的密密麻麻的参数 在asp.n ...
- 手动写Entity Framework 数据库上下文和Model实体
1.引用EF对应的程序集 使用命令安装EntityFramework包Install-Package EntityFramework Entity Framework简单目录: 1.context数据 ...
- 写了一个Java的简单缓存模型
缓存操作接口 /** * 缓存操作接口 * * @author xiudong * * @param <T> */ public interface Cache<T> { /* ...
- GMM及EM算法
GMM及EM算法 标签(空格分隔): 机器学习 前言: EM(Exception Maximizition) -- 期望最大化算法,用于含有隐变量的概率模型参数的极大似然估计: GMM(Gaussia ...
- GMM高斯混合模型学习笔记(EM算法求解)
提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断添加component个数,能够随意地逼近不论什么连续的概率分布.所以我们觉得不论什么样本分布都能够用混合模型来建模.由于高斯函数具有一 ...
随机推荐
- AI项目(CV方向)研发流程
- 转 【MySQL】常用拼接语句 shell 下执行mysql 命令
[MySQL]常用拼接语句 前言:在MySQL中 CONCAT ()函数用于将多个字符串连接成一个字符串,利用此函数我们可以将原来一步无法得到的sql拼接出来,在工作中也许会方便很多,下面主要介绍下几 ...
- C# 子线程与主线程通讯方法一
最近在项目中要用到子线程运行结束向主线程通知的需求,利用线程上下文来实现线程之间的同步. 子线程结束后调用同步函数,向主线程发送时间字符串,改变主窗体的label标签 label标签改变事件触发处理函 ...
- (十)进度条媒体对象和 Well 组件
一.Well 组件 有 lg 和 sm 两种可选值 <div class="well well-lg"> Bootstrap </div> 二.进度条组件 ...
- unsupported media type 415
jquery ajax请求报错解决方案: 两点: data: JSON.stringify(obj), contentType:"application/json", 完整pos ...
- text-align:justify 两端对齐
今天看页面发现一个以前没用过的css属性text-align:justify,查了一下非常实用,是一个实现文本两端对齐的属性. 使用前: 使用后: 看了一些文章还有结合inline-block+tex ...
- 02点睛Spring MVC 4.1-@RequestMapping
转发地址:https://www.iteye.com/blog/wiselyman-2213907 2.1 @RequestMapping @RequestMapping是SpringMVC的核心注解 ...
- Tomcat教程(转)
转载链接: https://www.cnblogs.com/jingmoxukong/p/8258837.html?utm_source=gold_browser_extension 简介 Tomca ...
- C++ 理解函数对象与lambda表达式
参考<21天学通C++>第21与第22章节,对函数对象进行介绍,同时通过lambda表达式这一匿名函数对象的简洁方式加深对函数对象的理解.本篇博文的主要内容是: (1) 函数对象的概念: ...
- mysql 中不等于过滤 null 的问题(同时比较等于,大于和小于)
在写 SQL 条件语句是经常用到 不等于'!='的筛选条件,此时要注意此条件会将字段为 null 的数据也当做满足不等于的条件而将数据筛选掉. 1.原始数据和表结构 CREATE TABLE `tes ...