kmo*_*ore 8 c++ statistics boost eigen
我正在努力在C++中实现多元Gaussian的概率密度函数,并且我坚持如何最好地处理维> 2的情况.
高斯的pdf可以写成

其中(A)'或''表示通过从x的所有元素中减去均值而创建的'矩阵'的转置.在该等式中,k是我们具有的维数,sigma表示协方差矩阵,其是akxk矩阵.最后,| X | 表示矩阵X的行列式.
在单变量情况下,实施pdf是微不足道的.即使在双变量(k = 2)的情况下,它也是微不足道的.但是,当我们超过两个维度时,实施起来要困难得多.
在双变量情况下,我们有

其中rho是x和y之间的相关性,相关性等于

在这种情况下,我可以使用Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic>实现第一个方程,或者只使用第二个方程自己计算所有内容,而不会受益于Eigen的简化线性代数接口.
我尝试多变量情况的想法可能首先将上述方程扩展到多变量情形

同

我的问题是:
boost::multi_array作为n维数组,或者我应该尝试利用Eigen?我有点不适应这里,但有一些想法:
\n\n首先,从编程的角度来看,常见的答案是“配置文件”。也就是说,首先以更清晰的方式对其进行编码。然后分析您的执行情况,看看优化是否值得。恕我直言,使用矩阵库来更接近原始数学可能会更清楚。
\n\n从数学角度来看:我对您为多元情况提供的公式有点怀疑。我觉得不太对劲。表达式Z应该是二次形式,而您的Z不是。除非我错过了什么。
\n\n这是您没有提到的一个选项,但可能有意义。特别是如果您要多次评估单个发行版的 PDF。首先计算分布的主成分基础。也就是说,\xce\xa3 的特征基。主成分方向是正交的。在主成分基础上,互协方差全部为0,因此PDF具有简单的形式。当您想要评估时,请将输入的基础更改为主成分基础,然后对其执行更简单的 PDF 计算。
\n\n想法是,您可以预先计算基础矩阵和主成分的变化,然后每次评估只需进行一次矩阵乘法(基础的变化),而不是评估中所需的两次矩阵(x-\xce\xbc)\' \xce\xa3 (x-\xce\xbc)乘法标准基础。