Uma explicação simples da Classificação Naive Bayes

547

Estou achando difícil entender o processo de Naive Bayes e queria saber se alguém poderia explicá-lo com um simples processo passo a passo em inglês. Entendo que são necessárias comparações entre os tempos ocorridos como uma probabilidade, mas não tenho idéia de como os dados de treinamento estão relacionados ao conjunto de dados real.

Por favor, explique-me qual o papel do conjunto de treinamento. Estou dando um exemplo muito simples para frutas aqui, como banana por exemplo

training set---
round-red
round-orange
oblong-yellow
round-red

dataset----
round-red
round-orange
round-red
round-orange
oblong-yellow
round-red
round-orange
oblong-yellow
oblong-yellow
round-red
Jaggerjack
fonte
18
É bem fácil se você entender o teorema de Bayes. Se você ainda não leu o teorema de Bayes, tente este link yudkowsky.net/rational/bayes .
Aperte
1
por favor, explique seu exemplo. para a primeira linha do seu conjunto de treinamento: a rodada é classificada como vermelha ou as variáveis ​​redonda e vermelha são classificadas como outra coisa? se for o último, quais são as classificações para cada entrada no seu conjunto de treinamento?
K Mehta
22
NOTA: A resposta aceita abaixo não é um exemplo tradicional para Naïve Bayes. É principalmente uma implementação do vizinho mais próximo. Leia em conformidade.
chmullig
1
@ Jaggerjack: A resposta de RamNarasimhan é bem explicada do que a resposta aceita.
Unmesha SreeVeni
2
Bem, se alguém vê um gráfico com alguns pontos que realmente não significa que é KNN :) Como você calcula as probabilidades, tudo depende de você. Naive Bayes calcula-o usando o valor multiplicado por probabilidade, de modo que Yavar mostrou em sua resposta. Como chegar a essas probabilidades não é realmente importante aqui. A resposta está absolutamente correta e não vejo problemas nela.
xá avinash

Respostas:

672

Sua pergunta, como eu a entendo, está dividida em duas partes, sendo a primeira parte que você precisa entender melhor o classificador Naive Bayes e a segunda parte, a confusão em torno do conjunto de treinamento.

Em geral, todos os algoritmos de aprendizado de máquina precisam ser treinados para tarefas de aprendizado supervisionado, como classificação, previsão, etc. ou para tarefas de aprendizado não supervisionado, como agrupamento.

Durante a etapa de treinamento, os algoritmos são ensinados com um conjunto de dados de entrada específico (conjunto de treinamento) para que mais tarde possamos testá-los para entradas desconhecidas (que nunca haviam visto antes) para as quais possam classificar ou prever etc. (no caso de supervisão aprendizagem) com base na sua aprendizagem. É nisso que a maioria das técnicas de Aprendizado de Máquina, como Redes Neurais, SVM, Bayesiana etc., são baseadas.

Portanto, em um projeto geral de aprendizado de máquina, basicamente, você deve dividir seu conjunto de entradas em um conjunto de desenvolvimento (conjunto de treinamento + conjunto de teste de desenvolvimento) e um conjunto de teste (ou conjunto de avaliação). Lembre-se de que seu objetivo básico é que seu sistema aprenda e classifique novas entradas que elas nunca viram antes no conjunto de desenvolvimento ou no conjunto de teste.

O conjunto de testes normalmente tem o mesmo formato que o conjunto de treinamento. No entanto, é muito importante que o conjunto de testes seja distinto do corpus de treinamento: se simplesmente reutilizássemos o conjunto de treinamento como conjunto de testes, um modelo que simplesmente memorizasse sua entrada, sem aprender a generalizar para novos exemplos, seria enganoso. notas altas.

Em geral, por exemplo, 70% dos nossos dados podem ser usados ​​como casos de conjuntos de treinamento. Lembre-se também de particionar o conjunto original nos conjuntos de treinamento e teste aleatoriamente .

Agora chego à sua outra pergunta sobre Naive Bayes.

Para demonstrar o conceito de Classificação Naïve Bayes, considere o exemplo abaixo:

insira a descrição da imagem aqui

Conforme indicado, os objetos podem ser classificados como GREENou RED. Nossa tarefa é classificar novos casos à medida que eles chegam, ou seja, decidir a qual rótulo de classe eles pertencem, com base nos objetos existentes no momento.

Como há o dobro de GREENobjetos RED, é razoável acreditar que um novo caso (que ainda não foi observado) tem duas vezes mais chances de ser membro GREENdo que RED. 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 GREENe REDobjetos, e geralmente são usadas para prever resultados antes que eles realmente ocorram.

Assim, podemos escrever:

Probabilidade prévia deGREEN :number of GREEN objects / total number of objects

Probabilidade prévia deRED :number of RED objects / total number of objects

Como existe um total de 60objetos, 40dos quais GREEN20 são RED, nossas probabilidades anteriores de associação à classe são:

Probabilidade anterior paraGREEN :40 / 60

Probabilidade anterior paraRED :20 / 60

Tendo formulado nossa probabilidade anterior, agora estamos prontos para classificar um novo objeto ( WHITEcircule no diagrama abaixo). Como os objetos estão bem agrupados, é razoável supor que quanto mais GREEN(ou RED) objetos estiverem nas proximidades de X, maior a probabilidade de que os novos casos pertençam 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

insira a descrição da imagem aqui

A partir da ilustração acima, fica claro que Probabilidade de Xdado GREENé menor que Probabilidade de Xdado RED, uma vez que o círculo abrange 1 GREENobjeto e 3 REDuns. Portanto:

insira a descrição da imagem aqui

insira a descrição da imagem aqui

Embora as probabilidades anteriores indiquem que Xpodem pertencer a GREEN(dado que há o dobro em GREENcomparação com RED), a probabilidade indica o contrário; que a associação de classe Xé RED(dado que há mais REDobjetos nas proximidades de Xque GREEN). Na análise bayesiana, a classificação final é produzida pela combinação de ambas as 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 REDuma vez que sua associação à classe atinge a maior probabilidade posterior.

Yavar
fonte
39
esse algoritmo não está mais parecido com os vizinhos k-mais próximos?
amigos estão
251
Essa resposta é confusa - ela mistura KNN (k vizinhos mais próximos) e bayes ingênuos.
Michal Illich
7
A resposta estava indo bem até que a probabilidade surgisse. Portanto, o @Yavar usou os vizinhos K-mais próximos para calcular a probabilidade. Quão correto é isso? Se for, quais são outros métodos para calcular a probabilidade?
Wrahool 31/01
1
Você usou um círculo como um exemplo de probabilidade. Eu li sobre bayes ingênuos gaussianos, onde a probabilidade é gaussiana. Como isso pode ser explicado?
Umair durrani
1
Na verdade, a resposta com knn está correta. Se você não conhece a distribuição e, portanto, a densidade de probabilidade dessa distribuição, é necessário encontrá-la de alguma forma. Isso pode ser feito via kNN ou Kernels. Eu acho que algumas coisas estão faltando. Você pode conferir esta apresentação .
CS
1053

Percebo que essa é uma pergunta antiga, com uma resposta estabelecida. A razão pela qual estou postando é que a resposta aceita tem muitos elementos de k-NN ( k- vizinhos mais próximos), um algoritmo diferente.

O k-NN e o NaiveBayes são algoritmos de classificação. Conceitualmente, o k-NN usa a idéia de "proximidade" para classificar novas entidades. No k-NN, a "proximidade" é modelada com idéias como Distância Euclidiana ou Distância Cosseno. Por outro lado, no NaiveBayes, o conceito de 'probabilidade' é usado para classificar novas entidades.

Como a pergunta é sobre Naive Bayes, eis como eu descreveria as idéias e as etapas para alguém. Vou tentar fazê-lo com o mínimo de equações e em inglês simples, tanto quanto possível.

Primeiro, Probabilidade Condicional e Regra de Bayes

Antes que alguém possa entender e apreciar as nuances dos de Naive Bayes, eles precisam conhecer primeiro alguns conceitos relacionados, a saber, a idéia de Probabilidade Condicional e a Regra de Bayes. (Se você estiver familiarizado com esses conceitos, vá para a seção intitulada Como chegar a Naive Bayes ' )

Probabilidade condicional em inglês simples: qual é a probabilidade de que algo aconteça, considerando que algo já aconteceu.

Digamos que há algum resultado O. e alguma evidência de E. A partir da forma como estas probabilidades são definidas: a probabilidade de ter tanto o O Resultado e Evidência E é: (A probabilidade de ocorrência ó) multiplicado pela (Prob de E dado que O aconteceu)

Um exemplo para entender a probabilidade condicional:

Digamos que temos uma coleção de senadores dos EUA. Os senadores podem ser democratas ou republicanos. Eles também são homens ou mulheres.

Se selecionarmos um senador completamente aleatoriamente, qual é a probabilidade de que essa pessoa seja democrata? A probabilidade condicional pode nos ajudar a responder a isso.

Probabilidade de (democrata e senadora) = Prob (senador é democrata) multiplicado pela probabilidade condicional de ser mulher, uma vez que são democratas.

  P(Democrat & Female) = P(Democrat) * P(Female | Democrat) 

Poderíamos calcular exatamente a mesma coisa, no sentido inverso:

  P(Democrat & Female) = P(Female) * P(Democrat | Female) 

Regra de Bayes

Conceitualmente, esse é um caminho para ir de P (Evidence | Known Outcome) para P (Outcome | Known Evidence). Frequentemente, sabemos com que frequência algumas evidências particulares são observadas, dado um resultado conhecido . Temos que usar esse fato conhecido para calcular o inverso, para calcular a chance desse resultado acontecer , com base nas evidências.

P (resultado dado que conhecemos alguma evidência) = P (evidência desde que conhecemos o resultado) vezes Prob (resultado), escalonado pelo P (evidência)

O exemplo clássico para entender a Regra de Bayes:

Probability of Disease D given Test-positive = 

               Prob(Test is positive|Disease) * P(Disease)
     _______________________________________________________________
     (scaled by) Prob(Testing Positive, with or without the disease)

Agora, tudo isso era apenas preâmbulo, para chegar a Naive Bayes.

Chegando a Naive Bayes '

Até agora, falamos apenas de uma evidência. Na realidade, temos que prever um resultado, com múltiplas evidências. Nesse caso, a matemática fica muito complicada. Para contornar essa complicação, uma abordagem é 'desacoplar' várias evidências e tratar cada uma delas como independente. Essa abordagem é a razão pela qual isso é chamado de ingênuo Bayes.

P(Outcome|Multiple Evidence) = 
P(Evidence1|Outcome) * P(Evidence2|outcome) * ... * P(EvidenceN|outcome) * P(Outcome)
scaled by P(Multiple Evidence)

Muitas pessoas optam por se lembrar disso como:

                      P(Likelihood of Evidence) * Prior prob of outcome
P(outcome|evidence) = _________________________________________________
                                         P(Evidence)

Observe algumas coisas sobre esta equação:

  • Se o Prob (evidência | resultado) for 1, estaremos apenas multiplicando por 1.
  • Se o Prob (alguma evidência específica | resultado) for 0, então o prob inteiro. se torna 0. Se você vir evidências contraditórias, podemos excluir esse resultado.
  • Como dividimos tudo por P (Evidence), podemos até fugir sem calculá-lo.
  • A intuição por trás da multiplicação pelo anterior é para que damos alta probabilidade a resultados mais comuns e baixas probabilidades a resultados improváveis. Eles também são chamados base ratese são uma maneira de escalar nossas probabilidades previstas.

Como aplicar o NaiveBayes para prever um resultado?

Basta executar a fórmula acima para cada resultado possível. Como estamos tentando classificar , cada resultado é chamado de classe ele tem um. class label.Nosso trabalho é examinar as evidências, considerar a probabilidade de ser essa classe ou essa classe e atribuir um rótulo a cada entidade. Novamente, adotamos uma abordagem muito simples: a classe que tem a maior probabilidade é declarada a "vencedora" e esse rótulo de classe é atribuído a essa combinação de evidências.

Exemplo de frutas

Vamos tentar um exemplo para aumentar nossa compreensão: O OP pediu um exemplo de identificação de 'frutas'.

Digamos que temos dados sobre 1000 pedaços de frutas. Eles são banana , laranja ou alguma outra fruta . Conhecemos 3 características de cada fruta:

  1. Se é longo
  2. Se é doce e
  3. Se a sua cor é amarela.

Este é o nosso 'conjunto de treinamento'. Usaremos isso para prever o tipo de qualquer nova fruta que encontrarmos.

Type           Long | Not Long || Sweet | Not Sweet || Yellow |Not Yellow|Total
             ___________________________________________________________________
Banana      |  400  |    100   || 350   |    150    ||  450   |  50      |  500
Orange      |    0  |    300   || 150   |    150    ||  300   |   0      |  300
Other Fruit |  100  |    100   || 150   |     50    ||   50   | 150      |  200
            ____________________________________________________________________
Total       |  500  |    500   || 650   |    350    ||  800   | 200      | 1000
             ___________________________________________________________________

Podemos pré-calcular muitas coisas sobre a nossa coleção de frutas.

As chamadas probabilidades "anteriores". (Se não conhecêssemos nenhum dos atributos das frutas, este seria o nosso palpite.) Estes são os nossosbase rates.

 P(Banana)      = 0.5 (500/1000)
 P(Orange)      = 0.3
 P(Other Fruit) = 0.2

Probabilidade de "evidência"

p(Long)   = 0.5
P(Sweet)  = 0.65
P(Yellow) = 0.8

Probabilidade de "Probabilidade"

P(Long|Banana) = 0.8
P(Long|Orange) = 0  [Oranges are never long in all the fruit we have seen.]
 ....

P(Yellow|Other Fruit)     =  50/200 = 0.25
P(Not Yellow|Other Fruit) = 0.75

Dada uma fruta, como classificá-la?

Digamos que recebemos as propriedades de uma fruta desconhecida e pedimos para classificá-la. Dizem-nos que a fruta é longa, doce e amarela. É uma banana? É uma laranja? Ou é alguma outra fruta?

Podemos simplesmente executar os números para cada um dos três resultados, um por um. Em seguida, escolhemos a maior probabilidade e 'classificamos' nossos frutos desconhecidos como pertencentes à classe que teve a maior probabilidade com base em nossas evidências anteriores (nosso conjunto de treinamento de 1000 frutos):

P(Banana|Long, Sweet and Yellow) 
      P(Long|Banana) * P(Sweet|Banana) * P(Yellow|Banana) * P(banana)
    = _______________________________________________________________
                      P(Long) * P(Sweet) * P(Yellow)

    = 0.8 * 0.7 * 0.9 * 0.5 / P(evidence)

    = 0.252 / P(evidence)


P(Orange|Long, Sweet and Yellow) = 0


P(Other Fruit|Long, Sweet and Yellow)
      P(Long|Other fruit) * P(Sweet|Other fruit) * P(Yellow|Other fruit) * P(Other Fruit)
    = ____________________________________________________________________________________
                                          P(evidence)

    = (100/200 * 150/200 * 50/200 * 200/1000) / P(evidence)

    = 0.01875 / P(evidence)

Por uma margem esmagadora (0.252 >> 0.01875 ), classificamos esta fruta Doce / Longa / Amarela como provável que seja uma Banana.

Por que o Bayes Classifier é tão popular?

Olhe para o que eventualmente se resume. Apenas algumas contagens e multiplicações. Podemos pré-calcular todos esses termos e, assim, a classificação se torna fácil, rápida e eficiente.

Let z = 1 / P(evidence). Agora, calculamos rapidamente as três quantidades seguintes.

P(Banana|evidence) = z * Prob(Banana) * Prob(Evidence1|Banana) * Prob(Evidence2|Banana) ...
P(Orange|Evidence) = z * Prob(Orange) * Prob(Evidence1|Orange) * Prob(Evidence2|Orange) ...
P(Other|Evidence)  = z * Prob(Other)  * Prob(Evidence1|Other)  * Prob(Evidence2|Other)  ...

Atribua o rótulo de classe ao que for o número mais alto e pronto.

Apesar do nome, Naive Bayes acaba sendo excelente em certas aplicações. A classificação de texto é uma área em que realmente brilha.

Espero que ajude a entender os conceitos por trás do algoritmo Naive Bayes.

Ram Narasimhan
fonte
14
Obrigado pela explicação muito clara! Facilmente um dos melhores flutuando na web. Pergunta: como cada P (resultado / evidência) é multiplicado por 1 / z = p (evidência) (que, no caso dos frutos, significa que cada uma é essencialmente a probabilidade baseada apenas em evidências anteriores), seria correto dizer que z não importa para Naïve Bayes? O que significaria, portanto, que, digamos, se alguém encontrasse uma fruta longa / doce / amarela que não era uma banana, seria classificada incorretamente.
Covariância
7
@ E. Sim, você está certo em que z de computação não importa para Naive Bayes. (É uma maneira de escalar as probabilidades entre 0 e 1.) Observe que z é o produto das probabilidades de todas as evidências disponíveis. (É diferente dos priores que é a taxa base das classes.) Você está correto: Se você não encontrar uma fruta Longo / doce / amarelo que não é um banana, NB vai classificá-lo incorretamente como uma banana, com base nesta conjunto de treinamento. O algoritmo é um 'melhor palpite probabilístico baseado em evidências' e, portanto, será classificado erroneamente de vez em quando.
Ram Narasimhan
1
@ Jasper Na tabela, há um total de 200 "Outras frutas" e 50 delas são Amarelas. Portanto, dado que a fruta é "Outras Frutas", o universo é 200. 50 delas são Amarelas. Daí 50/200. Observe que 800 é o número total de frutas amarelas. Então, se quiséssemos P (outras frutas / Amarelo), faríamos o que você sugere: 50/800.
Ram Narasimhan
3
Absolutamente ótima explicação. Eu não conseguia entender esse algoritmo em artigos e livros acadêmicos. Porque, geralmente, a explicação esotérica é geralmente aceita como estilo de escrita. Isso é tudo, e tão fácil. Obrigado.
Suat Atan PhD
3
Por que as probabilidades não somam 1? A evidência é 0,26 no exemplo (500/100 * 650/1000 * 800/1000) e, portanto, o P final (banana | ...) = 0,252 / 0,26 = 0,969 e P (outro | ...) = 0,01875 / 0,26 = 0,072. Juntos, eles somam 1,04!
Mauricio
18

Ram Narasimhan explicou muito bem o conceito aqui abaixo. É uma explicação alternativa através do exemplo de código de Naive Bayes em ação.
Ele usa um exemplo de problema deste livro na página 351.
Este é o conjunto de dados que usaremos no conjunto de dados acima, se fornecermos a hipótese = então qual é a probabilidade de ele comprar ou não um computador. O código abaixo responde exatamente a essa pergunta. Basta criar um arquivo chamado nomeado e colar o seguinte conteúdo.
insira a descrição da imagem aqui
{"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}

new_dataset.csv

Age,Income,Student,Creadit_Rating,Buys_Computer
<=30,high,no,fair,no
<=30,high,no,excellent,no
31-40,high,no,fair,yes
>40,medium,no,fair,yes
>40,low,yes,fair,yes
>40,low,yes,excellent,no
31-40,low,yes,excellent,yes
<=30,medium,no,fair,no
<=30,low,yes,fair,yes
>40,medium,yes,fair,yes
<=30,medium,yes,excellent,yes
31-40,medium,no,excellent,yes
31-40,high,yes,fair,yes
>40,medium,no,excellent,no

Aqui está o código que os comentários explicam tudo o que estamos fazendo aqui! [Pitão]

import pandas as pd 
import pprint 

class Classifier():
    data = None
    class_attr = None
    priori = {}
    cp = {}
    hypothesis = None


    def __init__(self,filename=None, class_attr=None ):
        self.data = pd.read_csv(filename, sep=',', header =(0))
        self.class_attr = class_attr

    '''
        probability(class) =    How many  times it appears in cloumn
                             __________________________________________
                                  count of all class attribute
    '''
    def calculate_priori(self):
        class_values = list(set(self.data[self.class_attr]))
        class_data =  list(self.data[self.class_attr])
        for i in class_values:
            self.priori[i]  = class_data.count(i)/float(len(class_data))
        print "Priori Values: ", self.priori

    '''
        Here we calculate the individual probabilites 
        P(outcome|evidence) =   P(Likelihood of Evidence) x Prior prob of outcome
                               ___________________________________________
                                                    P(Evidence)
    '''
    def get_cp(self, attr, attr_type, class_value):
        data_attr = list(self.data[attr])
        class_data = list(self.data[self.class_attr])
        total =1
        for i in range(0, len(data_attr)):
            if class_data[i] == class_value and data_attr[i] == attr_type:
                total+=1
        return total/float(class_data.count(class_value))

    '''
        Here we calculate Likelihood of Evidence and multiple all individual probabilities with priori
        (Outcome|Multiple Evidence) = P(Evidence1|Outcome) x P(Evidence2|outcome) x ... x P(EvidenceN|outcome) x P(Outcome)
        scaled by P(Multiple Evidence)
    '''
    def calculate_conditional_probabilities(self, hypothesis):
        for i in self.priori:
            self.cp[i] = {}
            for j in hypothesis:
                self.cp[i].update({ hypothesis[j]: self.get_cp(j, hypothesis[j], i)})
        print "\nCalculated Conditional Probabilities: \n"
        pprint.pprint(self.cp)

    def classify(self):
        print "Result: "
        for i in self.cp:
            print i, " ==> ", reduce(lambda x, y: x*y, self.cp[i].values())*self.priori[i]

if __name__ == "__main__":
    c = Classifier(filename="new_dataset.csv", class_attr="Buys_Computer" )
    c.calculate_priori()
    c.hypothesis = {"Age":'<=30', "Income":"medium", "Student":'yes' , "Creadit_Rating":'fair'}

    c.calculate_conditional_probabilities(c.hypothesis)
    c.classify()

resultado:

Priori Values:  {'yes': 0.6428571428571429, 'no': 0.35714285714285715}

Calculated Conditional Probabilities: 

{
 'no': {
        '<=30': 0.8,
        'fair': 0.6, 
        'medium': 0.6, 
        'yes': 0.4
        },
'yes': {
        '<=30': 0.3333333333333333,
        'fair': 0.7777777777777778,
        'medium': 0.5555555555555556,
        'yes': 0.7777777777777778
      }
}

Result: 
yes  ==>  0.0720164609053
no  ==>  0.0411428571429

Espero que ajude a entender melhor o problema

Paz

Sayed Zainul Abideen
fonte
18

Naive Bayes: Naive Bayes está sob a supervisão de aprendizado de máquina que costumava fazer classificações de conjuntos de dados. É usado para prever coisas com base em seu conhecimento prévio e suposições de independência.

Eles chamam de ingênuo porque são suposições (assume que todos os recursos do conjunto de dados são igualmente importantes e independentes) são realmente otimistas e raramente verdadeiros na maioria dos aplicativos do mundo real.

É o algoritmo de classificação que toma a decisão pelo conjunto de dados desconhecido. É baseado no Teorema de Bayes, que descreve a probabilidade de um evento com base em seu conhecimento prévio.

O diagrama abaixo mostra como funciona o ingênuo Bayes

insira a descrição da imagem aqui

Fórmula para prever RN:

insira a descrição da imagem aqui

Como usar o algoritmo Naive Bayes?

Vamos dar um exemplo de como NB woks

Etapa 1: Primeiro descobrimos Probabilidade da tabela que mostra a probabilidade de sim ou não no diagrama abaixo. Etapa 2: encontre a probabilidade posterior de cada classe.

insira a descrição da imagem aqui

Problem: Find out the possibility of whether the player plays in Rainy condition?

P(Yes|Rainy) = P(Rainy|Yes) * P(Yes) / P(Rainy)

P(Rainy|Yes) = 2/9 = 0.222
P(Yes) = 9/14 = 0.64
P(Rainy) = 5/14 = 0.36

Now, P(Yes|Rainy) = 0.222*0.64/0.36 = 0.39 which is lower probability which means chances of the match played is low.

Para mais referência, consulte estes blogs.

Consulte Exemplos de Naive-Bayes do repositório do GitHub

jitsm555
fonte
14

Tento explicar a regra de Bayes com um exemplo.

Qual é a chance de uma pessoa aleatória selecionada da sociedade ser fumante?

Você pode responder 10%.

Agora, e se a pessoa for um homem e 15 anos?

Não pode ser 60%, enquanto sabemos que a porcentagem de fumantes era muito baixa. Também não pode ser inferior a 10%. 15 ou 20% são melhores palpites.

De fato, tentamos atualizar o palpite inicial com novas evidências ( P(smoker) vs. P(smoker | evidence)). A regra de Bayes é uma maneira de conectar essas duas probabilidades.

P(smoker | evidence) = P(smoker)* p(evidence | smoker)/P(evidence)

Cada evidência pode aumentar ou diminuir essa chance. Por exemplo, esse fato de ser homem pode aumentar a chance, desde que essa porcentagem (sendo homem) entre os não fumantes seja menor. Em outras palavras, ser homem deve ser um bom indicador de ser fumante e não não-fumante.

Também podemos mostrar essa contribuição de outra maneira. Para cada recurso, você pode comparar a semelhança (probabilidade) desse recurso sob as condições especificadas, apenas com a sua semelhança. ( P(f | x) vs. P(f)).

P(smoker | evidence) / P(smoker) = P(evidence | smoker)/P(evidence)

Por exemplo, se sabemos que 90% dos fumantes são homens, ainda não basta dizer se ser homem é um indicador de ser fumante ou não. Por exemplo, se a probabilidade de ser homem na sociedade também é de 90%, saber que alguém é homem não nos ajuda ((90% / 90%) = 1. Mas se os homens contribuem com 40% da sociedade, mas 90% dos fumantes, saber que alguém é homem aumenta a chance de ser fumante(90% / 40%) = 2.25 , aumentando a estimativa inicial (10%) em 2,25, resultando em 22,5%.

No entanto, se a probabilidade de ser homem era de 95% na sociedade, independentemente do fato de a porcentagem de homens entre fumantes ser alta (90%)! a evidência de que alguém é homem diminui a chance de ele ser fumante!(90% / 95%) = 0.95).

Então nós temos:

P(smoker | f1, f2, f3,... ) = P(smoker) * contribution of f1* contribution of f2 *... =
P(smoker)* 
(P(being a man | smoker)/P(being a man))*
(P(under 20 | smoker)/ P(under 20))

Observe que, nesta fórmula, assumimos que ser homem e ter menos de 20 anos são características independentes; portanto, nós as multiplicamos, significa que saber que alguém tem menos de 20 anos não tem efeito em supor que ele é homem ou mulher. Mas pode não ser verdade, por exemplo, talvez a maior parte da adolescência em uma sociedade seja homem ...

Para usar esta fórmula em um classificador

O classificador é fornecido com alguns recursos (ser homem e ter menos de 20 anos) e deve decidir se ele é fumante ou não (são duas classes). Ele usa a fórmula acima para calcular a probabilidade de cada classe sob a evidência (características) e atribui a classe com a maior probabilidade à entrada. Para fornecer as probabilidades necessárias (90%, 10%, 80% ...), ele usa o conjunto de treinamento. Por exemplo, conta as pessoas no conjunto de treinamento que são fumantes e descobre que elas contribuem com 10% da amostra. Então, para fumantes verifica quantos deles são homens ou mulheres .... quantos estão acima de 20 ou abaixo de 20 .... Em outras palavras, ele tenta construir a distribuição de probabilidade dos recursos para cada classe com base no treinamento dados.

Ahmad
fonte