Algoritmo

Dado um conjunto de exemplos de treino \( { x ^{(1)}, x ^{(2)}, \dots , x ^{(m)} } \) onde cada exemplo é um vetor \( x \in \mathbb{R} ^n \).

\[ \large{} p(x) = p(x _1; \mu _1 , \sigma _1 ^2) p(x _2; \mu _2 , \sigma _2 ^2) \dots p(x _n; \mu _n , \sigma _n ^2) \]

Nesse caso, os valores das probabilidades acima são multiplicados pois os valores de \( x _i \), de treino, são independentes entre si.

De outra forma, podemos escrever a expressão acima em forma de produtório, como segue:

\[ \large{} p(x) = \prod _{j=1} ^n p(x _j; \mu _j , \sigma _j ^2) \]

Com isso, podemos definir o algoritmo de detecção de anomalias através desses valores de probabilidade.

  1. Escolher os valores \( x _i \) que possam ser indicativos de exemplos de anomalia

  2. Ajustar os parâmetros \( \mu _1 , \mu _2 , \dots , \mu _n , \sigma _1 ^2 , \sigma _2 ^2 , \dots , \sigma _n ^2 \)

  3. Calcular \( \mu _j = \frac{1}{m} \sum _{i=1} ^m x _j ^{(i)} \)

  4. Calcular \( \sigma ^2 = \frac{1}{m} \sum _{i=1} ^m (x _j ^i - \mu _j) ^2 \)

  5. Dado um novo exemplo \( x \), calcular \[ \large{} p(x)= \prod _{j=1} ^n p(x _j; \mu _j , \sigma _j ^2) = \prod _{j=1} ^n \frac{1}{\sigma _j \sqrt{(2 \pi)}} e ^{- \frac{1}{2} (\frac{x _j - \mu _j}{\sigma _j}) ^2} \]

  6. Caso o valor de \( p(x) \) seja menor que \( \epsilon \), então o exemplo \( x \) é uma anomalia.