异常检测

时间:2013-10-25 07:18:07

标签: matlab optimization machine-learning recommendation-engine

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

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

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

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

我的第二个问题:在我使用的一个矩阵中,作为训练集是[42712X19700],即使有24 gb的ram,我也会出现内存错误。是否可以使用像随机森林这样的技术(切割训练集,然后结合de结果?)?还是以其他方式来规避这个问题?

我感谢任何帮助。提前Tks!

1 个答案:

答案 0 :(得分:0)

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