我自己用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. 谷歌官方 构建您的第一个应用 Kotlin版

    https://developer.android.google.cn/training/basics/firstapp MainActivity.kt package com.example.myf ...

  2. mysql 安装参考

    https://blog.csdn.net/qq_38756992/article/details/84929787 https://www.cnblogs.com/joyny/p/10991194. ...

  3. 实战一:LoadRunner性能测试利器

    转自:https://blog.csdn.net/weixin_42350428/article/details/82106603 企业的网络应用环境都必须支持大量用户,网络体系架构中含各类应用环境且 ...

  4. 我是如何同时拿到阿里和腾讯offer的 【转载】

    前言 三月真是一个忙碌的季节,刚刚开学就需要准备各种面试和笔试(鄙视).幸运的是,在长达一个月的面试内推季之后,终于同时拿到了阿里和腾讯的offer,还是挺开心的.突而想起久未更新的博客,就冒昧学一学 ...

  5. 0.9.0.RELEASE版本的spring cloud alibaba sentinel+gateway网关实例

    sentinel除了让服务提供方.消费方用之外,网关也能用它来限流.我们基于上次整的网关(参见0.9.0.RELEASE版本的spring cloud alibaba nacos+gateway网关实 ...

  6. VMware 快速克隆出多个 Linux centos7 环境

    这样一台系统就已经克隆好了,但是,现在还没有完,因为是克隆的,里面的ip地址和创建的主机名都是一样,需要进行修改 登录服务器,然后使用 [ifcfg-ens33需根据实际情况而定] vi /etc/s ...

  7. LODOP注册语句相关简短问答

    注册和角色相关博文:LODOP.C-LODOP注册号的区别.Lodop客户端本地角色注册号常见误区.Lodop.c-lodop注册与角色简短问答.LODOP和C-LODOP注册与角色等简短问答[增强版 ...

  8. JS的正则表达式限定开始和结尾等测试

    []:匹配该区间内人任意一个字符^:匹配以某内容开头的$:匹配以模拟内容结尾的字符\w:测试是英文字母,数字,下划线.{}:设置区间,可出现几次到几次该文学习和测试几个正则的方法,测试结果如图,不加多 ...

  9. 【转】行内元素和inline-block产生的水平空隙bug

    重构工程师们在设计代码时,有喜欢手动删除行内元素之间产生的额外空隙,并通过设置margin或padding来获取想要间距吗?如代码: <div class=“”><span clas ...

  10. iOS-关于创建真机调试证书(发布证书,测试证书,推送调试证书)【转】