Pela definição de probabilidade condicional, temos
$$ P(X_1 = x_1, X_2 = x_2) = p(x_1, x_2) = p(x_1)p(x_2\,|\,x_1) $$
Para $\mathbf{X} = (X_1, \dots, X_n)^\top$, temos
$$ P(\mathbf{X} = \mathbf{x}) = p(\mathbf{x}) = \prod\limits_{j=1}^n p(x_j\,|\,x_1, \dots, x_{j-1}). $$
Imagine que, no seu problema, a variável $X_j$ não dependa de $X_1, \dots, X_j$, e sim de um subconjunto $\Pi_j$ dessas variáveis.
Então
$$ P(\mathbf{X} = \mathbf{x}) = p(\mathbf{x}) = \prod\limits_{j=1}^n p(x_j\,|\,\pi_j). $$
$Pi_j$ são denominados pais de $X_j$.
Um grafo direcionado é um par $G = (V, E)$ em que cada elemento de $E$ corresponde a um par ordenado de elementos de $V$.
Os elementos de $V$ são vértices e os elementos de $E$ são setas.
Um grafo direcionado acíclico (DAG) é um grafo direcionado que não contém circuitos.
Uma rede Bayesiana é uma tripla $(G, \mathbf{X}, P)$ em que
A partir de uma rede Bayesiana completamente especificada, desejamos calcular $P(\mathbf{Q}=\mathbf{q}\,|\,\mathbf{E}=\mathbf{e}) = p(\mathbf{q}\,|\,\mathbf{e})$.
Essa expressão é teoricamente possível de se obter, já que
$$ p(\mathbf{q}\,|\,\mathbf{e}) = \frac{\sum\limits_{\mathbf{z} \in \mathbf{X}\backslash{\mathbf{Q}, \mathbf{E}}} p(\mathbf{x})}{\sum\limits_{\mathbf{z} \in \mathbf{X}\backslash {\mathbf{E}}} p(\mathbf{x})}. $$
No entanto, o número de termos dessas somas cresce exponencialmente com o tamanho da rede. O problema é intratável mesmo para redes pequenas (NP-difícil).
Objetivo: obter uma estimativa eficiente que erre a inferência em no máximo $\epsilon$ com probabilidade $\delta$.
Absoluto: $\epsilon = |\hat{p} - p|$
Relativo: $\varepsilon = \frac{|\hat{p} - p|}{p}$
Como a ideia é trabalhar com redes e inferências grandes, geralmente as probabilidades a serem obtidas são pequenas. Nesses casos, o erro relativo é preferível.
Usando a lei fraca de Khintchine, podemos mostrar que
$$ M/N \overset{P}{\to} p(\mathbf{q}|\mathbf{e}) $$
Seja $\hat{p}$ uma estimativa de $p = P(\mathbf{W}=\mathbf{w})$ obtida via amostragem simples com $N$ iterações. Pela desigualdade de Hoeffding, temos que
$$ P(|\hat{p} - p| > \epsilon) \leq 2e^{-2N\epsilon^2} $$
A desigualdade sugere que o tamanho de amostra necessário para atingir um erro $\epsilon$ com probabilidade $\delta$ é
$$ N \geq \log(2/\delta) / 2\epsilon^2 $$
Para trabalhar com erros relativos, trabalhamos com outra desigualdade. Pela desigualdade de Chernoff, temos que
$$ P(\frac{|\hat{p} - p|}{p} > \epsilon) \leq 2e^{-2Np\epsilon^2/3}, $$
Nesse caso, o tamanho de amostra necessário é
$$ N \geq 3\log(2/\delta) / p\epsilon^2, $$
que depende de $p$.
Na lousa
Na lousa
Na lousa
Uma consulta que podemos fazer é $p(X_0 = TRUE|X1 = LOW)$.
A probabilidade exata dessa consulta é de 37,04%. Essa consulta é interessante pois o denominador $p(X_0 = TRUE, X1 = LOW)$ é de aproximadamente 4%, o que pode evidenciar dificuldades nos algoritmos que não funcionam bem para valores baixos de probabilidade.
Primeiramente, fizemos a consulta para uma amostra de tamanho 100, replicada quinze vezes.
library(dplyr) library(ggplot2) d <- readRDS('../data-raw/res_100_2.rds') lapply(seq_along(d), function(i) { d[[i]]$iter <- i d[[i]] }) %>% bind_rows() %>% mutate(algo = ifelse(algo == '', 'GS', algo)) %>% filter(algo != 'GS') %>% ggplot(aes(x = algo, y = r)) + geom_hline(yintercept = 0.3702, colour = 'red') + geom_hline(yintercept = c(1, 0), colour = 'black', linetype = 2) + scale_y_continuous(limits = c(0, 1)) + geom_point() + theme_bw() + xlab('Algoritmo') + ylab('Resultado')
É possível notar:
library(dplyr) library(ggplot2) d <- readRDS('../data-raw/res_1000_2.rds') lapply(seq_along(d), function(i) { d[[i]]$iter <- i d[[i]] }) %>% bind_rows() %>% mutate(algo = ifelse(algo == '', 'GS', algo)) %>% filter(algo != 'GS') %>% ggplot(aes(x = algo, y = r)) + geom_hline(yintercept = 0.3702, colour = 'red') + geom_hline(yintercept = c(1, 0), colour = 'black', linetype = 2) + scale_y_continuous(limits = c(0, 1)) + geom_point() + theme_bw() + xlab('Algoritmo') + ylab('Resultado')
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.