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

Dificuldades com manipulação dos dados

Ola a todos,

Sei que esta dúvida é meio complexa/específica e de forma nenhuma quero abusar da boa vontade de vc's que tem me ajudado tanto neste processo de aprendizado em machine learning.

Quero de antemão também agradecer, tudo que evolui até agora foi graças ao curso de vc's, então valeu!

Estou implementando uma máquina para detecção de fake news utilizando o Liar Dataset ( https://github.com/thiagorainmaker77/liar_dataset.git )

Comecei aplicando as técnicas básicas, fiz algumas junções de classificadores, mas não obtive um grande avanço com os trabalhos já realizados neste mesmo banco;

Me recomendaram usar a biblioteca DesLib (https://deslib.readthedocs.io/en/latest/) que serve para comparação de classificadores.

Minha dificuldade esta em achar a ferramenta que vai preparar os dados de entrada dos métodos da DesLib,

se eu usar o CountVectorizer por exemplo, ele me gera 3 matrizes distintas ( teste, validação e treino) cada uma com um tamanho (largura) diferente, o que impossibilita o funcionamento da biblioteca. Uma alternativa é juntar validação+teste+treino, aplicar o CountVectorizer e depois fazer um kfold x, Ok, isso funciona, mas ai eu n tenho como comparar com os outros trabalhos já realizados.

5 respostas

Olá Thiago, ficamos felizes em saber que estamos colaborando com seus objetivos.

Bom vamos passo a passo.

Primeiramente, talvez seu resultado não estejam ruim se vocês estiver comparando com a literatura é importante verificar quais métodos os respectivos estão usando. Agora casos as técnicas sejam as mesmas ou similares é importante entender onde pode estar o "gap", em suma é importante ter um baseline para comparação e ainda mais interessante se as técnicas forem semelhantes. Caso não tenha você pode criar seu baseline com um classificar simples (DummyClassifier do SKlearn por exemplo).

Agora partimos para a biblioteca, não conhecia a DesLib mas achei a proposta interessante. Dei uma batida de olho no artigo deles e aparentemente o que eles fazem é selecionar o melhor classificador utilizando alguma das métricas implementada na Lib (o mais legal é que isso é de forma dinâmica, propósta bem interessante), o que da para comparar na verdade são as métricas utilizada por eles e internamente cada modelo compara os diversos classificadores. Ok, isso provavelmente você já sabe, mas é importante deixar claro para outros alunos que vão ler esse post em algum momento.

Pelos exemplos da documentação é preciso dados de treino, teste e validação. Você já tem esses dados segregados o que precisa gerar são as representações vetoriais dos textos.

Minha sugestão:

  • Treina o CountVectorizer com seus dados de treino. (CountVectorizer.fit_transform(X_treino)).

  • Agora você gera a representação dos dados de teste e validação com o CountVectorizer.transform()

    Após isso você terá as representações dos dados de treino, teste e validação (inclusive sem bies viés nos dados de teste e validação), então é só aplicar o Dislib igual ao tutorial.

Bom espero que ajude! Precisando de mais alguma coisa é só pergunta.

Abraços e boa jornada!

Bom dia Thiago,

Primeiro quero agradecer a pronta resposta, já esperava isso, uma regra que não tem não muda é que todo Thiago é gente boa :).

Fico feliz de, em alguma medida, te apresentar esta biblioteca, ela foi incorporada ao sklearn a pouco tempo, e quem sabe vc possa aplicar ela em algum problema futuro e isso venha te ajudar. Eu ficaria feliz com isso.

Bom, de fato eu tenho parâmetros para comparação, a literatura raramente passa dos 25% no F1Score, e eu ( em grande parte tenho que agradecer a vc e aos outros professores da alura), já consegui chegar a 28.5%.

Bom o fato foi que eu tentei fazer exatamente isso que você me recomendou, o problema é que meus dados de teste, treino e validação n são exatamente do mesmo tamanho, quando eu aplico as técnicas de extração de características as matrizes ficam assim:

Treino(10240, 11915) (10240,)

Teste (1267, 4116) (1267,)

Validação (1284, 4104) (1284,)

E aparentemente a "largura" da matriz tem que ser a mesma para a Deslib. ao menos foi o que eu entendi pelo erro.

Fiz esta implementação para mostrar o problema que eu estou tendo:

https://github.com/thiagorainmaker77/fakenews_detection/blob/master/teste_deslib_.ipynb

Sei novamente que estou pedindo muito, mas eu realmente n tenho a quem recorrer, então... valeu mesmo pela resposta anterior, e se puder me ajudar nisso ficarei extremamente agradecido.

So para complementar, aparentemente os dataset de treino e validação tem q ter a mesma largura. em NLP isso não acontece. Acontece?

https://github.com/thiagorainmaker77/fakenews_detection/blob/master/implemantacao_teste.ipynb

Vlw!

Opa! saudações a todos.

Descobri a solução, basta usar o fit_transform no dataset de treino e somente o transform no de teste e validação; Valeu!

solução!

O Thiago nos que agradecemos!

Talvez minha resposta não tenha sido tão clara, mas foi isso que eu queria dizer mesmo auhauhauhauh...

Obrigado!