Pergunta

Estou trabalhando na implementação de um classificador ingênuo de Bayes. Inteligência coletiva de programação apresenta esse assunto descrevendo o teorema de Bayes como:

Pr(A | B) = Pr(B | A) x Pr(A)/Pr(B)

Bem como um exemplo específico relevante para a classificação de documentos:

Pr(Category | Document) = Pr(Document | Category) x Pr(Category) / Pr(Document)

Eu esperava que alguém pudesse me explicar a notação usada aqui, o que fazer Pr(A | B) e Pr(A) significa? Parece algum tipo de função, mas então o que o tubo ("|") Mean, etc?

Foi útil?

Solução

  • Pr (a | b) = probabilidade de um acontecimento, dado que B já aconteceu
  • Pr (a) = probabilidade de um acontecimento

Mas o exposto acima é com relação ao cálculo da probabilidade condicional. O que você deseja é um classificador, que usa esse princípio para decidir se algo pertence a uma categoria com base na probabilidade anterior.

Ver http://en.wikipedia.org/wiki/naive_bayes_classifier Para um exemplo completo

Outras dicas

Eu acho que eles têm você coberto no básico.

Pr(A | B) = Pr(B | A) x Pr(A)/Pr(B)

Leia: A probabilidade de um dado B é a mesma que a probabilidade de B dada uma vez a probabilidade de um dividido pela probabilidade de B. geralmente é usado quando você pode medir a probabilidade de B e você está tentando descobrir se B está nos levando a acreditar em A. ou, em outras palavras, realmente nos preocupamos com A, mas podemos medir B mais diretamente, então vamos começar com o que podemos medir.

Deixe -me dar uma derivação que facilita a redação do código. Vem de Judéia Pearl. Eu lutei um pouco com isso, mas depois que percebi como Pearl nos ajuda a transformar a teoria em código, a luz acendeu para mim.

Chances anteriores:

O(H) = P(H) / 1 - P(H)

Proporção de verossimilhança:

L(e|H) = P(e|H) / P(e|¬H)

Chances posteriores:

O(H|e) = L(e|H)O(H)

Em inglês, estamos dizendo que as chances de algo em que você está interessado (H para hipótese) são simplesmente o número de vezes que você encontra algo para ser verdadeiro dividido pelos momentos em que acha que não é verdade. Então, diga que uma casa é roubada todos os dias em 10.000. Isso significa que você tem uma chance de 1/10.000 de ser roubada, sem que nenhuma outra evidência seja considerada.

O próximo é medir as evidências que você está olhando. Qual é a probabilidade de ver a evidência que você está vendo quando sua pergunta é verdadeira dividida pela probabilidade de ver a evidência que você está vendo quando sua pergunta não é verdadeira. Digamos que você esteja ouvindo seu alarme de ladrão disparar. Com que frequência você ganha esse alarme quando ele deve sair (alguém abre uma janela quando o alarme está ligado) versus quando ele não deve disparar (o vento define o alarme). Se você tiver 95% de chance de um assalto acionar o alarme e uma chance de 1% de algo mais desencadear o alarme, terá uma probabilidade de 95,0.

Sua crença geral é apenas a probabilidade * as probabilidades anteriores. Nesse caso, é:

((0.95/0.01) * ((10**-4)/(1 - (10**-4))))
# => 0.0095009500950095

Não sei se isso deixa mais claro, mas tende a ser mais fácil ter algum código que acompanha as probabilidades anteriores, outro código para analisar as probabilidades e mais uma parte do código para combinar essas informações.

Eu o implementei em Python. É muito fácil de entender, porque todas as fórmulas para o teorema de Bayes estão em funções separadas:

#Bayes Theorem

def get_outcomes(sample_space, f_name='', e_name=''):
    outcomes = 0
    for e_k, e_v in sample_space.items():
        if f_name=='' or f_name==e_k:
            for se_k, se_v in e_v.items():
                if e_name!='' and se_k == e_name:
                    outcomes+=se_v
                elif e_name=='':
                    outcomes+=se_v
    return outcomes

def p(sample_space, f_name):
    return get_outcomes(sample_space, f_name) / get_outcomes(sample_space, '', '')

def p_inters(sample_space, f_name, e_name):
    return get_outcomes(sample_space, f_name, e_name) / get_outcomes(sample_space, '', '')

def p_conditional(sample_space, f_name, e_name):
    return p_inters(sample_space, f_name, e_name) / p(sample_space, f_name)

def bayes(sample_space, f, given_e):
    sum = 0;
    for e_k, e_v in sample_space.items():
        sum+=p(sample_space, e_k) * p_conditional(sample_space, e_k, given_e)
    return p(sample_space, f) * p_conditional(sample_space, f, given_e) / sum

sample_space = {'UK':{'Boy':10, 'Girl':20},
                'FR':{'Boy':10, 'Girl':10},
                'CA':{'Boy':10, 'Girl':30}}

print('Probability of being from FR:', p(sample_space, 'FR'))
print('Probability to be French Boy:', p_inters(sample_space, 'FR', 'Boy'))
print('Probability of being a Boy given a person is from FR:', p_conditional(sample_space, 'FR', 'Boy'))
print('Probability to be from France given person is Boy:', bayes(sample_space, 'FR', 'Boy'))

sample_space = {'Grow' :{'Up':160, 'Down':40},
                'Slows':{'Up':30, 'Down':70}}

print('Probability economy is growing when stock is Up:', bayes(sample_space, 'Grow', 'Up'))

Pr (a | B): Probabilidade condicional de A: isto é, probabilidade de A, dado que tudo o que sabemos é B

Pr (a): probabilidade prévia de um

PR é a probabilidade, PR (a | B) é a probabilidade condicional.

Verifique a Wikipedia para obter detalhes.

O tubo (|) significa "dado". A probabilidade de um dado B é igual à probabilidade de b dado um x pr (a)/pr (b)

Com base em sua pergunta, posso aconselhar fortemente que você precisa ler primeiro um livro de graduação sobre teoria de probabilidade. Sem isso, você não avançará corretamente com sua tarefa no classificador ingênuo de Bayes.

Eu recomendaria este livro http://www.athenasc.com/probbook.html ou olhe para MIT OpenCourseware.

O tubo é usado para representar a probabilidade condicional. Pr (a | b) = probabilidade de um dado b

Exemplo: digamos que você não esteja se sentindo bem e você navegue na Web para os sintomas. E a Internet diz que, se você tiver esses sintomas, terá doença XYZ.

Nesse caso: PR (a | B) é o que você está tentando descobrir, como é: a probabilidade de você ter XYZ, uma vez que tem certos sintomas.

Pr (a) é a probabilidade de ter a doença xyz

Pr (b) é a probabilidade de ter esses sintomas

PR (B | A) é o que você descobre na Internet, que é: a probabilidade de ter os sintomas, uma vez que você tem a doença.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top