【问题标题】:Anomally detection异常检测
【发布时间】:2013-10-25 07:18:06
【问题描述】:

我正在编写使用高斯分布检测异常的代码。

这是我编写的用于计算概率密度函数的代码:

function p = multivariateGaussian(X, mu, Sigma2)
%MULTIVARIATEGAUSSIAN Computes the probability density function of the
%multivariate gaussian distribution.
%    p = MULTIVARIATEGAUSSIAN(X, mu, Sigma2) Computes the probability 
%    density function of the examples X under the multivariate gaussian 
%    distribution with parameters mu and Sigma2. If Sigma2 is a matrix, it is
%    treated as the covariance matrix. If Sigma2 is a vector, it is treated
%    as the \sigma^2 values of the variances in each dimension (a diagonal
%    covariance matrix)
%

k = length(mu);

if (size(Sigma2, 2) == 1) || (size(Sigma2, 1) == 1)
    Sigma2 = diag(Sigma2);
end

X = bsxfun(@minus, X, mu(:)');
p = (2 * pi) ^ (- k / 2) * det(Sigma2) ^ (-0.5) * ...
    exp(-0.5 * sum(bsxfun(@times, X * pinv(Sigma2), X), 2));

end

我的第一个问题:有没有更快更聪明的计算方法?我在这里设置了一个带有 2 台电脑的小型 matlab 集群,但在这种情况下,我不知道如何并行化它。

我的第二个问题:在我用作训练集的其中一个矩阵是 [42712X19700],即使有 24 GB 的内存,我也会出现内存不足错误。是否可以使用诸如随机森林之类的技术(对训练集进行切片,然后合并结果?)?或者有什么其他方法可以规避这个问题?

感谢您的帮助。提前谢谢!

【问题讨论】:

  • 我没有看到任何明显的速度改进,但是当您对这种大小的矩阵进行操作时,矢量化解决方案通常会耗尽内存。逐行处理会是一个解决方案吗? (如果是这样,您也可以轻松地将其包装在 parfor 循环中以进行并行化)
  • 什么是“训练”操作?设置 mu 和 sigma?如果是这样,他们的充分统计可以累积计算
  • 我查看了用于进行 de 计算的公式,正如 Ben 所说,它是一个累积和!因此,正如丹尼斯所说,将训练集分成块并在 parfor 中计算是没有问题的!谢谢各位,问题解决了!
  • 顺便说一句,这些矩阵是稀疏的吗?在这种情况下,可以使用稀疏矩阵数据结构。
  • 不幸的是他们不是!

标签: matlab optimization machine-learning recommendation-engine


【解决方案1】:

将数据分成小块并应用 parfor 来处理每个块。这只是我对大规模处理的选择。或者您可以使用基于进程的并行化并在另一个进程正在计算另一块数据时读取一个块。

【讨论】:

    猜你喜欢
    • 2014-05-06
    • 2020-08-27
    • 2019-07-24
    • 2017-12-26
    • 2020-06-01
    • 1970-01-01
    • 2020-05-20
    • 2020-03-05
    • 2016-02-21
    相关资源
    最近更新 更多