Classificador Naive-Bayes para grupos desiguais

8

Estou usando o classificador ingênuo de bayes para classificar entre dois grupos de dados. Um grupo de dados é muito maior que o outro (acima de 4 vezes). Estou usando a probabilidade anterior de cada grupo no classificador.

O problema é que o resultado obtido tem 0% de taxa positiva verdadeira e 0% de taxa positiva falsa. Obtive os mesmos resultados quando defini o anterior para 0,5 e 0,5.

Como posso definir meu limite para algo melhor para obter resultados mais equilibrados?

Eu tive um problema semelhante ao usar o classificador de regressão logística. Eu o resolvi subtraindo o termo anterior do viés.

Quando uso o Fisher Linear Discriminant nesses dados, obtenho bons resultados com o limite definido no meio.

Presumo que exista alguma solução comum para esse problema, simplesmente não consegui encontrá-lo.

UPDATE: Acabei de notar que o classificador está se ajustando demais. O desempenho no conjunto de treinamento é perfeito (100% correto).

Se eu usar grupos iguais, o classificador começará a classificar também para o grupo "pequeno", mas o desempenho é muito ruim (pior que FLD ou LR).

UPDATE2: Eu acho que o problema era que eu estava usando uma matriz de covariância completa. Correr com matriz de covariância diagonal me deu resultados mais "equilibrados".

Correu
fonte
0% verdadeiro positivo e 0% falso positivo? Deve estar colocando tudo no outro grupo, então ... tente definir seu prior em 80% para o grupo "positivo". Mas, primeiro, verificar para ver que você não está fazendo um algum lugar erro no código ...
jbowman
Talvez o prior seja muito grande / pequeno? (alguns problemas com ponto flutuante aritmética?)
Dov

Respostas:

7

Atribuir todos os padrões à classe negativa certamente não é um "resultado estranho". Pode ser que o classificador ideal de Bayes sempre classifique todos os padrões como pertencentes à classe majoritária; nesse caso, seu classificador está fazendo exatamente o que deve fazer. Se a densidade dos padrões pertencentes à classe positiva nunca exceder a densidade dos padrões pertencentes à classe negativa, é mais provável que a classe negativa seja qual for o valor dos atributos.

O que se deve fazer nessas circunstâncias é considerar a importância relativa dos erros falso-positivos e falso-negativos; na prática, é raro que os custos dos dois tipos diferentes de erro sejam os mesmos. Portanto, determine a perda para erros falsos positivos e falsos negativos e leve-os em consideração ao definir a probabilidade limite (custos de classificação incorreta diferentes são equivalentes a alterações das probabilidades anteriores, portanto, é fácil de implementar para Bayes ingênuo). Eu recomendaria ajustar os anteriores para minimizar a estimativa de validação cruzada da perda (incorporando seus custos desiguais de classificação incorreta).

Se seus custos de classificação incorreta forem iguais e seu conjunto de treinamento representar previamente as condições operacionais, assumindo que sua implementação está correta, é possível que você já tenha o melhor classificador NB.

Dikran Marsupial
fonte
verifique minha atualização, por favor. Meu classificador está super adaptado. de qualquer forma, se eu usar grupos iguais, o classificador começará a se comportar melhor, mas ainda com baixo desempenho. alterar o limiar (anteriores) não afeta o desempenho quando um grupo é muito maior. graças
Ran
1
@Ran Não consigo me livrar da sensação de que algo está faltando aqui. Você pode relatar a AUC de cada classificador? 2. Quantas ocorrências positivas / negativas você tem por turma? 3. Como você validou o classificador? qual-k-fold-cv? loo? 3. Observe que a natureza de NB é criar probabilidades extremas p (classe | x) próximas a 0 ou 1, de modo que é preciso encontrar o melhor limiar de decisão, ou seja, t para que p (classe = 1 | x)> t => classe 1, caso contrário classe 0. Encontrar esse limite de decisão é equivalente a ajustar os anteriores.
Steffen
@Ran mudar os anteriores tem que afetar o desempenho;). Se pequenas alterações não ajudarem, tente algo extremo.
Steffen
2
@Ran, é difícil determinar qual é o problema sem ter informações adicionais sobre o tamanho do conjunto de treinamento, a natureza dos atributos etc. No entanto, uma coisa vem à mente: o NB tem um problema se as probabilidades condicionais são zero , como se isso acontecesse, a saída será zero, independentemente dos valores de quaisquer outros atributos. As probabilidades para a classe minoritária são sempre exatamente zero? Se for esse o caso, esse pode ser o problema; nesse caso, usar a correção de Laplace para estimar as probabilidades condicionais pode ajudar.
Dikran Marsupial
0

Aumente o grupo de dados menor para caber no grande grupo por cálculo. Estenderá os dados do grupo menor, mas permitirá um cálculo mais igual.

Se você ainda obtiver resultados estranhos como atualmente, verifique toda a sua implementação do início para detectar um erro (provavelmente simples).


fonte
o que você quer dizer com "Ampliar os dados menores ... por cálculo"? você pode explicar melhor?
Dov
classificar tudo como pertencente à classe negativa não é um resultado estranho, às vezes é a coisa certa a fazer, porque a densidade de padrões negativos sempre excede a densidade de padrões positivos em todos os lugares.
Dikran Marsupial