Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Dummy 'most_frequent' é na verdade o 'stratified'

Eu notei que ao colocar o código para o dummy com a estratégia most_frequent, faltou adicionar o parâmetro na inicialização do dummy.

Então na prática os dois dummy (dummy_stratified e dummy_mostfrequent) utilizam a mesma estratégia default: stratified

Código do vídeo:

from sklearn.dummy import DummyClassifier

dummy_stratified = DummyClassifier()
dummy_stratified.fit(treino_x, treino_y)
acuracia = dummy_stratified.score(teste_x, teste_y) * 100

print("A acurácia do dummy stratified foi {:.2f}%".format(acuracia))
from sklearn.dummy import DummyClassifier

dummy_mostfrequent = DummyClassifier()
dummy_mostfrequent.fit(treino_x, treino_y)
acuracia = dummy_mostfrequent.score(teste_x, teste_y) * 100

print("A acurácia do dummy mostfrequent foi {:.2f}%".format(acuracia))

No entanto, a acurácia dos dois foi diferente (52.44% e 50.68% respectivamente). Quando rodamos o código inteiro (para rodar a célula com o SEED) o resultado dos dois não deveria ser o mesmo?

4 respostas

Olá Guilherme, tudo bem?

Quando você utiliza o dummy_mostfrequent, você pega os conjuntos mais frequentes, por isto o resultado está um pouco diferente!

Bons estudos!

Olá Elias! Obrigado pela resposta, mas ainda continuo com a dúvida.

Como eu apontei no código acima, a inicialização do DummyClassifier está sendo realizada da mesma forma - sem passar nenhum argumento - efetivamente tornando os dois objetos: dummy_stratified e dummy_mostfrequent instâncias inicializadas com a estratégia stratified.

Para que o dummy_mostfrequent faça jus ao nome o objeto deveria ser inicializado da seguinte forma:

dummy_mostfrequent = DummyClassifier(strategy = 'most_frequent')

E isso realmente alteraria o resultado da acurácia (para 58% se não me engano, tornando-o inclusive melhor que o stratified).

Acho que o TL;DR é esse:

1º) O curso mostra duas alternativas para o DummyClassifier mas na prática utiliza a mesma duas vezes.

2º) Se os dois objetos do DummyClassifier foram criados iguais, como foi possível que o resultado dos dois foi diferente?

Hahaha acabou ficando meio grande, mas obrigado novamente pela resposta!

solução!

Olá Guilherme, tudo bem ?

O resultado foi diferente por causa do parâmetro do random_state que por padrão é None e a strategy deveria ter sido passada como most_frequent.

Bons estudos!

Oi Elias, era isso mesmo!

Por alguma razão colocar o SEED do NumPy não adiantou para obter o mesmo resultado:

import numpy as np

SEED = 5
np.random.seed(SEED)

Mas ao colocar o argumento random_state com o mesmo valor na inicialização dos dois objetos os resultados ficaram iguais.

Então, novamente, muito obrigado!