Melhor abordagem para um projeto de aprendizado de máquina de ponta a ponta [2022]
Publicados: 2021-01-01O aprendizado de máquina está acelerando e tem sido um pomo de discórdia por um longo período de tempo. Alguns algoritmos e arquiteturas muito bons neste domínio tornaram possível que o conceito de Machine Learning fosse aplicado no mundo prático e ao vivo.
Não é mais apenas uma noção para pesquisa e se espalhou profundamente em áreas de aplicação úteis. E hoje, mais do que nunca, há a necessidade de dominar a arte do pipeline de ponta a ponta para projetos de Machine Learning.
Há um interesse crescente em Machine Learning para muitas pessoas e há uma imensa quantidade de recursos disponíveis que podem ajudá-lo a entender os fundamentos de ML e IA. Muitos cursos levam você desde o aprendizado de alguns conceitos básicos até a construção de alguns modelos de última geração.
Mas é isso? Realmente aprendemos como acessar os dados e realmente vemos como limpar os dados para que nosso modelo de ML possa extrair recursos úteis deles? E a parte de implantação? Há tantas perguntas em linhas semelhantes que permanecem sem resposta em nossas mentes depois que concluímos esses cursos e currículos.
Esse problema surge devido a uma má compreensão de um pipeline completo de aprendizado de máquina de ponta a ponta para qualquer projeto. Neste artigo, passaremos por um desses pipelines para entender exatamente o que precisa ser feito para obter melhores resultados em um cenário da vida real para qualquer projeto de ML.
Um dos livros que melhor mostra isso é o Hands-on Machine Learning with Scikit-Learn, Keras e TensorFlow de Aurelien Geron.

Esse pipeline de ponta a ponta pode ser dividido em algumas etapas para melhor compreensão, e são elas:
- Entendendo o enunciado do problema
- Adquirindo os dados necessários
- Entendendo os dados
- Limpando os dados
- Selecionando o melhor modelo para treinamento
- Ajustando os hiperparâmetros
- Apresentando os resultados
- Implantação e manutenção do sistema
Para entender melhor o pipeline de qualquer projeto de Machine Learning da vida real, usaremos o exemplo popular do problema de previsão de preços da California House. Discutiremos todos os pontos acima em relação a esta declaração do problema. Pode haver algumas pequenas mudanças para diferentes projetos, mas no geral o objetivo permanece o mesmo.
Índice
Entendendo o enunciado do problema
Para construir uma boa solução, é preciso entender a declaração do problema com muita clareza. Você provavelmente acabará construindo e treinando um modelo de Machine Learning, mas as áreas de aplicação da vida real precisam de muito mais do que apenas os modelos. A saída do modelo deve corresponder exatamente ao que é necessário para o usuário final.
Para este exemplo específico, recebemos um conjunto de dados de todas as métricas na Califórnia, como população, renda, preços de imóveis e outros. A saída exigida pelo modelo é que ele deve ser capaz de prever o preço da casa, dados seus outros atributos, como localização, população, renda e outros.
A razão importante para esta etapa é entender exatamente o que precisa ser feito e exatamente que tipo de solução é necessária. É aqui que a parte principal do brainstorming é feita sobre como a declaração do problema deve ser abordada.
Leia: Ideias de projetos de aprendizado de máquina para iniciantes
Adquirindo os dados necessários
Depois de entender claramente a declaração do problema e decidir avançar com uma abordagem de aprendizado de máquina para resolver o problema, você deve começar a procurar dados relevantes. Os dados são o ingrediente mais importante de qualquer projeto de Machine Learning, portanto, você deve encontrar e selecionar cuidadosamente apenas os dados de qualidade. O desempenho final dos modelos de ML depende dos dados que foram usados durante o treinamento.
Existem várias fontes para encontrar dados que também podem ajudar a entender a distribuição de dados em exemplos da vida real. Para o nosso exemplo, podemos obter o conjunto de dados de previsão de preços de casas da Califórnia do Kaggle. Esses dados estão no formato CSV e, portanto, usaremos a biblioteca Pandas para carregar o conjunto de dados.
Entendendo os dados
É um aspecto muito importante da solução de ML poder entender os dados com os quais você está trabalhando. Isso nos permite escolher quais algoritmos ou arquiteturas de modelo são mais adequados para o projeto. Antes de começar a analisar os dados em detalhes, é uma boa prática dividir primeiro o conjunto de dados em conjuntos de treinamento e de teste. Isso mantém o conjunto de teste intocado e, portanto, diminui as chances de overfitting ao conjunto de teste. Ao fazer isso, você está eliminando o viés de espionagem de dados do modelo.
Existem várias maneiras de dividir os conjuntos de dados nesses conjuntos de treinamento e teste. Uma delas é dividi-lo com um valor percentual codificado. 90% treinar e 10% testar é um valor comum na maioria dos casos.
Após a divisão, você terá que visualizar o conjunto de trens em profundidade para entender os dados. O conjunto de dados atual inclui os pontos de latitude e longitude e, portanto, é bastante útil usar o gráfico de dispersão para observar a densidade de acordo com os locais.
Encontrar a correlação entre dois atributos no conjunto de dados é útil para entender quais atributos se relacionam mais com o atributo necessário. Nesse caso, precisamos descobrir qual atributo está mais relacionado aos preços das casas no conjunto de dados. Isso pode ser feito facilmente no Scikit-Learn usando o método corr(). Ele retorna um valor para cada atributo em relação a outro. Então, se você precisa ver as relações em relação aos preços das casas, esta é a maneira que você pode fazer:
corr_matrix[“median_house_value”].sort_values(ascending=False)
median_house_value 1,000000renda_mediana 0,687170total_quartos 0,135231habitação_mediana_idade 0,114220famílias 0,064702total_quartos 0,047865população -0,026699longitude -0,047279latitude -0,142826
Aqui, é visível que median_income está diretamente relacionado ao valor da casa e por outro lado o valor da latitude está indiretamente relacionado a ele.
Finalmente, você também pode tentar fazer alguma engenharia de recursos combinando alguns atributos. Por exemplo, total rooms_per_household pode ser muito mais informativo do que total_rooms ou valores domésticos individualmente.
Limpando os dados
Nesta etapa, você prepara os dados para o projeto de Machine Learning. É a etapa mais demorada e importante de todo o pipeline. O desempenho do modelo depende principalmente de quão bem você prepara os dados. Normalmente, é uma boa prática escrever funções para esta finalidade, pois permitirá que você use essas funções sempre que necessário e as mesmas funções podem ser usadas na linha de produção para preparar os novos dados para previsões.
Um dos problemas mais encontrados em dados reais são os valores ausentes para algumas entradas no conjunto de dados. Existem algumas maneiras de lidar com isso. Você pode excluir diretamente o atributo inteiro, mas isso não é muito bom para o modelo. Você pode se livrar da linha que tem um valor ausente. Outra maneira que é mais usada é definir o valor ausente para algum outro valor, como zero ou a média aritmética de toda a coluna, se for um valor numérico.
Para valores categóricos, é melhor representá-los por números e codificá-los em uma codificação one-hot para que seja mais fácil para o modelo trabalhar nele. O Scikit-Learn também fornece a classe OneHotEncoder para que possamos converter facilmente valores categóricos em vetores one-hot.
Outra coisa que você tem que cuidar é o dimensionamento de recursos. Pode haver alguns atributos cujas faixas de valores são muito drásticas. Portanto, é melhor dimensioná-los para uma escala padrão para que o modelo possa trabalhar facilmente com esses valores e ter um desempenho melhor.

Leia também sobre: Salário de Engenheiro de Machine Learning na Índia
Selecionando o melhor modelo para treinamento
Depois de concluir toda a limpeza de dados e engenharia de recursos, a próxima etapa se torna bastante fácil. Agora, tudo o que você precisa fazer é treinar alguns modelos promissores nos dados e descobrir o modelo que fornece as melhores previsões. Existem algumas maneiras que nos ajudam a selecionar o melhor modelo.
Nosso exemplo da previsão do preço da casa na Califórnia é um problema de regressão. Isso significa que temos que prever um valor a partir de um intervalo de números que é, neste caso, o preço da casa.
O primeiro passo aqui é treinar alguns modelos e testá-los no conjunto de validação. Você não deve usar o conjunto de teste aqui, pois isso levará a um overfitting no conjunto de teste e, eventualmente, o modelo terá uma regularização muito baixa. Desses modelos, o modelo com boa precisão de treinamento e precisão de validação deve ser escolhido na maioria das vezes. Também pode depender do caso de uso, pois algumas tarefas exigem configurações diferentes de outras.
Como já limpamos os dados e as funções de pré-processamento estão prontas, é muito fácil treinar diferentes modelos em três a quatro linhas de código usando alguns frameworks como Scikit-Learn ou Keras. No Scikit-Learn também temos uma opção de validação cruzada que ajuda muito a encontrar bons hiperparâmetros para modelos como árvores de decisão.
Ajustando os hiperparâmetros
Depois de ter alguns modelos selecionados, surge a necessidade de ajustar os hiperparâmetros para liberar seu verdadeiro potencial. Há muitas maneiras de conseguir isso também. Uma delas é que você pode alterar manualmente os hiperparâmetros e treinar os modelos repetidamente até obter um resultado satisfatório. Aqui você pode ver claramente o problema de que você não pode verificar tantas combinações quanto uma tarefa automatizada faria. Então aqui vem alguns bons métodos para automatizar essas coisas.
Grid Search é um recurso maravilhoso fornecido pelo Scikit-Learn na forma de uma classe GridSearchCV onde ele faz a validação cruzada por conta própria e descobre os valores de hiperparâmetros perfeitos para obter melhores resultados. Tudo o que temos a fazer é mencionar quais hiperparâmetros ele tem que experimentar. É um recurso simples, mas muito poderoso.
A pesquisa aleatória é outra abordagem que pode ser usada para um propósito semelhante. O Grid Search funciona bem quando há um pequeno espaço de hiperparâmetros a serem experimentados, mas quando há um grande número de hiperparâmetros, é melhor usar o RandomizedSearchCV. Ele tenta hiperparâmetros aleatórios e apresenta os melhores valores que já viu.
Por último, mas não menos importante, é a abordagem do Ensemble Learning . Aqui podemos usar vários modelos para dar suas respectivas previsões e, por fim, podemos escolher a previsão final quanto à média de todos. Este é um método muito promissor e ganha muitas competições no Kaggle.
Depois de ajustar todos os hiperparâmetros para o modelo final, você pode usar o modelo para fazer previsões no conjunto de teste. Aqui podemos avaliar o desempenho do modelo no conjunto de teste. Lembre-se de que você não deve ajustar seu modelo depois disso para aumentar a precisão no conjunto de teste, pois isso levará a um ajuste excessivo nas amostras do conjunto de teste.
Apresentando os resultados
Uma vez selecionado o melhor modelo e feita a avaliação, há a necessidade de exibir adequadamente os resultados. A visualização é a chave para criar melhores projetos de Machine Learning, pois trata-se de dados e compreensão dos padrões por trás deles. Os resultados numéricos brutos podem parecer bons para pessoas já familiarizadas com este domínio, mas é muito importante visualizá-lo em gráficos e tabelas, pois torna o projeto atraente e todos podem ter uma visão clara do que realmente está acontecendo em nossa solução.
Implantação e manutenção do sistema
A maioria dos alunos chega a esse estágio do pipeline e enfrenta enormes problemas ao tentar implantar o projeto para aplicação em um cenário da vida real. É muito fácil construir e treinar modelos em um Jupyter Notebook, mas a parte importante é salvar com sucesso o modelo e usá-lo em um ambiente ao vivo.
Um dos problemas mais comuns enfrentados pelos engenheiros de ML é que há uma diferença entre os dados recebidos ao vivo e os dados nos quais eles treinaram o modelo. Aqui podemos usar as funções de pré-processamento que construímos ao criar o pipeline para treinar nossos modelos.
Existem dois tipos de modelos de Machine Learning que podem ser implantados: um modelo online e um modelo offline. O modelo online é aquele que continua aprendendo com os dados que está recebendo em tempo real. Modelos offline não aprendem com novas amostras e precisam ser atualizados e mantidos adequadamente se houver uma mudança no tipo de dados recebidos por eles. Portanto, é necessário que haja manutenção adequada para ambos os tipos de modelos.
Ao implantar modelos de aprendizado de máquina, eles precisam estar envolvidos em uma plataforma para que os usuários tenham facilidade em interagir com eles. As opções são amplas, podemos envolvê-lo em um aplicativo da Web, aplicativo Android, API Restful e muito mais. O conhecimento básico da construção de tais aplicativos ou APIs é um grande ponto positivo. Você deve poder implantar aplicativos NodeJS ou Python em serviços de nuvem como Google Cloud Platforms, Amazon Web Services ou Microsoft Azure.

Se você não estiver confortável com alguns frameworks como Django ou Flask, você pode experimentar o Streamlit, que permite implantar um código python na forma de um aplicativo da web em apenas algumas linhas de código adicional. Existem várias bibliotecas e frameworks que podem ser explorados.
Conclusão
Para concluir todo este artigo, eu diria que os projetos de Machine Learning são bem diferentes de outros projetos tradicionais em termos de pipeline e se você conseguir dominar esse pipeline, todo o resto fica muito mais fácil.
Algumas das etapas mais importantes desse pipeline de ponta a ponta que muitos iniciantes tendem a negligenciar são a limpeza de dados e a implantação do modelo. Se essas etapas forem atendidas, o restante da parte será como qualquer outro projeto.
Seguir essas etapas e ter um pipeline definido para projetos ajuda você a ter uma visão clara sobre as tarefas, e a depuração dos problemas se torna mais gerenciável. Portanto, sugiro que você siga essas etapas e tente implementar um projeto de Machine Learning de ponta a ponta usando esta lista de verificação. Pegue uma declaração de problema, encontre o conjunto de dados e siga em frente para se divertir em seu projeto!
Se você estiver interessado em aprender mais sobre aprendizado de máquina, confira o PG Diploma in Machine Learning & AI do IIIT-B e upGrad, projetado para profissionais que trabalham e oferece mais de 450 horas de treinamento rigoroso, mais de 30 estudos de caso e atribuições, IIIT- B Status de ex-aluno, mais de 5 projetos práticos práticos e assistência de trabalho com as principais empresas.
O que é aprendizado de máquina ou ML?
A capacidade de um sistema de aprender uma tarefa sem ser explicitamente programada a partir dos dados fornecidos é chamada de aprendizado de máquina. Este campo se concentra no desenvolvimento de programas de computador que podem acessar dados e aprender por conta própria. É um subcampo do vasto assunto da inteligência artificial (IA). O aprendizado de máquina está sendo implementado em quase todos os setores para aumentar a produtividade, marketing, vendas, satisfação do cliente e lucro corporativo. Muitos especialistas em TI se interessaram por isso e estão pensando em mudar de carreira.
O que são projetos de ML de ponta a ponta?
Projetos de aprendizado de máquina de ponta a ponta envolvem etapas como preparação de dados, treinamento de um modelo nele e implantação desse modelo. Consiste em pipelines que são as formas de escrever o código e automatizar o processo de trabalho. Esses pipelines, quando compilados corretamente, levam à formação de um projeto de aprendizado de máquina bem-sucedido. Entender a declaração do problema, obter os dados apropriados, compreender os dados, limpar os dados, selecionar o modelo ideal para treinamento, ajustar os hiperparâmetros e apresentar os resultados são apenas algumas das etapas envolvidas.
O que são hiperparâmetros no aprendizado de máquina?
Um hiperparâmetro é um parâmetro em aprendizado de máquina cujo valor é usado para influenciar o processo de aprendizado. Eles podem ser classificados em duas partes, hiperparâmetros de modelo e hiperparâmetros de algoritmo. Os hiperparâmetros de modelo não podem ser assumidos ao servir a máquina para o conjunto de treinamento porque eles direcionam para a tarefa de seleção de modelo. Por outro lado, os hiperparâmetros do algoritmo não afetam o desempenho do modelo, mas influenciam a velocidade e a qualidade do processo de aprendizado. Diferentes hiperparâmetros são exigidos por diferentes técnicas de treinamento de modelo, mas existem alguns algoritmos básicos que não precisam de hiperparâmetros.