【问题标题】:Multivariate Gaussian distribution formula implementation多元高斯分布公式实现
【发布时间】:2014-12-24 01:31:09
【问题描述】:

我在为异常检测实现多元高斯分布时遇到了一些问题。

我参考了吴恩达笔记中的公式

http://www.holehouse.org/mlclass/15_Anomaly_Detection.html

下面是我面临的问题

假设我有一个包含 2 个特征和 m 个训练集的数据集,即 n=2,并且想要确定我的多元高斯概率 p(x;mu;sigma),它应该是一个 [m*1] 矩阵,因为它通过特征相关产生估计的高斯值。

我面临的问题是我无法使用公式来生成矩阵 [m*1]。

我使用 Octave 作为 IDE 来开发算法。

下面是展示我的问题的快照

考虑红边界方程的乘法,因为红边界的LHS只是一个实数

请帮助我了解我哪里错了

谢谢

【问题讨论】:

  • 答案很简单:m=1。从数学上讲,您一次计算一个实例。我不知道这是否适合 Matlab 的“矢量化”技巧。
  • abs(sigma)^0.5 是什么意思?为什么是实数,不是矩阵吗
  • 不是 abs() 而是 det()

标签: matlab machine-learning octave cluster-analysis gaussian


【解决方案1】:

我认为你的尺寸有误。

假设您有一个包含m 实例的二维 (n=2) 数据。我们可以在 MATLAB 中将此数据存储为n-by-m 矩阵(列是数据实例,行代表特征/维度)。在这种情况下,我们有:

  • X 大小为nxm 的数据矩阵,每个实例x = X(:,i) 是大小为nx1 的向量(我们约定中的列向量)。
  • mu 是平均向量 (mu = mean(X,2))。这也是一个与实例nx1 大小相同的列向量。
  • sigma 是协方差矩阵 (sigma = cov(X.'))。它的大小为nxn(它描述了每个维度如何与其他维度共同变化)。

所以你用红色突出显示的部分涉及以下大小的表达式:

 = ([nx1] - [nx1])' * [nxn] * ([nx1] - [nx1])
 = [1xn] * [nxn] * [nx1]
 = 1x1

【讨论】:

  • 所以你的意思是上面的维数乘法解决了一个实例,类似地,所有实例都可以独立找到,因此我们得到考虑所有实例的 [m x 1] 矩阵。
  • 是的,您为每个实例 x = X(:,i) (for i=1:m) 一次计算一个 p(x)。如果您可以访问 MATLAB 中的统计工具箱,请查看 edit mvnpdf 以了解矢量化实现
猜你喜欢
  • 2015-02-21
  • 2017-11-24
  • 2019-07-15
  • 1970-01-01
  • 2013-05-16
  • 2012-09-12
  • 2020-04-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多