4
respostas

[Dúvida] Classes balanceadas com overfitting

Olá,

Estou com um projeto parecido com esse da aula, classes desbalanceadas e fiz um oversampling para balancear e mesmo assim Random Forest está overfittando e batendo todas as métricas com 100%, no entanto ao validar com dados novos ele baixa para de .75 a .85, os próximos são hiper parâmetros, ou quais outras técnicas devo tentar?

4 respostas

Olá, Luiz! tudo bem?

Que bom que você está trabalhando em um projeto semelhante ao que discutimos em aula! Lidar com classes desbalanceadas e ajustar modelos pode ser desafiador, mas é ótimo ver que você está explorando diferentes abordagens.

Sobre a questão do overfitting na Random Forest, uma abordagem que você pode tentar é ajustar os hiperparâmetros do seu modelo. Por exemplo, você pode experimentar limitar a profundidade máxima das árvores (max_depth) ou ajustar outros parâmetros como o número de árvores na floresta (n_estimators).

Se você quiser explorar outras técnicas para melhorar o seu modelo, temos os seguintes cursos nesta formação:

No primeiro curso, trabalhamos na otimização de hiperparâmetros, explorando técnicas como a validação cruzada aninhada (Nested Cross-Validation), a busca aleatória (Random Search), a busca em grade (Grid Search) e a otimização bayesiana (Bayesian Optimization). Já no curso seguinte, utilizamos técnicas para verificar a importância das features dos nossos conjuntos de dados, auxiliando a identificar quais features são mais relevantes, o que pode contribuir significativamente para o desempenho e a generalização do seu modelo, ajudando a evitar o overfitting e a melhorar a precisão das previsões.

Bons estudos e continue explorando!

Olá Valquíria,

Obrigado pelas explanações, percebi que tem um ponto em que o modelo não avança e nesse ponto é o momento de rever as qualidades das classes que apresentam o problema. Ai surgiu uma dúvida, que tipo de técnica me sugere que uma classe precisa de mais dados que o modelo identifique melhor ou há algum hiperparâmetro no modelo que eu possa pedir mais atenção ou dar um peso maior para classe deficitária?

Grato.

Luiz,

Uma abordagem comum é verificar o balanceamento dos dados entre as classes. Se uma classe tem muito menos exemplos do que outras, o modelo pode ter dificuldade em aprender padrões específicos dessa classe. Nesse caso, você pode considerar a coleta de mais dados. Quando não for possível coletar mais dados, você pode explorar técnicas de reamostragem dos dados, como oversampling e undersampling.

Outra técnica que você pode explorar é o ajuste de hiperparâmetros do modelo RandomForest. Por exemplo, você pode experimentar ajustar o parâmetro de peso das classes (class_weight) durante o treinamento. Atribuir pesos maiores para a classe que você deseja que o modelo dê mais atenção pode ajudar a melhorar o desempenho geral do modelo.

Por exemplo:

# Defina pesos para as classes
class_weights = {0: 1, 1: 2}  # Exemplo de atribuição de pesos diferentes

# Instancie o classificador RandomForest com os pesos das classes
modelo = RandomForestClassifier(class_weight=class_weights, random_state=0)

Neste código, a variável class_weights é um dicionário que define os pesos para as classes: a classe 0 recebe um peso de 1, enquanto a classe 1 recebe um peso de 2. Em seguida, um modelo de classificação RandomForest é instanciado com a especificação desses pesos por meio do parâmetro class_weight, além de definir um random_state para garantir a reprodutibilidade dos resultados. Esse procedimento é útil em conjuntos de dados desbalanceados, onde uma classe é muito mais comum que as outras, podendo ajudar a melhorar o desempenho do modelo nessas condições.

Você pode explorar esse e outros hiperparâmetros do RandomForestClassifier, em mais detalhes, na documentação da biblioteca scikit-learn.

Excelente,

Agora é testagem. Obrigado. A Alura, está me surpreendendo com professores de excelência, sobretudo responder ao aluno com dedicação sem superficialidade.