1

Я пишу код для обнаружения аномалий с использованием распределения Гаусса.Аномальное обнаружение

Это код, который я написал для вычисления функции плотности вероятности:

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 

Мой первый вопрос: есть ли fastter и умный способ вычислить это? У меня есть небольшой кластер matlab, настроенный здесь с 2 шт., Но в этом случае я не знаю, как распараллелить это.

Мой второй вопрос: В одной из матриц, которые я использую в качестве обучающего набора, [42712X19700], даже имея 24 ГБ RAM, им не хватает ошибки памяти. Можно ли использовать такую ​​технику, как случайный лес (нарезать набор для тренировки, а затем объединить результаты?)? Или любой другой способ обойти эту проблему?

Я ценю любую помощь. Tks заранее!

+0

Я не вижу каких-либо очевидных улучшений скорости, однако довольно часто для векторизованных решений выдувается из плунжера при работе с матрицами такого размера. Будет ли обработка строк за строкой быть решением? (Если это так, вы также можете легко обернуть его в цикле 'parfor' для распараллеливания) –

+0

что такое« тренировка »? Установка mu и sigma? Если это так, их достаточная статистика может быть рассчитана кумулятивно –

+0

Я рассмотрел формулы, используемые для расчета, и, как сказал Бен, является суммарной суммой! Таким образом, не будет проблемой разделить тренировочный набор в кусках и рассчитать в парфоре, как сказал Деннис! Ребята, ребята, проблема решена! –

ответ

0

Разделите данные на небольшие куски и примените пар для обработки каждого фрагмента. Это просто мой выбор для крупномасштабной обработки. Или вы можете использовать распараллеливание на основе процессов и прочитать один фрагмент, поскольку другой процесс вычисляет другой фрагмент данных.

Смежные вопросы