Entendendo Naive Bayes

47

De StatSoft, Inc. (2013), Electronic Statistics Textbook , "Naive Bayes Classifier" :

insira a descrição da imagem aqui

Para demonstrar o conceito de Classificação Naïve Bayes, considere o exemplo exibido na ilustração acima. Conforme indicado, os objetos podem ser classificados como VERDE ou VERMELHO. Minha tarefa é classificar novos casos à medida que eles chegam, ou seja, decidir a qual rótulo de classe eles pertencem, com base nos objetos que estão saindo no momento.

Como há o dobro de objetos VERDES que o VERMELHO, é razoável acreditar que um novo caso (que ainda não tenha sido observado) tem duas vezes mais chances de ser membro de VERDE do que de VERMELHO. Na análise bayesiana, essa crença é conhecida como probabilidade anterior. As probabilidades anteriores são baseadas na experiência anterior, neste caso a porcentagem de objetos VERDE e VERMELHO, e frequentemente usadas para prever resultados antes que eles realmente ocorram.

Assim, podemos escrever:

insira a descrição da imagem aqui

Como há um total de 60 objetos, 40 dos quais são VERDES e 20 VERMELHOS, nossas probabilidades anteriores de associação à classe são:

insira a descrição da imagem aqui insira a descrição da imagem aqui

Tendo formulado nossa probabilidade anterior, agora estamos prontos para classificar um novo objeto (círculo BRANCO). Como os objetos estão bem agrupados, é razoável supor que quanto mais objetos VERDE (ou VERMELHO) estiverem próximos a X, maior a probabilidade de os novos casos pertencerem a essa cor específica. Para medir essa probabilidade, desenhamos um círculo em torno de X que engloba um número (a ser escolhido a priori) de pontos, independentemente de seus rótulos de classe. Em seguida, calculamos o número de pontos no círculo pertencentes a cada rótulo de classe. A partir disso, calculamos a probabilidade:

insira a descrição da imagem aqui

A partir da ilustração acima, é claro que a probabilidade de X dar VERDE é menor que a probabilidade de X dar VERMELHO, uma vez que o círculo abrange 1 objeto VERDE e 3 objetos VERMELHOS. Portanto:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Embora as probabilidades anteriores indiquem que X pode pertencer a VERDE (dado que há o dobro de VERDE em comparação com VERMELHO), a probabilidade indica o contrário; que a associação de classe de X é RED (dado que há mais objetos RED nas proximidades de X que GREEN). Na análise bayesiana, a classificação final é produzida pela combinação das duas fontes de informação, isto é, a anterior e a probabilidade, para formar uma probabilidade posterior usando a chamada regra de Bayes (em homenagem a Rev. Thomas Bayes 1702-1761).

insira a descrição da imagem aqui

Por fim, classificamos X como RED, pois sua associação à classe atinge a maior probabilidade posterior.

É aqui que entra a dificuldade do meu entendimento de matemática.

insira a descrição da imagem aqui

p (Cj | x1, x2, x ..., xd) é a probabilidade posterior de pertencer a uma classe, ou seja, a probabilidade de que X pertença a Cj, mas por que escrevê-lo assim?

Calculando a probabilidade?

insira a descrição da imagem aqui

Probabilidade posterior?

insira a descrição da imagem aqui

Eu nunca fiz matemática, mas meu entendimento de bayes ingênuos é bom, acho que apenas quando se trata desses métodos decompostos me confunde. Alguém poderia ajudar na visualização desses métodos e como escrever a matemática de uma maneira compreensível?

G Gr
fonte
12
(+1) Admiro a maneira realmente cuidadosa e clara com a qual você colocou sua pergunta.
Rolando2
2
@ rolando2: todas as figuras e quase todo o texto desta questão vem de statsoft.com/textbook/naive-bayes-classifier
Franck Dernoncourt
Edite esta postagem para atribuir claramente materiais de outros lugares, conforme Como fazer referência a materiais escritos por outras pessoas .
Scortchi - Restabelece Monica
A atribuição adequada de cotações diretas sempre foi um requisito nos sites do Stack Exchange. De qualquer forma, a omissão é facilmente corrigida; & Eu fiz isso. Não há necessidade de excluir sua conta - reconsidere.
Scortchi - Restabelece Monica

Respostas:

50

Vou percorrer todo o processo do Naive Bayes do zero, já que não está totalmente claro para mim onde você está sendo desligado.

Queremos encontrar a probabilidade de um novo exemplo pertencer a cada classe: ). Em seguida, calculamos essa probabilidade para cada classe e escolhemos a classe mais provável. O problema é que geralmente não temos essas probabilidades. No entanto, o Teorema de Bayes nos permite reescrever essa equação de uma forma mais tratável.P(class|feature1,feature2,...,featuren

O ponto de partida de Bayes é simplesmente ou em termos de nosso problema:

P(A|B)=P(B|A)P(A)P(B)
P(class|features)=P(features|class)P(class)P(features)

Podemos simplificar isso removendo . Podemos fazer isso porque vamos classificar para cada valor da ; será o mesmo - não depende da . Isso nos deixa com P(features)P(class|features)classP(features)class

P(class|features)P(features|class)P(class)

As probabilidades anteriores, , podem ser calculadas conforme descrito em sua pergunta.P(class)

Isso deixa . Queremos eliminar a probabilidade conjunta maciça e provavelmente muito esparsa . Se cada recurso for independente, Mesmo que não sejam realmente independentes, podemos assumir que são (esse é o " ingênuo "parte de ingênuo Bayes). Pessoalmente, acho que é mais fácil pensar nisso para variáveis ​​discretas (ou seja, categóricas), então vamos usar uma versão ligeiramente diferente do seu exemplo. Aqui, dividi cada dimensão do recurso em duas variáveis ​​categóricas.P(features|class)P(feature1,feature2,...,featuren|class)

P(feature1,feature2,...,featuren|class)=iP(featurei|class)

Dados de exemplo discreto.

Exemplo: Treinando o classifer

Para treinar o classificador, contamos vários subconjuntos de pontos e os usamos para calcular as probabilidades anteriores e condicionais.

Os anteriores são triviais: existem sessenta pontos no total, quarenta são verdes e vinte são vermelhos. Assim,

P(class=green)=4060=2/3 and P(class=red)=2060=1/3

Em seguida, temos que calcular as probabilidades condicionais de cada valor de recurso, dada uma classe. Aqui, existem dois recursos: e , cada um com um de dois valores (A ou B para um, X ou Y para o outro). Portanto, precisamos saber o seguinte:feature1feature2

  • P(feature1=A|class=red)
  • P(feature1=B|class=red)
  • P(feature1=A|class=green)
  • P(feature1=B|class=green)
  • P(feature2=X|class=red)
  • P(feature2=Y|class=red)
  • P(feature2=X|class=green)
  • P(feature2=Y|class=green)
  • (caso isso não seja óbvio, são todos os pares possíveis de valor e classe de recurso)

Estes são fáceis de calcular contando e dividindo também. Por exemplo, para , examinamos apenas os pontos vermelhos e contamos quantos deles estão na região 'A' para o . Existem vinte pontos vermelhos, todos na região 'A', então . Nenhum dos pontos vermelhos está na região B, então . Em seguida, fazemos o mesmo, mas consideramos apenas os pontos verdes. Isso nos dá e . Repetimos esse processo para o , para arredondar a tabela de probabilidades. Supondo que contei corretamente, obtemosP(feature1=A|class=red)feature1P(feature1=A|class=red)=20/20=1P(feature1|class=red)=0/20=0P(feature1=A|class=green)=5/40=1/8P(feature1=B|class=green)=35/40=7/8feature2

  • P(feature1=A|class=red)=1
  • P(feature1=B|class=red)=0
  • P(feature1=A|class=green)=1/8
  • P(feature1=B|class=green)=7/8
  • P(feature2=X|class=red)=3/10
  • P(feature2=Y|class=red)=7/10
  • P(feature2=X|class=green)=8/10
  • P(feature2=Y|class=green)=2/10

Essas dez probabilidades (os dois anteriores e as oito condicionais) são o nosso modelo

Classificando um novo exemplo

Vamos classificar o ponto branco do seu exemplo. Está na região "A" para o e na região "Y" para o . Queremos encontrar a probabilidade de que esteja em cada classe. Vamos começar com vermelho. Usando a fórmula anterior, sabemos que: Subbing nas probabilidades da tabela, obtemosfeature1feature2

P(class=red|example)P(class=red)P(feature1=A|class=red)P(feature2=Y|class=red)

P(class=red|example)131710=730
Em seguida, fazemos o mesmo com o verde:
P(class=green|example)P(class=green)P(feature1=A|class=green)P(feature2=Y|class=green)

Sub-agrupar esses valores nos leva a 0 ( ). Finalmente, procuramos ver qual classe nos deu a maior probabilidade. Nesse caso, é claramente a classe vermelha, então é aí que atribuímos o ponto.2/302/10

Notas

No seu exemplo original, os recursos são contínuos. Nesse caso, você precisa encontrar uma maneira de atribuir P ​​(recurso = valor | classe) a cada classe. Você pode considerar ajustar-se a uma distribuição de probabilidade conhecida (por exemplo, um gaussiano). Durante o treinamento, você encontrará a média e a variação de cada classe ao longo de cada dimensão de recurso. Para classificar um ponto, você encontra inserindo a média e a variação apropriadas para cada classe. Outras distribuições podem ser mais apropriadas, dependendo dos detalhes de seus dados, mas um gaussiano seria um ponto de partida decente.P(feature=value|class)

Não estou muito familiarizado com o conjunto de dados DARPA, mas você faria essencialmente a mesma coisa. Você provavelmente acabará computando algo como P (ataque = VERDADEIRO | serviço = dedo), P (ataque = falso | serviço = dedo), P (ataque = VERDADEIRO | serviço = ftp), etc. e depois combiná-los no mesma maneira que o exemplo. Como uma observação lateral, parte do truque aqui é apresentar bons recursos. O IP de origem, por exemplo, provavelmente será irremediavelmente escasso - você provavelmente terá apenas um ou dois exemplos para um determinado IP. Você pode fazer muito melhor se você geolocalizou o IP e usa "Source_in_same_building_as_dest (true / false)" ou algo como um recurso.

Espero que ajude mais. Se alguma coisa precisar de esclarecimentos, ficarei feliz em tentar novamente!

Matt Krause
fonte
3
Certo. Se estiver tudo bem com você, vou editar minha resposta, para que haja mais espaço (e eu possa fazer coisas com o LaTex).
Matt Krause
1
Ampliei as peças de treinamento e teste e as transformei em sua própria seção. Os primeiros parágrafos casal são as mesmas ...
Matt Krause
2
Matt, isso é muito mais claro do que qualquer definição de livro de texto de Naive Bayes que me deparei. Esta é provavelmente a melhor resposta para qualquer pergunta que eu tenha visto até agora neste site.
Zhubarb
@Berkan, obrigado; é muito gentil da sua parte (embora haja muitas outras ótimas respostas também!) Se você tiver alguma sugestão, ficarei feliz em tentar resolvê-las!
Matt Krause
+ 1 e stackoverflow.com/questions/10059594/... onde existe uma explicação semelhante
Drey
6

Simplificando a notação com denotando os dados, queremos descobrir qual dos vários é o maior. Agora, a fórmula de Bayes fornece onde o denominador no certo é o mesmo para todos . Se quisermos descobrir qual de , é o maior, podemos, é claro, calcular cada e comparar os valores. Mas observe que as comparações não são realmente afetadas pelo valor de que é o mesmo em todos os casos. Poderíamos igualmente calcular todos osDP(CjD)

P(CjD)=P(DCj)P(Cj)P(D), j=1,2,
jP(C1D)P(C2D),P(CjD)P(D)P(DCj)P(Cj) e compare (ou seja, sem se preocupar em dividir cada por antes das comparações), e o mesmo será escolhido como tendo a maior probabilidade posterior. Em outras , a probabilidade posterior é proporcional à probabilidade vezes a probabilidade anterior Finalmente, quando os dados são uma coleção de observações independentes (condicionalmente) dadas , temos que P(DCj)P(Cj)P(D)CjP(CjD)P(DCj) P(Cj)
P(CjD)P(DCj)P(Cj).
DC j ) P ( D C j )(x1,x2,,xd)Cj)
P(DCj)=P(x1,x2,,xdCj)=P(x1Cj)P(x2Cj)P(xdCj)=1=1dP(xiCj)
Dilip Sarwate
fonte
1

A principal suposição por trás do modelo ingênuo de bayes é que cada recurso (x_i) é condicionalmente independente de todos os outros recursos, dada a classe. Essa suposição é o que nos permite escrever a probabilidade como um produto simples (como você mostrou).

É também isso que ajuda o modelo ingênuo de bayes a generalizar bem na prática. Considere a fase de treinamento: se não fizermos essa suposição, o aprendizado envolveria a estimativa de uma distribuição complicada e de alta dimensão: p (x1, x2, ..., xn, c) na qual todos os recursos são distribuídos em conjunto. Em vez disso, podemos treinar estimando p (x1, c), p (x2, c), ..., p (xn, c), pois, sabendo o valor c, torna irrelevantes os valores de todos os outros recursos (eles fornecem nenhuma informação adicional sobre x_i).

Não conheço uma boa maneira de visualizar isso (além da notação do modelo gráfico padrão), mas para torná-lo mais concreto, você pode escrever algum código para aprender um modelo do Naive bayes ( você pode pegar alguns dados de exemplo aqui ). Treine e teste. Agora descarte a suposição de independência condicional e modifique o código. Treine, teste e compare com o modelo anterior.

usuario
fonte