1
resposta

[Dúvida] Acurácia do Dummy Classifier

Sabendo que a partir da versão 0.13 por padrão o Dummy Classifier utiliza a estratégia prior, no código a seguir, o resultado da acurácia é fixada em 58%, independente do número de vezes que executo, seja rodando apenas o bloco ou o programa inteiro:

from sklearn.dummy import DummyClassifier

dummy_prior = DummyClassifier() # Utiliza por padrao a estategia `prior`
dummy_prior.fit(x_treino, y_treino)
previsoes = dummy_prior.predict (x_teste)

acuracia = accuracy_score(y_teste, previsoes) * 100
print ("A acuracia do dummy_prior foi de %.2f%%" % acuracia)

A acuracia do dummy_mostfrequent foi de 58.00%

O mesmo ocorre para a estratégia definida como most_frequent a acurácia permanece fixada também em 58%, repetindo a situação do classificador que usa a estratégia prior:

dummy_mostfrequent = DummyClassifier(strategy= "most_frequent")
dummy_mostfrequent.fit(x_treino, y_treino)
previsoes = dummy_mostfrequent.predict(x_teste)

acuracia = accuracy_score(y_teste, previsoes) * 100
print("A acurácia do dummy mostfrequent foi %.2f%%" % acuracia)

A acuracia do dummy_mostfrequent foi de 58.00%

Se o parâmetro da estratégia do Dummy Classifier for configurado como stratified, o valor altera a cada iteração, como previsto pelo instrutor no vídeo:

from sklearn.dummy import DummyClassifier

dummy_stratified = DummyClassifier(strategy="stratified")
dummy_stratified.fit(x_treino, y_treino)
previsoes = dummy_stratified.predict (x_teste)

acuracia = accuracy_score(y_teste, previsoes) * 100 
print ("A acuracia do dummy_stratified foi de %.2f%%" % acuracia)

A não ser que passe como argumento o random_state para o Dummy Classifier da seguinte forma, mantendo a acurácia fixa em um valor:

dummy_stratified = DummyClassifier(strategy= "stratified", random_state= SEED)

A acurácia do dummy_stratified foi 51.40%Gostaria de entender o que está acontecendo aqui.

1 resposta

Olá Murilo! Como vai?

Para compreender essas alterações nos resultados, é importante entender primeiro o que acontece em casa estratégia do DummyClassifier.

Estratégias do DummyClassifier

Veja mais detalhadamente na documentação.

  • prior (padrão): Essa estratégia prevê a classe majoritária (ou seja, a classe que aparece com mais frequência no conjunto de treinamento). A acurácia será constante porque sempre estará prevendo a classe mais comum.

  • most_frequent: Similar à estratégia prior, essa estratégia também prevê a classe mais frequente no conjunto de treinamento. Portanto, a acurácia será constante.

Essas estratégias se adequam melhor à conjuntos de dados que tenham distribuição bem equilibrada das classes. A precisão para as classes minoritárias não será levada em consideração.

  • stratified: Essa estratégia prevê as classes de forma proporcional à distribuição das classes no conjunto de treinamento, mas de forma aleatória. Por isso, a acurácia pode variar a cada execução, a menos que você defina um random_state.

Já nesse caso, o conjunto de dados não precisa necessariamente ter uma distribuição equilibrada das classes, mas sim manter a proporção das classes em cada estrata.

O impacto na acurácia, de acordo com cada uma dessas estratégias, dependerá da distribuição das classes no seu conjunto de dados.

Os Resultados

prior e most_frequent: se a classe mais frequente representa 58% do conjunto de dados, a acurácia será sempre 58%, independentemente do número de execuções.

stratified: essa estratégia prevê as classes de forma proporcional, mas de maneira aleatória. Por isso, a acurácia pode variar a cada execução. Quando você define um random_state, você fixa a semente da aleatoriedade, resultando na mesma acurácia em execuções subsequentes.

Lembrando que é sempre importante avaliar o desempenho do modelo em diferentes conjuntos de dados e com diferentes estratégias para identificar a melhor abordagem para o problema específico.

Espero ter ajudado, Murilo!

Abração.

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!