Skip to content

Latest commit

 

History

History
128 lines (121 loc) · 12.1 KB

3-Random-Forest-Classifier-Active-Learning.md

File metadata and controls

128 lines (121 loc) · 12.1 KB
PROJETO OBJETIVO TIPO DE DADOS TIPO MACHINE LEARNING
Recomendador de vídeos do youtube Entender Ciência de dados na prática Time Series Supervisionado
LinkedIn : https://www.linkedin.com/in/claudineien/

2o Modelo Machine Learning - RandomForestClassifier

Nesta etapa o objetivo é aprendermos algumas técnicas para obter um modelo machine learning melhor que o anterior.

Para alcançar este objetivo vamos aprender a utilizar o algoritmo RandomForestClassifier, aprender os algoritmos TfidfVectorizer da sklearn.feature_extraction.text e scipy.sparse e também aprenderemos como aplicar a técnica Active Learning.


Utilizaremos o arquivo raw_data_with_labels.csv e faremos conforme documento 2-Decision-Tree-Classifier.md até a criação das features.

MODELO MACHINE LEARNING

Após criamos as features, vamos separar o dataset de treino e dataset teste por data de publicação/upload, por ser uma time series.

Vamos transformar as strings dos títulos dos vídeos dos datasets treino e dataset teste em uma representação numérica significativa criando uma matriz esparsa (*1) com o algoritmo Term-frequency TfidfVectorizer (*2), para reduzir de forma inteligente a quantidade de elementos a consultar. As figuras a seguir nos mostram que reduziremos de 44004 elementos para 1277 elementos :
Linha 24 do notebook

Linha 25 do notebook

Outra boa e comum prática é concatenaremos dados numéricos com dados string ou concatenarmos matriz densa com matriz esparsa, e para isto utilizaremos a biblioteca scipy.sparse

Após estas técnicas vamos treinar o algorítmo RandomForestClassifier configurando o argumento class_weight="balanced" (mesmo objetivo do explicado no documento 2-Decision-Tree-Classifier.md).

AS MÉTRICAS DE CLASSIFICAÇÃO

Visualizaremos a métrica predict_proba do algorítmo RandomForestClassifier para verificar a distribuição da probabilidade prevista da classe label 1 do dataset. Esta é importante para calcular a pontuação no auc-roc conforme imagem a seguir :

roc_auc_score - probability estimates which sum to 1

A métrica average precision da biblioteca sklearn.metrics conforme imagem a seguir informa que o algorítmo teve um percentual de 19,49% de exemplos positivos, que representa vídeos cujo labelling é 1 (*3).

A métrica auc-roc da biblioteca sklearn.metrics conforme imagem a seguir informa que o algorítmo teve uma probabilidade percentual de 59,58% de selecionar os exemplos positivos, que representa vídeos cujo labelling é 1 (*3).

Esta serve para melhor visualizarmos o ranking dos vídeos : dos mais interessantes para os menos interessantes.

Importante :
O objetivo em ambos métricas average precision e auc-roc é alcançar 1.0 ou o valor mais próximo possível, sendo esta a nossa baseline técnica em machine learning.

Aqui vamos perceber que houve uma pequena melhora nas métricas com o mesmo tuning aplicado no algorítmo DecisionTreeClassifier e RandomForestClassifier. Vamos aplicar a técnica active learning para melhorar mais as métricas.

ACTIVE LEARNING

Dependendo do projeto, a coleta de mais dados assim como fazer anotações pode aumentar desnecessariamente o investimento financeiro e/ou tempo para finalizá-lo, e realizar anotações aleatórias sem um conhecimento qualificado pode prejudicar o modelo preditivo de machine learning. Por exemplo :
Imagens radiográficas, ressonância magnética e similares precisam de especialistas médicos para fazer anotações de tumor maligno, tumor benigno, não tumor. Estes especialistas são caros e o active learning ajuda a reduzir investimentos na coleta das anotações com estes profissionais.

A técnica Active Learning de forma rápida vai nos ajudar a :

  1. entender o motivo de precisarmos de mais dados em nosso dataset
  2. selecionar e disponibilizar os dados mais difíceis do modelo machine learning predizer
  3. selecionar os melhores exemplos-dados em datasets para fazermos as anotações
  4. gerar mais exemplos reais para fazer anotações
  5. agilizar na coleta das anotações em projetos com prazo curto para fazer anotações
  6. facilitar a coleta das anotações de profissionais especialistas como médicos, biólogos, astronomos, entre outros
  7. desenvolver modelos machine learning mais performáticos
  8. evitar altos custos em qualquer projeto
  9. economizar investimentos financeiros em qualquer projeto
  10. agilizar no desenvolvimento de testes em modelos preditivos machine learning

Vamos pegar o dataset original raw_data_with_labels.csv, executar o processo de separação de dados, limpeza de dados, transformação de dados, que são 99% iguais aos que aprendemos nos notebooks 1-dataset-collect-clean.md e 2-Decision-Tree-Classifier.md, vamos trazer apenas os registros cuja coluna Y seja nula, aplicaremos o algorítmo predict_proba do algorítmo RandomForestClassifier sob os títulos de vídeos e gravaremos o resultado no dataset, em um novo campo p (probabilidade). Então selecionaremos os vídeos mais próximos da fronteira dos 50% positivo e 50% negativo (verdadeiro ou falso), por que são os mais prováveis de acertar mesmo sendo difíceis do modelo predizer.

Atenção :
Dependendo da quantidade de dados no dataset, será necessário considerar dados mais distantes da fronteira 50-50.
Outro detalhe é que amostras muito distantes da fronteira, provavelmente são vídeos que realmente não assistiremos.

Neste processo nós programaremos um intervalo fixo para pegar entre 70 e 75 registros e deixaremos aleatório entre 30 e 25 registros, desconsiderando os já selecionados, é claro.

Por fim, geraremos o arquivo active_labels.csv com estes aproximadamente 100 registros a mais, para fazermos as anotações e melhorar nosso modelo machine learning.

Dicas :

  • A função scipy sparse é mais performática do que a função numpy sparse.
  • É comum concaternar matriz esparsa com matriz densa
  • Formatação de datas : Fique atento à formatação de datas de português para inglês ou vice-versa.
  • Número : O local do ponto na numeração em português é diferente do em inglês.
  • Transformar Data em valor numérico : O formato número é mais eficiente aos algoritmos machine learning.
  • Modelo ml x Realidade : Para melhor eficiência do modelo machine learning os dados de treino e de teste devem ser o mais semelhantes possível a rotina da realidade em uma empresa ou em uma pesquisa de campo.
  • Métrica realística : Encontrar características iguais entre os dados, ainda que seja necessário converter quantidade de dados x por ano em por dia. Ex : Upload de vídeos por dia, visualizações por dia ou algo semelhante.
  • Features x Banco de dados : Em um projeto real se houver muitas features, uma boa atitude é salvar em banco de dados.

Nota :
(*1) Matriz esparsa é aquela que armazena valores diferentes de zero e isto significa matriz mais otimizada.
(*2) TfidfVectorizer reduz o impacto de tokens que ocorrem com muita frequência dando mais peso as palavras que aparecem com menor frequência por linha de vídeo, considerando todas as linhas do dataset e vai ignorar as palavras que repetem em todas as linhas de vídeos, dentro do dataset.
Utilizar o objeto TfidfVectorizer para transformar textos em uma representação significante de números, utilizar a predição do algoritmo DecisionTreeClassifier, analisar sua probabilidade de acerto de predição e sua precisão curva ROC.
Ex : machine e learning apareceram em praticamente todos os vídeos e terão um peso menor.
O argumento min_df do algoritmo TfidfVectorizer :
-> min_df=2 : o algorítmo vai considerar significante as palavras que aparecerem o mínimo possível por linha dentro do conjunto de linhas dentro do dataset.
-> min_df=1 : o algorítmo vai considerar significante cada palavra diferente encontrada, por linha dentro do conjunto de linhas dentro do dataset. Uma palavra considerada única em uma linha, pode estar na linha seguinte e será considerada incorretamente como difrentes, então dependendo do projeto esta configuração pode prejudicar.
(*3) Labelling 0 -Vídeo que provavelmente não vamos assistir; Labelling 1 -Vídeos que provavelmente vamos assistir



Fontes de estudo :