7
respostas

MultinomialNB vs AdaBoostClassifier - Vários Testes

Considerações: Se testarmos apenas com a mesma base de dados para treino e teste, nestes modelos teremos sempre os mesmos resultados. Entretanto, na vida real provavelmente não teremos dados tão comportados.

Foram geradas bases de treino e teste aleatórios usando os nossos dados em 3 situações:

1 - Totalmente aleatórios: Vamos supor que haja duas saídas, 0 (70% das vezes) e 1 (30% das vezes) . As amostras de treino e teste não respeitaram essa proporção.

2 - Aleatório, mas com Y proporcional: Caso haja uma proporção de 0 (70% das vezes) e 1 (30% das vezes), as amostras de treino e teste tentaram manter essa proporção variando apenas o X.

3 - Registro único: Foram mantidos apenas registros únicos. Mesmo que em uma base de dados, algo ocorra centenas de vezes, foi ensinado apenas uma vez aquele padrão, sem informar quantas vezes ele ocorria. Com isso a nossa base teve 45 registros únicos e comparando tanto com o teste de mesmo tamanho e condições das demais simulações como com toda a base de dados.

Abaixo segue o resultado:

7 respostas

1 - Totalmente aleatórios

MultinomialNB
test_size=0.2
stratify=não
repeticao=1000

random
train=180
test=45

MultinomialNB
Mínimo  55.55555555555556
Máximo  97.77777777777777
Média   81.67111111111113
Mediana 82.22222222222221

tempo de execução (segundos): 3.3961826
AdaBoostClassifier
test_size=0.2
stratify=não
repeticao=1000

random
train=180
test=45

AdaBoost
Mínimo  55.55555555555556
Máximo  93.33333333333333
Média   76.20666666666666
Mediana 75.55555555555556

2 - Aleatório, mas com Y proporcional

MultinomialNB
test_size=0.2
stratify=sim
repeticao=1000

random
train=180
test=45

MultinomialNB
Mínimo  75.55555555555556
Máximo  91.11111111111111
Média   81.26888888888891
Mediana 82.22222222222221

tempo de execução (segundos): 3.8400374999999998
AdaBoostClassifier
test_size=0.2
stratify=sim
repeticao=1000

random
train=180
test=45

AdaBoost
Mínimo  75.55555555555556
Máximo  75.55555555555556
Média   75.55555555555557
Mediana 75.55555555555556

tempo de execução (segundos): 60.187010699999995

3 - Registro único Tamanho do teste igual aos anteriores Teste aleatório

MultinomialNB
test_size=0.2
stratify=Não
repeticao=1000

random
train=45(registros únicos)
test=45

MultinomialNB
Mínimo  53.333333333333336
Máximo  93.33333333333333
Média   76.16666666666667
Mediana 75.55555555555556

tempo de execução (segundos): 3.6025453000000027
AdaBoostClassifier
test_size=0.2
stratify=não
repeticao=1000

random
train=45(registros únicos)
test=45

AdaBoost
Mínimo  57.77777777777777
Máximo  91.11111111111111
Média   75.96444444444444
Mediana 75.55555555555556

tempo de execução (segundos): 58.41698849999999

Dados Únicos com Y proporcional

MultinomialNB
test_size=0.2
stratify=sim
repeticao=1000

random
train=45(registros únicos)
test=45

MultinomialNB
Mínimo  75.55555555555556
Máximo  75.55555555555556
Média   75.55555555555557
Mediana 75.55555555555556

tempo de execução (segundos): 3.700055699999993
AdaBoostClassifier
test_size=0.2
stratify=sim
repeticao=1000

random
train=45(registros únicos)
test=45

AdaBoost
Mínimo  75.55555555555556
Máximo  75.55555555555556
Média   75.55555555555557
Mediana 75.55555555555556

tempo de execução (segundos): 58.42041360000002

Ensinando com apenas um registro de cada ocorrência ao modelo e realizando a previsão com toda a base de dados.

MultinomialNB
repeticao=1

train=45(registros únicos)
test=225

MultinomialNB
Mínimo  76.0
Máximo  76.0
Média   76.0
Mediana 76.0

tempo de execução (segundos): 0.009985299999996755
------------------------------------------
AdaBoostClassifier
repeticao=1

train=45(registros únicos)
test=225

AdaBoost
Mínimo  76.0
Máximo  76.0
Média   76.0
Mediana 76.0


tempo de execução (segundos): 0.07035540000001106

As minhas conclusões: O modelo MultinomialNB apresenta vantagem sobre o AdaBoostClassifier, tanto em resultado quanto em consumo de recursos e tempo.

Trabalhar com registros únicos possui resultados semelhantes ao do AdaBoostClassifier mas com um tempo de execução melhor.

Trabalhar com o Y proporcional faz com que os dados variem menos (máximos - mínimos) com pouco impacto no resultado médio ou na mediana, mas com um aumento no tempo de execução.

Cenário Ideal como Referência: O cenário ideal para o modelo é aquele em que na vida real os eventos que geraram a nossa base de dados, tornam a acontecer. Portanto o nosso modelo recebe um novo conjunto de dados que são iguais aos que ele treinou. Se testarmos o modelo com os mesmos dados que ele treinou saberemos qual a eficiência dele em "relembrar" os dados que ele já conhece.

Neste caso, treinando e testando com os mesmos dados:

MultinomialNB

Mínimo  81.33333333333333
Máximo  81.33333333333333
Média   81.33333333333333
Mediana 81.33333333333333

tempo de execução (segundos): 0.008391999999730615
AdaBoostClassifier

Mínimo  76.0
Máximo  76.0
Média   76.0
Mediana 76.0

tempo de execução (segundos):  0.07227729999976873

Olá Bruno.

Muito legal seus testes, acho que um bom próximo passo para entender melhor o seus resultados é conhecer mais a fundo os algoritmos que está usando e você vai conseguir isso lendo a documentação AdaBoost e a documentação Multinomial Naive Bayes.

Outro ponto que julgo importante é aprender mais sobre os hiperparâmetros e como podemos testa-los, pode aprender isso nos cursos Curso de Machine Learning parte 1: Otimização de modelos através de hiperparâmetros e o Curso de Machine Learning parte 2: Otimização com exploração aleatória.

Parabéns pelo seu empenho.

Bons Estudos.

Comecei a fazer estes cursos que me indicou.

Obrigado!