我自己用C++写了个GMM(Gaussian mixture model)模型

Written for an assignment

之前粗粗了解了GMM的原理,但是没有细看,现在有个Assignment让用C++手写一个GMM模型,有点方,花了一些时间写出来了。

先吐槽下,这两天算是把网上关于GMM的博客扒了个遍。网上关于GMM的教程虽然很多,但是存在严重的理论和编程脱节,属于那种一看就会了、一打开编辑器就麻爪的文章

先自己评价下写的这个模型:

  • 缺点

    1. 矩阵类是自己实现的,效率比较差(用C++做科学编程工作实在比较少,不知道有现成的库,而且C++给我留下的就是造核弹先从磨剪子开始的这种原始的感觉)。中途发现计算行列式和逆矩阵的性能太差了,上网一搜发现了Eigen库的存在,但是因为结构已经搭好了,所以只在这两个方法内使用了该库
    2. 理论上更换main方法的MODELNUMBER常数就可以选择GMM中使用的高斯函数的数量,但是只根据样本分布情况测试并使用了使用两个的情况,其他情况可能有bug(现在已知weight初始化的时候只写了两个高斯函数时的情况,有Bug,但是属于那种好发现、好调整的bug)
    3. 面向对象的不纯粹:是的,我是个Java狗。但是最后有两个方法,没有封装为工具类
    4. 都写在一个文件了:这个嘛emmm,是我发现C++调用其他文件资源很麻烦之后就偷了个懒
  • 优点
    1. 面向对象,结构简单易懂
    2. 实现是基于这篇文章的,理论和编程搭配起来看很容易懂
    3. 比我之前康过的网上的其他实现好懂一点~

未尽事宜,请看README

项目地址:https://github.com/blackcoffeebar/MyGMM

我自己用C++写了个GMM(Gaussian mixture model)模型的更多相关文章

  1. 高斯混合模型Gaussian Mixture Model (GMM)——通过增加 Model 的个数,我们可以任意地逼近任何连续的概率密分布

    从几何上讲,单高斯分布模型在二维空间应该近似于椭圆,在三维空间上近似于椭球.遗憾的是在很多分类问题中,属于同一类别的样本点并不满足“椭圆”分布的特性.这就引入了高斯混合模型.——可以认为是基本假设! ...

  2. 混合高斯模型(Gaussian mixture model, GMM)

    1. 前言 这就是为什么我要学习一下二维高斯分布的原因: 总感觉数学知识不够用呐,顺带把混合高斯模型也回顾一下. 2. 单高斯模型(Gaussian single model, GSM) 2.1 一维 ...

  3. 高斯混合模型Gaussian Mixture Model (GMM)

    混合高斯模型GMM是指对样本的概率密度分布进行估计,而估计采用的模型(训练模型)是几个高斯模型的加权和(具体是几个要在模型训练前建立好).每个高斯模型就代表了一个类(一个Cluster).对样本中的数 ...

  4. kaldi基于GMM的单音素模型 训练部分

    目录 1. gmm-init-mono 模型初始化 2. compile-train-graghs 训练图初始化 3. align-equal-compiled 特征文件均匀分割 4. gmm-acc ...

  5. 从零写一个Asp.net core手脚架(模型验证)

    一个asp.net core项目,一定包含了各种的实体,在RESTful api里面,有很多的参数传递,不建立实体则大量的参数需要自定验证正确性,并且Action上面会写的密密麻麻的参数 在asp.n ...

  6. 手动写Entity Framework 数据库上下文和Model实体

    1.引用EF对应的程序集 使用命令安装EntityFramework包Install-Package EntityFramework Entity Framework简单目录: 1.context数据 ...

  7. 写了一个Java的简单缓存模型

    缓存操作接口 /** * 缓存操作接口 * * @author xiudong * * @param <T> */ public interface Cache<T> { /* ...

  8. GMM及EM算法

    GMM及EM算法 标签(空格分隔): 机器学习 前言: EM(Exception Maximizition) -- 期望最大化算法,用于含有隐变量的概率模型参数的极大似然估计: GMM(Gaussia ...

  9. GMM高斯混合模型学习笔记(EM算法求解)

    提出混合模型主要是为了能更好地近似一些较复杂的样本分布,通过不断添加component个数,能够随意地逼近不论什么连续的概率分布.所以我们觉得不论什么样本分布都能够用混合模型来建模.由于高斯函数具有一 ...

随机推荐

  1. js监听浏览器剪贴板

    function setClipboardText(event){ event.preventDefault(); var node = document.createElement('div'); ...

  2. PHP7 serialize_precision 配置不当导致 json_encode() 浮点小数溢出错误

    https://blog.csdn.net/moliyiran/article/details/81179825 感谢 @地狱星星:原因已找到, 该现象只出现在PHP 7.1+版本上建议使用默认值 s ...

  3. Java基础 return 退出main方法的示例

        JDK :OpenJDK-11      OS :CentOS 7.6.1810      IDE :Eclipse 2019‑03 typesetting :Markdown   code ...

  4. Leetcode: 24 Game

    You have 4 cards each containing a number from 1 to 9. You need to judge whether they could operated ...

  5. Centos7搭建OpenNebula云平台

    OpenNebula概述 OpenNebula是专门为云计算打造的开源系统,用户可以使用Xen.KVM.VMware等虚拟化软件一起打造企业云.利用OpenNebula可以轻松构建私有云.混合云.公开 ...

  6. 【427】Graph 实现 以及 DFS & BFS

    目录: Graph 实现 二维数组实现 Linked List 实现 DFS:深度优先搜索 stack 实现 recursion 实现 BFS:广度优先搜索(queue) 其他应用 非连通图遍历 - ...

  7. 06点睛Spring MVC 4.1-文件上传

    6.1 文件上传 在控制器参数使用@RequestParam("file") MultipartFile file接受单个文件上传; 在控制器参数使用@RequestParam(& ...

  8. maven 中配置多个mirror的问题

    公司搭建的maven私服做镜像,有使用aliyun的镜像,还有其他地方的, 默认情况下配置多个mirror的情况下,只有第一个生效.那么我们可以将最后一个作为默认值,前面配置的使用环境变量动态切换. ...

  9. idm技术下载百度网盘

    原使用教程:https://www.haorenka.org/idm.html 使用idm下载器后实际下载速度,比原网盘客户端快很多 相关软件下载 参考上面的参考教程,这里只提供对应所需要的文件,有的 ...

  10. [转帖]时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入

    时序数据库技术体系 – InfluxDB TSM存储引擎之数据写入 http://hbasefly.com/2018/03/27/timeseries-database-6/  2018年3月27日  ...