首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常检测

异常检测
EN

Stack Overflow用户
提问于 2013-10-25 15:18:07
回答 1查看 131关注 0票数 1

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

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

代码语言:javascript
复制
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

我的第一个问题是:有没有更快更聪明的方法来计算它?我在这里用两台pcs设置了一个小的matlab集群,但在这种情况下,我不知道如何将其并行化。

我的第二个问题:在我用作训练集的一个矩阵中是42712X19700,即使有24 gb的ram,im也会出现内存不足错误。是否可以使用像随机森林这样的技术(对训练集进行切片,然后合并de结果?)?或者任何其他方法来规避这个问题?

我很感谢你的帮助。提前Tks!

EN

回答 1

Stack Overflow用户

发布于 2013-11-10 10:45:25

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19583489

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档