Suavização no modelo Naive Bayes

13

Um preditor do Naive Bayes faz suas previsões usando esta fórmula:

P(Y=y|X=x)=αP(Y=y)EuP(XEu=xEu|Y=y)

onde é um fator de normalização. Isso requer a estimativa dos parâmetros partir dos dados. Se fizermos isso com smoothing, obteremos a estimativaP ( X i = x i | Y = y ) kαP(XEu=xEu|Y=y)k

P^(XEu=xEu|Y=y)=#{XEu=xEu,Y=y}+k#{Y=y}+nEuk

onde há valores possíveis para . Eu estou bem com isso. No entanto, para o anterior, temosX inEuXEu

P^(Y=y)=#{Y=y}N

onde há exemplos no conjunto de dados. Por que não suavizamos também o anterior? Ou melhor, não podemos suavizar a anterior? Se sim, qual parâmetro de suavização escolhemos? Parece um pouco bobo também escolher , pois estamos fazendo um cálculo diferente. Existe um consenso? Ou isso não importa muito?Nk

Chris Taylor
fonte

Respostas:

5

O motivo típico para suavizar em primeiro lugar é lidar com casos em que . Se isso não fosse feito, sempre obteríamos sempre que esse fosse o caso.#{XEu=xEu|Y=y}=0 0P(Y=y|X=x)=0 0

Isso acontece quando, por exemplo, ao classificar documentos de texto, você encontra uma palavra que não estava nos seus dados de treinamento ou simplesmente não apareceu em alguma classe específica.

Por outro lado, no caso da probabilidade anterior da classe, , essa situação não deve ocorrer. Se isso acontecer, você está tentando atribuir objetos a classes que nem aparecem nos dados de treinamento.P(Y=y)

Além disso, nunca encontrei o termo smoothing. A suavização por Laplace ou aditivo é muito mais comum.k

alto
fonte
1
O motivo da suavização em geral é evitar o excesso de ajuste dos dados. O caso em que a contagem de alguma classe é zero é apenas um caso específico de super ajuste (que é particularmente ruim). Você ainda pode suavizar as probabilidades quando todas as classes são observadas. Suponho que estou incomodado com a aparente assimetria - a suavização de Laplace corresponde a supor que haja observações extras em seu conjunto de dados. Por que você ignoraria essas observações ao ajustar o anterior?
Chris Taylor
P(Y=y)P(XEu=xEu|Y=y)
"esta situação não deve ocorrer. Se isso acontecesse, isso significa que você está tentando atribuir objetos a classes que nem aparecem nos dados de treinamento". Uhh ... como um classificador atribuiria um objeto a uma classe que nunca havia visto antes (isto é, não está nos dados de treinamento)?
Jemenake
@Jemenake O problema é normalmente referido como aprendizagem Zero-shot, por exemplo, ver Zero-Shot Aprender com códigos de saída do semânticas
alto
quando treinamos o modelo usando o conjunto de dados de treinamento, podemos criar um vocabulário usando as palavras ocorridas no conjunto de dados de treinamento. Por que não apenas remover novas palavras que não estão no vocabulário ao fazer previsões no conjunto de testes?
abacate