Automated Machine Learning: conceitos e ferramentas de código aberto

Fernando Zagatti
b2w engineering
Published in
10 min readJan 27, 2021

Você conhece o Automated Machine Learning (AutoML)? Essa é uma nova abordagem para o aprendizado de máquina, que visa automatizar o processo de criação de um modelo e auxiliar os cientistas de dados e inserir pessoas não especialistas no desenvolvimento!

Source

Quando nós falamos de aprendizado de máquina, é inevitável pensar nas amplas possibilidades que ele nos oferece. Os domínios de aplicação são vastos, há diversas maneiras de processar e analisar dados, além de inúmeros algoritmos de aprendizado. Desta forma, o cientista de dados precisa ter um amplo conhecimento das técnicas disponíveis, possibilitando a identificação do melhor caminho a se seguir em cada aplicação.

Certo, mas o que é o aprendizado de máquina?

O aprendizado de máquina é um método de análise de dados que procura melhorar o desempenho na realização de determinada tarefa a partir de experiência, ou seja, o aprendizado de máquina utiliza técnicas de computação e estatística para conseguir identificar padrões em dados e, assim, realizar previsões para novos casos.

O desenvolvimento de um modelo de aprendizado de máquina normalmente segue um fluxo de atividades, no qual cada etapa tem sua determinada característica e técnicas que contribuem para que o modelo final alcance bons resultados. Confira:

  • Data preparation: aquisição, limpeza e preparação dos dados;
  • Feature engineering: transformação dos dados;
  • Model selection: seleção do algoritmo de aprendizado de máquina;
  • Algorithm configuration: configuração dos hiperparâmetros do algoritmo selecionado;
  • Evaluation: avaliação dos resultados.

Esse fluxo é iterativo e não há uma solução única que seja melhor para todos os casos. Deste modo, é necessário a investigação em cada etapa de quais técnicas e valores de hiperparâmetros contribuem para melhores resultados das tarefas abordada.

Em cada uma das etapas, o usuário terá uma vasta opção de técnicas e valores de hiperparâmetros que podem ser escolhidas. Assim, utilizando de seu conhecimento prévio, o usuário explora esse espaço de opções em um processo de tentativa e erro, procurando por um resultado satisfatório.

Pensando em resolver esta questão, o campo de AutoML visa automatizar cada uma das etapas do processo de criação de modelos de aprendizado de máquina de uma maneira objetiva e orientada a dados, reduzindo a necessidade de interferência humana, e a dificuldade de acesso ao uso de aprendizado por usuários não especialistas.

Então, como o AutoML funciona?

AutoML vem para solucionar as tarefas repetitivas no processo de criação de modelos de aprendizado de máquina. Com ele, a exploração de opções de técnicas e valores de hiperparâmetros para cada uma das etapas envolvidas no processo é retirada do usuário e realizada de maneira automática por determinados algoritmos.

Tais algoritmos variam de técnicas simples a mais complexas, sendo definidos pela busca da melhor combinação de técnicas e valores de hiperparâmetros. Alguns exemplos são:

  • Grid Search: uma das técnicas mais simples e largamente utilizada. Realiza uma busca sequencial simples no espaço. No entanto, sofre com a baixa escalabilidade, uma vez que a Grid Search é altamente influenciada pela dimensão do espaço de busca, pois o número de combinações cresce exponencialmente com o número de hiperparâmetros e o tamanho do escopo definido;
  • Random Search: uma alternativa à Grid Search é a Random Search. Como o nome sugere, os hiperparâmetros são selecionados aleatoriamente até que um critério de parada seja atendido, por exemplo, tempo de busca. A principal vantagem dessa técnica é que ela ajuda a evitar mínimos locais;
  • Otimização Bayesiana: a otimização Bayesiana ajusta iterativamente um modelo suplementar às observações da função alvo. Em seguida, ela usa uma função de aquisição para determinar os próximos pontos candidatos, com base na distribuição preditiva do modelo suplementar. Com o aumento do número de observações, a distribuição preditiva do modelo suplementar melhora, consequentemente. O algoritmo tem uma melhor suposição de quais regiões no espaço de parâmetros valem a pena explorar e quais não.

Ferramentas de código aberto para AutoML

Existem várias opções de ferramentas de AutoML, tanto comerciais quanto de código aberto. O foco aqui está em alternativas de código aberto. Dessa forma, foram selecionadas quatro ferramentas com características distintas, que variam no seu escopo de aplicação. As ferramentas são, respectivamente:

  • Learn2Clean;
  • Auto-Sklearn;
  • AutoKeras;
  • AutoVIML.

A seguir, faremos uma breve descrição das ferramentas listadas e uma demonstração de como utilizá-las.

Learn2Clean

Learn2Clean é uma ferramenta com foco na automatização do data preparation, ou seja, na limpeza dos dados para o algoritmo de aprendizado de máquina. Com o auxílio do Qlearning, um modelo de aprendizado de máquina por reforço, a ferramenta consegue identificar os melhores passos para a limpeza do conjunto de dados.

Source

Como pode ser observado pela imagem, o Learn2Clean realiza uma série de preparações (podendo-se citar imputação de dados, remoção de outliers, detecção de inconsistências e normalizações) e efetua a avaliação do modelo gerado através do método escolhido pelo usuário. Após a avaliação, este ciclo se repete repetidamente e o algoritmo procura a melhor combinação de técnicas para aquele determinado conjunto de dados.

Como estamos falando de AutoML, o código de utilização é bem simples. Para este exemplo, foi realizado a leitura do conjunto de dados (que no caso foi o Titanic) e logo em seguida é instanciado a classe Qlearner para realizar a preparação dos dados.

import learn2clean.loading.reader as rd
import learn2clean.qlearning.qlearner as q1
# the results of Learn2Clean cleaning are stored in 'titanic_example'_results.txt in 'save' directory
titanic = ["../datasets/titanic//titanic_train.csv","../datasets/titanic/test.csv"]
hr = rd.Reader(sep=',', verbose=False, encoding=False)
dataset = hr.train_test_split(titanic, 'Survived')
l2c_classification1 = q1.Qlearner(dataset = dataset,
goal = 'CART',
target_goal = 'Survived',
threshold = 0.6,
file_name = 'titanic_example',
verbose = False)
l2c_classification1.learn2clean()

A classe em questão possui alguns parâmetros que o desenvolvedor precisa passar para a correta preparação dos dados. Os três primeiros são obrigatórios, visto que é onde o Learn2Clean receberá o dataset, o método avaliativo e o target do conjunto de dados. Como todo algoritmo de aprendizado de máquina, é possível configurar mais parâmetros a fim de tentar obter resultados mais satisfatórios.

Auto-Sklearn

Construído em torno da biblioteca de aprendizado de máquina do scikit-learn, o kit de ferramentas Auto-Sklearn procura automaticamente o algoritmo de aprendizado adequado para um novo conjunto de dados e otimiza seus hiperparâmetros.

Para realizar essa tarefa, ele utiliza técnicas como a otimização Bayesiana, meta-aprendizado e construção de comitês de classificadores. O Auto-Sklearn suporta tarefas de aprendizagem de máquina supervisionada de classificação ou regressão, mas limita-se a dados estruturados.

Atualmente, uma nova versão do kit de ferramentas está em desenvolvimento, denominada Auto-Sklearn 2.0. A atualização tem foco em melhorias na execução para grandes conjuntos de dados.

A utilização da ferramenta é simples e direta. Basta importar o módulo adequado e instanciar a classe para tarefa em questão: AutoSklearnClassfier() para problemas de classificação ou AutoSklearnRegressor() para problemas de regressão.

Uma vez instanciado, podemos iniciar o processo de construção automática de um modelo. Basta utilizar o método “fit” que recebe como parâmetro o conjunto de dados de treinamento e seus respectivos rótulos.

Por padrão, o tempo de treinamento leva uma hora e, ao final, temos um modelo pronto para gerar predições em dados não observados. Agora, é só utilizar o método “predict” e informar os dados.

A figura a seguir exibe um exemplo de utilização da ferramenta, desde o carregamento do conjunto de dados até a geração de predições e métricas de avaliação do modelo.

import autosklearn.classification
import sklearn.model_selection
import sklearn.datasets
import sklearn.metrics
X, y = sklearn.datasets.load_digits(return_X_y=True)
X_train, X_test, y_train, y_test = \
sklearn.model_selection.train_test_split(X, y, random_state=1)
automl = autosklearn.classification.AutoSklearnClassifier()
automl.fit(X_train, y_train)
y_hat = automl.predict(X_test)
print("Accuracy score", sklearn.metrics.accuracy_score(y_test, y_hat)

Ainda é possível restringir o espaço de busca do Auto-Sklearn, limitando as opções de algoritmos que a ferramenta pode explorar durante a busca pela melhor solução.

O usuário também pode especificar quais técnicas de pré-processamento serão aplicadas ou desabilitá-las como na figura a seguir.

import autosklearn.classificationautoml = autosklearn.classification.AutoSklearnClassifier(
include_estimators=["random_forest", ], exclude_estimators=None,
include_preprocessors=["no_preprocessing", ],
exclude_preprocessors=None)
automl.fit(X_train, y_train)
predictions = automl.predict(X_test)

AutoKeras

AutoKeras é um sistema AutoML baseado na biblioteca de redes neurais artificiais Keras. O foco do sistema é a construção automática de arquiteturas de redes neurais profundas, com foco na resolução de tarefas de aprendizagem de máquina supervisionada de classificação e regressão.

O sistema suporta ambos dados estruturados e não-estruturados, como dados de imagem ou texto, sendo possível realizar tarefas multimodais, utilizando ambos tipos de dados simultaneamente.

O AutoKeras realiza o procedimento denominado Neural Architecture Search (NAS), uma pesquisa pela melhor arquitetura de rede neural artificial para uma determinada tarefa.

O NAS do AutoKeras utiliza o “morfismo de rede”, um método que mantém a funcionalidade da rede enquanto realiza mudanças na arquitetura, junto com a otimização Bayesiana, que guia o morfismo de rede para uma pesquisa de rede neural mais eficiente.

A figura a seguir apresenta um caso simples da utilização do AutoKeras, usado para a construção automática de uma arquitetura de rede neural adequada à tarefa de classificação de imagens.

from tensorflow.keras.datasets import mnist
from tensorflow.python.keras.utils.data_utils import Sequence
import autokeras as ak
(x_train, y_train), (x_test, y_test) = mnist.load_data()
clf = ak.ImageClassifier(overwrite=True, max_trials=1)
clf.fit(x_train, y_train, epochs=10)
predicted_y = clf.predict(x_test)
print(clf.evaluate(x_test, y_test))

Ainda, é possível customizar o espaço de busca onde a pesquisa será realizada, especificando que técnicas e arquiteturas que serão utilizadas na construção do modelo final.

Source

Cada etapa na figura acima é chamada de bloco. Elas variam de técnicas de pré-processamento a redes neurais completas, sendo conectadas sequencialmente.

Para implementar um espaço de busca como o da figura anterior, podemos fazer uso da API AutoModel no AutoKeras da seguinte maneira.

import autokeras as akinput_node = ak.ImageInput()
output_node = ak.Normalization()(input_node)
output_node1 = ak.ConvBlock()(output_node)
output_node2 = ak.ResNetBlock(version='v2')(output_node)
output_node = ak.Merge()([output_node1, output_node2])
output_node = ak.ClassificationHead()(output_node)
auto_model = ak.AutoModel(inputs=input_node,
outputs=output_node,
overwrite=True,
max_trials=1)

Todas as tarefas suportadas pelo AutoKeras podem ser realizadas através de modelos customizados, permitindo que usuários tenham mais controle sobre o processo.

AutoVIML

Diferente das outras plataformas apresentadas, além de realizar o método automático de aprendizado de máquina, o AutoVIML procura deixar as etapas realizadas em seu processamento facilmente visíveis e interpretáveis para o usuário. É justamente desta característica que vem o seu nome, Automated Variant Interpretable Machine Learning.

Uma das maiores características presentes dentro da ferramenta AutoVIML é o AutoNLP, ou seja, é detectado variáveis textuais, realizando o processamento de língua natural nessas colunas. Dessa maneira, o AutoNLP automatiza a análise exploratória dos dados e o processamento de texto, auxiliando os desenvolvedores a obter o melhor modelo.

Mas claro, AutoNLP não é a única função do AutoVIML. Além da análise exploratória de dados textuais, é possível encontrar técnicas de limpeza de dados, redução de atributos, classificação de variável e outros métodos muito úteis para o cientista de dados.

Assim como foi visto nas ferramentas anteriores, o AutoVIML também possui um código bem simples de ser implementado.

Utilizando o dataset IMDB, é realizado o load do conjunto de dados e transformado a coluna alvo em 1 ou 0, 1 para positivo e 0 para negativo. Após isso, basta realizar a separação do conjunto em treino e teste e chamar o classe Auto NLP para realizar o treinamento.

import pandas as pd
import numpy as np
from sklearn.model_selection import train_test_split
from autoviml.Auto_NLP import Auto_NLP
data = pd.read_csv("IMDB Dataset.csv")
data["sentiment"] = [1 if x=="positive" else 0 for x in data["sentiment"]]
X_train, X_test = train_test_split(data, test_size=0.2, random_state=7)
text, target = "review", "sentiment"
train_nlp, test_nlp, trans, preds = AutoNLP(text, X_train,
X_test,target, score_type="balanced_accuracy", \
modeltype="Classification", verbose=2, build_model=True)

Os parâmetros utilizados são facilmente interpretáveis para o código, no qual você passa os conjuntos de dados para treino e teste, juntamente ao nome das colunas (no caso do exemplo foi “review” e “sentiment”), escolhe o tipo de score para avaliação e o tipo de modelo para treinamento.

Como dito anteriormente, o AutoVIML procura deixar suas etapas bem visíveis e interpretáveis para o desenvolvedor. Então, durante o treinamento do modelo são gerados diversos gráficos e textos sobre o que está sendo elaborado, deixando tudo muito bem explícito para o usuário.

Source

Algumas considerações finais…

  • AutoML não é a automação da ciência de dados

O AutoML não tem o propósito de substituir cientistas de dados, mas sim de auxiliá-los a atingir melhores modelos de aprendizado de máquina e garantir acessibilidade para iniciantes na área e não-especialistas;

  • O AutoML é o processo de democratização do aprendizado de máquina

Ele permite que qualquer pessoa interessada em aprendizagem de máquina possa utilizar técnicas sofisticadas para resolver problemas reais, tornando-o acessível para um público maior e sendo útil tanto para iniciantes quanto para especialistas em áreas diferentes da computação;

  • Dificuldade em, posteriormente, expandir o modelo gerado pelo AutoML

O AutoML torna todo o processo muito nebuloso, uma verdadeira “caixa preta”. Embora seja muito bom para iniciantes, a dificuldade em entender o processo de criação do modelo dificulta sua adaptação ou expansão, caso seja necessário.

  • Não elimina a necessidade de modelos customizados

É muito bom para ajudar a criar modelos cada vez melhores. Você pode usá-lo para identificar bons modelos de base e, após isso, melhorá-los da sua maneira.

Ainda, é possível utilizar uma ferramenta AutoML em etapas específicas do processo de criação de um modelo, por exemplo, experimentar diferentes técnicas de preparação de dados ou engenharia de atributos, de maneira automática e verificar qual funciona melhor para o seu projeto.

  • AutoML exige de recursos computacionais

Como o AutoML procura o melhor modelo de aprendizado de máquina, é despendido um alto processamento e gasto de memória em seu espaço de busca para conseguir definir o melhor modelo.

Além disso, o tempo de espera para o treinamento dos modelos é muito alto e nem todas as plataformas possuem early stopping.

Artigo produzido por Fernando Rezende Zagatti e Lucas Nildaimon dos Santos Silva

Se você busca uma oportunidade de desenvolvimento, trabalhando com inovação em um negócio de alto impacto, acesse o portal B2W Carreiras! Nele, você consegue acessar todas as vagas disponíveis. Venha fazer parte do nosso time!

--

--