Cross Validate em modelos de Machine Learning
• Olá TabNewers, e TabCoders 😄, sou o Ricardo Castle.
• Hoje, vamos falar um pouco sobre validação cruzada em machine learning.
• É comum desenvolvermos os nossos modelos usando os métodos tradicionais "train_test_split" para fazer a segregação de dados de treino e teste para os nossos modelos.
• Porém, há desvantagens nesta abordagem, a primeira é que estaremos dependentes da aleatoriedade no momento da segregação dos nossos dados. O que torna o nosso modelo não muito eficiente.
• Para solucionarmos isso, podemos setar um SEED, diretamente no método do "numpy", que esta dentro de random.seed(). Porém ainda assim, estaríamos dependentes da aleatoriedade do SEED.
• Uma alternativa mais eficiente é usarmos o método da validação cruzada. Mas antes, vamos analisar o seguinte:
-
Imagine que temos um aluno que na primeira prova teve nota 2. Muitas vezes não é que o aluno não compreendeu a matéria, talvez ele esteve com problemas na família, no relacionamento e a sua cabeça no momento da prova este em outro lugar. Para ter a certeza ele fará mais duas provas, na segunda terá 4 e na terceira terá 10. Para sabermos o nível de desempenho do aluno teremos que encontrar a média de todas as notas, neste caso teremos (2+4+10)/3, na qual teremos: 5,3. Logo, com este dado saberemos como lidar com este aluno.
-
Levando esta analogia no nosso modelo, ao invés de realizarmos um e único teste com uma e única segregação dos dados e que será de maneira aleatória. Podemos fazer vários testes e treinos de maneira cruzada, eliminando assim a aleatoriedade. E no final só precisaremos encontrar a média de todos os treinos e testes feitos.
• COMO ESTE CRUZAMENTO ACONTECE?
- Geralmente, definimos a quantidade de pedaços dos dados que serão separados e das vezes que os mesmos serão treinados e testados.
• Exemplo: Temos 1000 dados no nosso DataSet, 700 para treino e 300 para teste.
• Aplicando a validação cruzada usamos o seguinte:
pedaços a serem separados = 4 ( que também será o número de vezes que serão repetidos os treinos e testes )
• A cada repetição, ele pega os dados de maneira cruzada.
• Pegou, até aqui pessoal ? 😄. Bora continuar. Segura só mais um pouco.
• IMPLEMENTANDO EM PYTHON,
- Para isso, usaremos a biblioteca Sklearn, na qual tem uma feature para a validação cruzada, que se chama cross_validade().
° Implementando:
from sklearn.model_selection import cross_validate
model = DecisionTreeClassifier()
results = cross_validate(model, x, y, cv = 4)
print(results['test_score'])
• Está é a implementação do método cross_validate. Ele recebe o estimador que estivermos usando, depois as nossas features(x) e a label(y).
• Porém ainda há um problema neste cross_validate, que é o valor do cv ( quantidade de pedaços a separar os dados e as vezes de repetição do treino e teste ).
• Mas, este pode ser um assunto, para um próximo tutorial. O que achou do conteúdo ?