Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >c++中多元正态/高斯密度的评价

c++中多元正态/高斯密度的评价
EN

Stack Overflow用户
提问于 2017-01-08 13:28:13
回答 1查看 2.7K关注 0票数 1

现在,我有以下函数来计算高斯密度:

代码语言:javascript
运行
AI代码解释
复制
double densities::evalMultivNorm(const Eigen::VectorXd &x, const Eigen::VectorXd &meanVec, const Eigen::MatrixXd &covMat)
{
    double inv_sqrt_2pi = 0.3989422804014327;
    double quadform  = (x - meanVec).transpose() * covMat.inverse() * (x-meanVec);
    double normConst = pow(inv_sqrt_2pi, covMat.rows()) * pow(covMat.determinant(), -.5);
    return normConst * exp(-.5* quadform);
}

这只是在转录公式。但是我得到了很多0,nans和infs。我怀疑它来自covMat.determinant()部分,非常接近于零。

我听说,用x-meanVec协方差矩阵的“平方根”的逆乘积它更“稳定”。统计上,这给出了一个均值为零的随机向量,并将恒等矩阵作为它的协方差矩阵。我的问题是:

  1. 这真的是最好的方法吗?
  2. 这是“最好”的平方根技术
  3. 我该怎么做呢?(最好使用特征)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-09 05:17:34

广告1:“视情况”。例如,如果你的协方差矩阵有一个特殊的结构,使得计算它的逆很容易,或者如果维数很小,那么实际计算逆就会更快和更稳定。

广告2:通常,Cholesky分解是起作用的。如果您的协方差是真正正定的(即,不接近半定矩阵),则分解covMat = L*L^T并计算squaredNorm(L\(x-mu)) (其中x=A\b的意思是“求解A*x=b for x")。当然,如果您的协方差是固定的,那么您应该只计算一次L (也许还可以反演它)。您也应该使用L来计算sqrt(covMat.determinant()),因为否则计算行列式将需要再次分解covMat。小改进:而不是pow(inv_sqrt_2pi, covMat.rows()),计算logSqrt2Pi=log(sqrt(2*pi)),然后返回exp(-0.5*quadform - covMat.rows()*logSqrt2Pi) / L.determinant()

广告3:这应该在Eigen 3.2或更高版本中运行:

代码语言:javascript
运行
AI代码解释
复制
double foo(const Eigen::VectorXd &x, const Eigen::VectorXd &meanVec, const Eigen::MatrixXd &covMat)
{
    // avoid magic numbers in your code. Compilers will be able to compute this at compile time:
    const double logSqrt2Pi = 0.5*std::log(2*M_PI);
    typedef Eigen::LLT<Eigen::MatrixXd> Chol;
    Chol chol(covMat);
    // Handle non positive definite covariance somehow:
    if(chol.info()!=Eigen::Success) throw "decomposition failed!";
    const Chol::Traits::MatrixL& L = chol.matrixL();
    double quadform = (L.solve(x - meanVec)).squaredNorm();
    return std::exp(-x.rows()*logSqrt2Pi - 0.5*quadform) / L.determinant();
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41538095

复制
相关文章
正态性检验
在前面的文章中讲过,很多模型的假设条件都是数据是服从正态分布的。这篇文章主要讲讲如何判断数据是否符合正态分布。主要分为两种方法:描述统计方法和统计检验方法。
张俊红
2019/11/14
2K0
Mathematica 11在概率和统计方面的新功能
1 1 导读 版本 11 在概率和统计方面添加了大量改进和扩展. 从描述性统计和随机变量到时间序列和随机过程,整体框架更加强大、快速且易于使用. 2 1 案例 下面小编用Mathematica求解几个
WolframChina
2018/05/31
1.4K0
按部就班的吴恩达机器学习网课用于讨论(13)
异常检测-问题动机 为了进行数据条目的异常检测(正样本很少的二分类问题),使用密度估计的方法,在每条数据中,每个x的特征可能性为?(?)。 当模型概率?(?)累乘值小于epsilon,则认为是一条异常
嘘、小点声
2020/05/29
5560
按部就班的吴恩达机器学习网课用于讨论(13)
【温故知新】应用多元统计分析-第二章 多元正态分析及参数估计(下)
2.2
统计学家
2019/04/10
4630
【温故知新】应用多元统计分析-第二章 多元正态分析及参数估计(下)
【接上篇】关于正态化
上次提到各种正态化的方法,本来想自己有空测一测对比下,后来发现很久以前已经有人做过这样的事情了。
量化小白
2019/10/09
6460
【接上篇】关于正态化
数据正态性的检验方法
https://www.cnblogs.com/REAY/p/6709177.html
Listenlii-生物信息知识分享
2020/05/29
1.3K0
【新书推荐】《计算化学中的密度矩阵重正化群方法》
2022年8月,由南京大学马海波教授、德国慕尼黑大学Ulrich Schollwöck教授、清华大学/香港中文大学(深圳)帅志刚教授合作撰写的新书《Density Matrix Renormalization Group (DMRG)-based Approaches in Computational Chemistry》(计算化学中的密度矩阵重正化群方法)由荷兰爱思唯尔(Elsevier)出版社正式出版。
用户7592569
2022/12/07
9440
【新书推荐】《计算化学中的密度矩阵重正化群方法》
R语言多元统计包简介:各种假设检验 统计方法 聚类分析 数据处理
基本的R包已经实现了传统多元统计的很多功能,然而CRNA的许多其它包提供了更深入的多元统计方法,下面做个简要的综述。多元统计的特殊应用在CRNA的其它任务列表(task view)里也会提及,如:排序(ordination)会在Environmetrics(http://cran.r-project.org/web/views/Environmetrics.html)里说到;有监督的分类方法能在MachineLearning(http://cran.r-project.org/web/views/Machi
机器学习AI算法工程
2018/03/12
3.3K0
【视频】Copula算法原理和R语言股市收益率相依性可视化分析|附代码数据
copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。在本视频中,我们通过可视化的方式直观地介绍了Copula函数,并通过R软件应用于金融时间序列数据来理解它
拓端
2022/12/08
8090
【视频】Copula算法原理和R语言股市收益率相依性可视化分析
copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。在本视频中,我们通过可视化的方式直观地介绍了Copula函数,并通过R软件应用于金融时间序列数据来理解它。
拓端
2022/04/13
7550
【视频】Copula算法原理和R语言股市收益率相依性可视化分析
【数据挖掘】高斯混合模型 ( 模型简介 | 软聚类 | 概率作用 | 高斯分布 | 概率密度函数 | 高斯混合模型参数 | 概率密度函数 )
1 . 高斯混合模型 与 K-Means 相同点 : 高斯混合模型方法 与 K-Means 方法 , 都是通过多次迭代 , 每次迭代都对聚类结果进行改进 , 最终达到算法收敛 , 聚类分组结果达到最优 ;
韩曙亮
2023/03/27
1.7K0
【视频】Copula算法原理和R语言股市收益率相依性可视化分析|附代码数据
copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。在本视频中,我们通过可视化的方式直观地介绍了Copula函数,并通过R软件应用于金融时间序列数据来理解它(点击文末“阅读原文”获取完整代码数据)。
拓端
2022/10/28
7890
【视频】Copula算法原理和R语言股市收益率相依性可视化分析|附代码数据
copula是将多变量分布函数与其边缘分布函数耦合的函数,通常称为边缘。在本视频中,我们通过可视化的方式直观地介绍了Copula函数,并通过R软件应用于金融时间序列数据来理解它 。
拓端
2023/01/10
8990
R语言︱常用统计方法包+机器学习包(名称、简介)
版权声明:博主原创文章,微信公众号:素质云笔记,转载请注明来源“素质云博客”,谢谢合作!! https://blog.csdn.net/sinat_26917383/article/details/50651464
悟乙己
2019/05/28
4.3K0
基态-激发态电子密度差等值面绘制
基态-激发态电子密度差可以比较直观地展示体系激发后电子的流向,分析体系的电子激发属性。关于电子密度,可以参看《从密度矩阵产生自然轨道-理论篇》一文。本文以非常简单的分子甲醛为例,介绍用GaussView和Multiwfn绘制电子密度差等值面的方法。所有计算使用Gaussian 16 C.01和Multiwfn 3.8 (dev)完成,。
用户7592569
2021/05/11
2.4K0
【温故知新】应用多元统计分析 第三章 正态总体参数的假设检验
3.2-3.3
统计学家
2019/04/10
5310
【温故知新】应用多元统计分析 第三章 正态总体参数的假设检验
机器学习(二十一) ——高斯密度估计实现异常检测
机器学习(二十一)——高斯密度估计实现异常检测 (原创内容,转载请注明来源,谢谢) 一、概述 异常检测(anomalydetection),主要用于检查对于某些场景下,是否存在异常内容、异常操作、异常状态等。异常检测,用到了一个密度估计算法(density estimation)——高斯分布(Gaussian distribution),又称正态分布(normal distribution)。 该算法只用到了样本的特征值,不需要分类标签,故该算法是无监督学习算法 主要内容是,对于样本集,当有一个新的数
用户1327360
2018/03/07
4.6K0
机器学习(二十一) ——高斯密度估计实现异常检测
Matlab之正态拟合直方图绘制函数histfit
绘制 data 中的值的直方图并拟合正态密度函数,直方图的 bin 个数等于 data 中元素个数的平方根。
全栈程序员站长
2022/11/02
2.1K0
Matlab之正态拟合直方图绘制函数histfit
第十六章 异常检测
在接下来的一系列视频中,我将向大家介绍异常检测(Anomaly detection)问题。这是机器学习算法的一个常见应用。这种算法的一个有趣之处在于:它虽然主要用于非监督学习问题,但从某些角度看,它又类似于一些监督学习问题。
tomas家的小拨浪鼓
2019/03/19
8510
第十六章 异常检测
点击加载更多

相似问题

有效评价多元正态

11

C++中的多元正态密度函数

11

Python中的多元正态密度?

105

多元正态密度的曲面图

12

numpy中高斯正态多元分布中的某些概率

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文