Fiz com F1 Score, obtive esses resultados Acurácia média sem SMOTE: 0.7704285714285715 F1 Score médio sem SMOTE: 0.09579394847654041 Acurácia média com SMOTE: 0.5752857142857143 F1 Score médio com SMOTE: 0.294616710621384 Levando em conta um modelo balanceado de recall e precision seria melhor optar por usar o smote certo?
Vídeo muito bom! Confesso que fiquei pensando que o erro com validação cruzada era bobo, até perceber que já cometi em um pequeno trabalho, com essas coisas a gente sempre tem que tomar cuidado. Tu parou com os vídeos aqui no youtube?
Parece mesmo!!! Muita gente no início comete esse deslize sem nem perceber. Por isso mesmo achamos importate fazer esses vídeos! Continuamos de vento em popa! Segue o canal direitinho que os avisos vão chegar!! :D
Boa noite, Leon! Excelente vídeo, valeu por mais esta super aula! Uma dúvida: teriam outras operações que não são indicadas pra fazer no dataset completo além do smote? Me refiro a one-hot, pca, valores missing, etc etc etc (tem um batalhão de coisas no pré processamento de dados!). O que mais prejudicaria o modelo? Abs.
Obrigada pelo conteudo! Isso vale pra mais de 2 classes? por exemplo 4 classes diferentes que meu modelo está predizendo. E duas classes tem muito menos dados representando. classe1-51 classe2-17 classe3-41 classe4-8
Leon, uma dúvida: Os dados de teste da primeira divisão do modelo "X_treino, X_teste, y_treino, y_teste = train_test_split(X,y)" não foram utilizados? Tipo... o database tinha 768 instancias...treino = 576 e teste = 192. Depois, para fazer o SMOTE, os dados de treino foram novamente divididos em treino e teste...balanceados e depois validação... Fiquei na dúvida sobre os primeiros dados de teste X_teste e y_teste que não foram utilizados. EDITADO: Ahhh entendi... esses dados seriam os "DESCONHECIDOS" que você poderia usar para um TESTE final. Dúvida: Como funcionaria tudo isso caso eu tenha realizado uma padronização das variaveis (media 0 desviopadrao 1) ?? Por que aí penso que nesse "teste final" com os dados X_teste e y_teste eu teria que entrar com esses valores padronizados também. Mas como faço isso?
Massa! Se entendi direito a dúvida: você faz o fit transform no treino e só transform no teste. Isso porque temos que aprender com a distribuição dos dados de treino porque não conhecemos a realidade dos dados em produção (que simulamos com o teste)
Obrigado pelo vídeo, Leon! Fiquei com algumas dúvidas: como as classes estão desbalanceadas, eu não precisaria, primeiramente, usar o "stratify=y" para que o meu y_teste tivesse a mesma distribuição em relação ao y_train? E , em segundo lugar, agora na validação cruzada, eu poderia usar o "StratifiedKFold" para que essa distribuição das classes fosse mantida nos splits gerados? Essa dúvida é porque, não usando o stratify e o StratifiedKfold, poderíamos ter uma distribuição bem diferente das classes entre os conjuntos usados para o treino e para a validação. Qual seria a diferença entre usar e não usar essas estratificações?
Valeu, Humberto!! Usar validação estratificada é legal quando o e desbalanceamento é tão grande que pode correr o risco de não ter observações em algum split dos folds. Isso é comum quando se tem muitas classes. Esse vídeo focaliza mais na forma correta de fazer um balanceamento “artificial” com over ou undersampling, mas o mais certo mesmo é usar class weight. Vamos fazer um vídeo sobre isso :)
Tem sim, Letícia!! github.com/letsdata/oversampling So gostou do vídeo, estamos com inscrições abertas pra nossa Jornada Cientista de Dados. Inscrições no link: www.letsdata.ai/jornada
Antes de mais nada, Parabéns pela aula mestre! Quanto ao 'Stratified k-fold cross-validation', será que serve? Li num artigo do Jason Brownlee que pode ser usado, mas não sei até que ponto, ou se existem limitações. Muito obrigado!
Valeu pela força, mestre!!! Vai cair no mesmo problema! Pra usar o stratified certo, só trocar a implementação que fizemos de KFold pra StratifiedKFold. Lembrando que essa estratificação tenta garantir a mesma proporção de classes nos mini-splits, mas se fizer o oversampling antes, a proporção a ser mantida vai estar errada desde o princípio.
Se o problema é fazer o balanceamento antes do cross validation, a solução não seria apenas fazer o balanceamento depois do cross_val_score? Não entendo a necessidade de criar um cross val score na mão e o que isso tem a ver
Fala, Eduardo! A ideia é da validação cruzada é comparar modelos. Nesse caso, comparar o modelo treinado sem balanceamento vs com balanceamento. Para realizar uma validação cruzada correta, devemos garantir que as mini-validações não estejam contaminadas e a opção no vídeo foi de solucionar criando uma função de validação cruzada na mão.
Leon, bom dia! pode me ajudar? Quando tento aplicar aparece o seguinte erro já tentei de tudo e não consigo. 'numpy.ndarray' object has no attribute 'iloc' Valeu
Também tive o mesmo problema. Acreditoque o input "X, y" que colocamos no validação_cruzada seja um array, e por isso não dá para utilizar o "iloc" (que é para dataframe).
Fiz com F1 Score, obtive esses resultados
Acurácia média sem SMOTE: 0.7704285714285715
F1 Score médio sem SMOTE: 0.09579394847654041
Acurácia média com SMOTE: 0.5752857142857143
F1 Score médio com SMOTE: 0.294616710621384
Levando em conta um modelo balanceado de recall e precision seria melhor optar por usar o smote certo?
Puro suco do milho, obrigado por compartilhar!
Hahahha, valeu demais!!
Vídeo muito bom! Confesso que fiquei pensando que o erro com validação cruzada era bobo, até perceber que já cometi em um pequeno trabalho, com essas coisas a gente sempre tem que tomar cuidado.
Tu parou com os vídeos aqui no youtube?
Parece mesmo!!! Muita gente no início comete esse deslize sem nem perceber. Por isso mesmo achamos importate fazer esses vídeos! Continuamos de vento em popa! Segue o canal direitinho que os avisos vão chegar!! :D
Boa noite, Leon! Excelente vídeo, valeu por mais esta super aula! Uma dúvida: teriam outras operações que não são indicadas pra fazer no dataset completo além do smote? Me refiro a one-hot, pca, valores missing, etc etc etc (tem um batalhão de coisas no pré processamento de dados!). O que mais prejudicaria o modelo? Abs.
A aplicação das técnicas em si não são prejudiciais. O que devemos ter atenção é no vazamento de dados no uso das ferramentas. Abraço!
Obrigada pelo conteudo! Isso vale pra mais de 2 classes? por exemplo 4 classes diferentes que meu modelo está predizendo. E duas classes tem muito menos dados representando.
classe1-51
classe2-17
classe3-41
classe4-8
Sim! Na verdade VERDADEIRA balancear as classes nunca ajudou muito, mas se for fazer, tem que ser que nem no vídeo!
@@letsdataAI Obrigada ! Tem algum algortimo de classificação que trabalhe melhor com classes desbalanceadas?
Leon, uma dúvida: Os dados de teste da primeira divisão do modelo "X_treino, X_teste, y_treino, y_teste = train_test_split(X,y)"
não foram utilizados?
Tipo... o database tinha 768 instancias...treino = 576 e teste = 192.
Depois, para fazer o SMOTE, os dados de treino foram novamente divididos em treino e teste...balanceados e depois validação...
Fiquei na dúvida sobre os primeiros dados de teste X_teste e y_teste que não foram utilizados.
EDITADO: Ahhh entendi... esses dados seriam os "DESCONHECIDOS" que você poderia usar para um TESTE final.
Dúvida: Como funcionaria tudo isso caso eu tenha realizado uma padronização das variaveis (media 0 desviopadrao 1) ??
Por que aí penso que nesse "teste final" com os dados X_teste e y_teste eu teria que entrar com esses valores padronizados também. Mas como faço isso?
Massa! Se entendi direito a dúvida: você faz o fit transform no treino e só transform no teste. Isso porque temos que aprender com a distribuição dos dados de treino porque não conhecemos a realidade dos dados em produção (que simulamos com o teste)
Obrigado pelo vídeo, Leon! Fiquei com algumas dúvidas: como as classes estão desbalanceadas, eu não precisaria, primeiramente, usar o "stratify=y" para que o meu y_teste tivesse a mesma distribuição em relação ao y_train? E , em segundo lugar, agora na validação cruzada, eu poderia usar o "StratifiedKFold" para que essa distribuição das classes fosse mantida nos splits gerados? Essa dúvida é porque, não usando o stratify e o StratifiedKfold, poderíamos ter uma distribuição bem diferente das classes entre os conjuntos usados para o treino e para a validação. Qual seria a diferença entre usar e não usar essas estratificações?
Valeu, Humberto!! Usar validação estratificada é legal quando o e desbalanceamento é tão grande que pode correr o risco de não ter observações em algum split dos folds. Isso é comum quando se tem muitas classes. Esse vídeo focaliza mais na forma correta de fazer um balanceamento “artificial” com over ou undersampling, mas o mais certo mesmo é usar class weight. Vamos fazer um vídeo sobre isso :)
tem o link deste notebook disponível?
Tem sim, Letícia!!
github.com/letsdata/oversampling
So gostou do vídeo, estamos com inscrições abertas pra nossa Jornada Cientista de Dados. Inscrições no link:
www.letsdata.ai/jornada
Antes de mais nada, Parabéns pela aula mestre! Quanto ao 'Stratified k-fold cross-validation', será que serve? Li num artigo do Jason Brownlee que pode ser usado, mas não sei até que ponto, ou se existem limitações. Muito obrigado!
Valeu pela força, mestre!!! Vai cair no mesmo problema! Pra usar o stratified certo, só trocar a implementação que fizemos de KFold pra StratifiedKFold. Lembrando que essa estratificação tenta garantir a mesma proporção de classes nos mini-splits, mas se fizer o oversampling antes, a proporção a ser mantida vai estar errada desde o princípio.
Faz sentido, muito obrigado mais uma vez e sucesso ! @@letsdataAI
Não dá pra usar o SMOTE dentro de um Pipeline do imblearn? Nesse caso daria pra usar o cross_val_score normalmente, não?
Vale a pena tentar hein!! Primeiro a terminar manda o gist 😂🙌🏻
Esse problema com a validação cruzada também ocorre quando o class weight é empregado ? (meu palpite seria que não)
Isso! Class weight é usado no treinamento do modelo, ou seja, não muda os splits de validação. Btw: muito melhor usar isso que oversampling :D
Tem vídeo sobre mlflow ?
Boa ideia de vídeo! Vai rolar :)
Se o problema é fazer o balanceamento antes do cross validation, a solução não seria apenas fazer o balanceamento depois do cross_val_score? Não entendo a necessidade de criar um cross val score na mão e o que isso tem a ver
Fala, Eduardo! A ideia é da validação cruzada é comparar modelos. Nesse caso, comparar o modelo treinado sem balanceamento vs com balanceamento. Para realizar uma validação cruzada correta, devemos garantir que as mini-validações não estejam contaminadas e a opção no vídeo foi de solucionar criando uma função de validação cruzada na mão.
eu não consegui reproduzir o código(!pip notebook pandas scikit-learn imblearn), aparece: ERROR: unknown command "notebook"
Faltou o “install”
!pip install notebook pandas…
Faltou o “install”
!pip install notebook pandas…
Leon, bom dia!
pode me ajudar?
Quando tento aplicar aparece o seguinte erro já tentei de tudo e não consigo.
'numpy.ndarray' object has no attribute 'iloc'
Valeu
Bruno, acha a gente lá no instagram pra gente te ajudar mais de perto! Abraço!
Também tive o mesmo problema. Acreditoque o input "X, y" que colocamos no validação_cruzada seja um array, e por isso não dá para utilizar o "iloc" (que é para dataframe).
se vc estiver usando o standartscaler, use somente depois do crossvalidation
Deveria usar o R pelo tidymodels
.
14:12
20:19
.