Recomendação de configurações para tarefas de regressão

O desbalanceamento dos dados pode enviesar a máquina para os padrões que ocorrem com maior frequência. Embora seja conhecido que balancear os dados antes de apresentá-lo à máquina de aprendizagem seja vantajoso para fins de generalização, tal procedimento é pouco discutido para tarefas de regressão.

Também é importante destacar que não existe um procedimento capaz de encontrar o melhor algoritmo de balanceamento para todos os problemas (referência); e, mais, avaliar todos os algoritmos existentes requer muito esforço computacional. Além disso, a integração ideal entre algoritmos de balanceamento e de aprendizagem de máquina depende dos dados sob análise.

Logo, o artigo

Juscimara Avelino, George D.C. Cavalcanti, Rafael M.O. Cruz. Imbalanced regression pipeline recommendationMachine Learning, 114, 146 (2025).

apresenta uma abordagem automática para a escolha da técnica de balanceamento e do algoritmo de aprendizagem mais apropriados por problema. A abordagem chama-se Meta-IR e isenta o usuário de avaliar cada possível par de técnica de balanceamento e de algoritmo de apresentarem por banco de dados. Vale salientar que a abordagem proposta é extensível para outra configurações do pipeline, tais como pré-processamento, detecção de outiliers e parâmetros da máquina de aprendizagem.

Para tanto, a proposta se vale de meta-aprendizagem e de aprendizagem multi-rótulo para extrair informações de várias tarefas com a finalidade de construir uma representação capaz de recomendar os melhores algoritmos por banco de dados.

A figura a seguir explicita vantagens da abordagem proposta em relação aos sistemas tradicionais de AutoML (Automated Machine Learning).

Vê-se que os sistemas tradicionais realizam grande parte do processamento quando recebem o banco de dados (figura (b)); assim, o processamento em tempo de produção (online) é muito alto. Por outro lado, a proposta realiza a maior parte do processamento offline (e o realiza apenas uma vez), agilizando a resposta em tempo de produção.

Os resultados experimentais mostram a vantagem do sistema proposto (Meta-IR) quando comparado a sistemas de AutoML, tais como: Auto-sklearn, H2O, TPOT, FLAML, LightAutoML e Nive AutoML.

O código-fonte e demais informações estão públicos em https://github.com/JusciAvelino/Meta-IR.

Previsão de sucesso em campanhas de crowdfunding usando aprendizagem de máquina

Crowdfunding, ou financiamento coletivo, é uma maneira de conseguir recursos para alavancar um projeto. Para tanto, um indivíduo ou uma startup apresenta sua ideia em plataformas online com o intuito de conseguir uma quantia específica de dinheiro para colocar seu projeto em curso. Tais projetos são financiados, em geral, por um grande grupo de pessoas que acreditam no projeto e que pode se beneficiar, por exemplo, com cotas do empreendimento.

Algumas campanhas de crowdfunding são exitosas; enquanto outras não conseguem angariar a quantidade de recurso suficientes para iniciar o projeto e, assim, naufragam. Separar, o quanto antes, campanhas de sucesso das que irão fracassar implica em redução de custos e de frustrações de parte a parte.

No artigo a seguir, investigamos diversas abordagens de aprendizagem de máquina para a predição de sucesso em campanhas de crowdfunding.

George D.C. Cavalcanti, Wesley Mendes-Da-Silva, Israel J. dos Santos Felipe, Leonardo A. Santos. Recent advances in applications of machine learning in reward crowdfunding success forecastingNeural Computing & Applications2024. 

Foram avaliados 15 algoritmos de aprendizagem de máquina, entre eles, algoritmos tradicionais (MLP, SVM, …), algoritmos de combinação estática (RandomForest, AdaBoost, XGBoost, …) e algoritmos de combinação dinâmica de classificadores (Meta-DES, KNORAE, …), usando três métricas: acurácia, área sob curva ROC e F-score, e um total de 4.193 campanhas. Destaque para o Meta-DES que obteve o melhor resultado global. Este método usa meta-aprendizagem para selecionar dinamicamente os melhores classificadores por campanha de crowdfunding em avaliação. Em outras palavras, o Meta-DES usa classificadores diferentes para avaliar campanhas diferentes e esta escolha é realizada on-the-fly, ou seja, em produção.

Boa parte da discussão do artigo é voltada para explicar (eXplainable AI) os motivos que levaram a máquina de aprendizagem a indicar que uma determinada campanha seria de sucesso ou não. Para tanto, computamos os Shapley values visando enxergar o conteúdo da black-box das máquinas.

De maneira global, as variáveis mais importantes para a predição foram: o número de pledges, o valor total esperado na campanha, entre outras, conforme mostrado no gráfico acima.

Dentre as variáveis usadas para representar uma campanha, duas delas têm o objetivo de capturar o sentimento do mercado no dia do lançamento da campanha de crowdfunding, são elas: social media net sentiment (SMNS) e mainstream media net sentiment (MMNS). Esse sentimento foi extraído do Twitter e do jornal “O Estado de São Paulo” usando técnicas de processamento de linguagem natural. Embora tenhamos usado apenas duas fontes de informações online, vale destacar que essas variáveis foram relevantes para as decisões das máquinas.

Destaco que este trabalho foi realizado com 4.193 campanhas do mundo real. Um esforço multidisciplinar como este requer a adição de diferentes competências complementares. Agradeço aos co-autores: Wesley (Professor de Finanças/FGV-SP), Israel (Professor de Finanças/UFRN) e Leonardo (Senior Machine Learning Engineer/Nubank).

O código-fonte e mais detalhes sobre a análise experimental estão disponíveis no GitHub: https://github.com/las33/Crowdfunding.

Desbalanceamento em tarefas de regressão

Classificação versus Regressão

Em aprendizagem supervisionada, as tarefas podem ser divididas em Classificação e em Regressão. Em Classificação, o objetivo é predizer uma classe. Por exemplo, em um sistema de detecção de fake news, deseja-se verificar se um conteúdo é fake ou não; logo, tem-se duas classes. Em uma tarefa diferente, o objetivo pode ser de outra natureza, tal como: prever a quantidade de chuva em determinada região numa data futura; esta é uma tarefa de Regressão.

Estas duas tarefas diferem primordialmente em razão das suas varáveis-alvo: uma é discreta (detecção de fake news) e a outra é contínua (previsão pluviométrica). Assim, quando a variável-alvo pode ser representada por um conjunto finito, a tarefa é dita de Classificação. Por outro lado, diz-se que a tarefa é de Regressão quando a variável-alvo é um valor real (contínuo). Ou seja, na detecção de fake news, tem-se duas classes (fake e não-fake), logo, um conjunto finito de valores. Já na tarefa de previsão pluviométrica, a quantidade de chuva, possivelmente dada em milímetros por metro quadrado, é um valor real, contínuo.

Dados desbalanceados

Dados desbalanceados são, frequentemente, encontrados em aplicações do mundo real e podem impor desafios às máquina de aprendizagem. Pode-se dizer que as classes estão desbalanceadas quando o número de instâncias em uma classe é muito menor do que o número de instâncias numa classe diferente. Na sentença anterior, foi utilizado o conceito de classe, remetendo a definição de dados desbalanceados para tarefas de Classificação. Mas, e para tarefas de Regressão?

Verdade que esta questão de desbalanceamento já foi amplamente discutida em tarefas de Classificação. Porém, vale destacar que em tarefas de Regressão, na qual a variável-alvo é um valor contínuo, dados desbalanceados também podem se apresentar como um obstáculo. Pois, os dados pouco representados podem ser coincidentemente os mais relevantes para a aplicação sob análise. Por exemplo, eventos climáticos extremos ocorrem com menos frequência, mas, erros em sua predição podem ser significantemente custosos.

Em Regressão, calculamos o quão desbalanceado está uma tarefa usando uma função de relevância que separa as instâncias em “normais” e “raras”, com base nos seus valores-alvo. Assim, podemos calcular o nível de desbalanceamento pela razão entre a quantidade de instâncias “raras” e “normais”. Caso tenhamos, bem mais instâncias “normais” do que “raras”, dizemos que a tarefa está desbalanceada.

Na figura acima, percebe-se que a quantidade de instâncias com valores de Y (variável-alvo) maiores do que 10 é pouca quando comparada a quantidade de instâncias com valores entre 5 e 8. Logo, boa parte dos valores-alvo é pouco representada e isso dificulta o processo de treinamento das máquinas de aprendizagem.

Algoritmos de balanceamento de dados para Regressão

Uma abordagem bastante usada para lidar com esta questão é o balanceamento dos dados. São vários os possíveis algoritmos na literatura especializada da área. Alguns algoritmos visam gerar instâncias sintéticas que pertençam à classe de instâncias “raras” com o intuito de “engordar” esta classe e, consequentemente, diminuir o desbalanceamento. Em contraste, outras abordagens eliminam algumas instâncias da classe “normal” e, existem, também, algoritmos híbridos que fazem a “engorda” e a eliminação simultaneamente.

Os principais algoritmos de balanceamento de dados para tarefas de regressão foram analisados no artigo listado a seguir. Além da descrição das vantagens e das desvantagens de cada algoritmo, também foram realizados experimentos usando trinta bancos de dados de Regressão de diferentes domínios (desde previsão da qualidade de vinho a incêndios em florestas, passando por tarefas relacionadas à saúde humana).

Juscimara G. Avelino, George D.C. Cavalcanti, Rafael M.O. Cruz. Resampling strategies for imbalanced regression: a survey and empirical analysisArtificial Intelligence Review, 2024.

As principais contribuições do artigo são:

  • Proposição de uma nova taxonomia para tarefas de regressão desbalanceadas levando em consideração o modelo de regressão, a estratégia de aprendizagem e as métricas;
  • Revisão das principais estratégias utilizadas para tarefas de regressão desbalanceada;
  • Condução de um extenso estudo experimental comparando o desempenho de estratégias de reamostragem e seus efeitos em múltiplos algoritmos de aprendizagem.

Seguem as principais conclusões após a análise dos experimentos:

  • A seleção da estratégia de balanceamento pode impactar significativamente os resultados e é melhor usar uma técnica de balanceamento do que não usar nenhuma;
  • A escolha da melhor técnica depende da tarefa, do modelo de aprendizagem e da métrica usada. Destaque positivo para a técnica Gaussian Noise, independente da métrica usada;
  • Como esperado, os modelos de regressão enfrentaram desafios significativos em tarefas com alto nível de desbalanceamento.

O código-fonte de todas as análises estão publicamente acessíveis no GitHub: https://github.com/JusciAvelino/imbalancedRegression.

Detecção de discurso de ódio & Inteligência Artificial

Parte do texto a seguir foi publicado no Jornal do Commercio (JC) em 10/06/2024 (link)

A primeira rede social a atingir um patamar de um milhão de usuários foi a MySpace, em 2004. Muitas outras redes sociais surgiram de lá para cá e, atualmente, Facebook, YouTube e WhatsApp possuem mais de 2 bilhões de usuários cada uma. Em menos de duas décadas, testemunhamos um rápido crescimento e, dada nossa presença maciça nessas redes, não é à toa que a forma como as usamos esteja moldando diversos aspectos do nosso comportamento. 

As mudanças abrangem não apenas as formas como nos comunicamos e trabalhamos, mas também a forma como aprendemos e nos divertimos, além de diversas outras áreas da interação entre humanos, entre máquinas e entre ambos. Estamos conectados, online e aprendendo a lidar com tal novidade.

Avançamos e nos apropriamos de diversas vantagens dessa nova realidade. Mas, vale destacar que a fácil disseminação e a crença de anonimato fazem das mídias sociais um ambiente bastante utilizado para a propagação dos mais diversos assuntos. Entre eles, destaca-se o discurso de ódio que pode ser definido como ataque ou ameaça a outras pessoas motivados por raça, gênero, nacionalidade, orientação sexual, entre outros.

As redes sociais rejeitam o discurso de ódio em seus contratos e indicam que contas/usuários que promovam esse tipo de discurso podem sofrer sanções. Entretanto, o volume de postagens nessas redes é imenso. Só o X (antigo Twitter) veicula, em média, seis mil postagens por segundo, ou seja, 500 milhões de postagens todo dia. Estes são dados de apenas uma rede social.  Logo, a ideia de se ter intervenção humana, com a finalidade de verificar possíveis infrações, torna-se inviável.

Além da dificuldade associada ao volume, a tarefa de indicar se um discurso é de ódio ou não requer pessoas especializadas, pois um discurso muitas vezes pode ser confundido com sarcasmo, humor, ou linguagem ofensiva que, em muitos casos, pode ser protegida por lei. Dadas essas especificidades, realizar a moderação das postagens em redes sociais usando humanos é um trabalho desafiador, além de lento e não escalável. Logo, é necessário automatizar o processo e repassar a tarefa para programas de computador que são facilmente replicáveis e respondem rapidamente.

A tarefa de detectar discurso de ódio pode ser descrita de maneira simples: dado um conteúdo, deseja-se que o sistema responda sim, se o conteúdo contiver discurso de ódio, e não, caso contrário. Mas, a computação tradicional, determinística e que trabalha segundo regras estáticas, não se apresenta como uma ferramenta adequada para a tarefa em questão.

Daí emerge a aprendizagem de máquina, que é um ramo da Inteligência Artificial capaz de aprender a partir de dados. Ou seja, ao invés de ser explicitamente programada com regras extraídas de especialista humanos, as máquinas de aprendizagem capturam informações diretamente dos dados (postagens contendo ou não discurso de ódio) de maneira autônoma e automática, sendo assim, capazes de lidar com a incerteza inerente ao processo, além de poderem ser ajustadas para se adaptar às mudanças. 

As redes sociais já se valem de máquinas que aprendem para detectar e tentar impedir a disseminação de discurso de ódio. Porém, ainda há bastante espaço para ajustes e melhorias, pois a detecção automática de discurso de ódio é uma tarefa desafiadora e mal-definida; ainda não há consenso sobre como discurso de ódio deve ser definido. Logo, o que é discurso de ódio para uns pode não ser para outros e, tais definições conflitantes criam um ambiente desafiador para a avaliação de tais sistemas. Dentre os muitos os desafios para o avanço desta tecnologia, é possível destacar os seguintes:

Rotulagem: as máquinas de aprendizagem precisam de dados para discernir quais discursos são de ódio e quais não são. Essa triagem e construção de um corpus que será apresentado à máquina é uma tarefa inicialmente delegada aos humanos. Ao rotular um discurso em ódio ou não-ódio, humanos levam consigo seus preconceitos para o corpus que alimentará a máquina de aprendizagem que, por sua vez, será ineficaz no tratamento dessas incorretudes.  Assim, é desejável minimizar o viés desse processo de rotulagem e, para tal fim, comitês diversos, formados por pessoas especializados, devem ser compostos.

A natureza da linguagem: a linguagem é uma entidade viva e, por conseguinte, mutante. Logo, os algoritmos de aprendizagem de máquina precisam de adaptar a tais mudanças e, para tanto, requerem intervenção humana para indicar quais novas formas de expressão devem ser classificadas como discurso de ódio. 

Portabilidade: uma máquina de aprendizagem desenvolvida para uma dada língua, não se aplica diretamente a outras línguas. Mas do que isso, uma máquina, que foi ajustada para uma região de um país grande como o nosso, precisa levar em consideração regionalismos para realizar uma melhor predição e, tais detalhes, podem prejudicar a predição para outras regiões, mesmo sendo a mesma língua em todo o país.

Interpretabilidade: o processo que leva uma máquina de aprendizagem a tomar uma decisão ao invés de outra, muitas vezes, é indecifrável para humanos. Logo, tornar tais máquinas interpretáveis, pode proporcionar maior credibilidade e confiança ao processo; além de gerar questionamentos que podem ser utilizados para melhorar a precisão dessas mesmas máquinas.

Neste cenário, é promissor vislumbrar estratégias capazes de sinergicamente integrar algoritmos e pessoas, capturando o melhor de cada um.

GPT e modelos de linguagem: disciplina da pós-graduação do CIn-UFPE 

Finalizamos, eu e o prof. Tsang, a primeira disciplina do CIn a abordar Generative Pre-trained Transformer (GPT) e Large Language Models (LLM), intitulada: GPT: métodos e desafios de modelos de linguagem. A disciplina foi oferecida para alunos de mestrado e de doutorado da pós-graduação em Ciência da Computação do CIn-UFPE.

Ao ser lançado, o ChatGPT nos fez refletir sobre várias possíveis direções quanto ao seu uso e quanto ao alcance de suas potencialidades. Aplicações como tradução, sumarização de documento, construção de textos, entre outras, atingiram novos patamares e deixaram vários métodos/estratégias/algoritmos obsoletos. 

Para a construção de plataformas semelhantes ao ChatGPT, diversas tecnologias foram agregadas de forma inteligente para obtermos os resultados que enxergamos hoje. Uma dessas tecnologias consta na sigla do GPT, o “T” é de  Transformers (mais detalhes neste link) que é uma rede neural para treinar LLMs em grandes bancos de dados. 

Os LLMs transformaram a área de processamento de linguagem natural e compõem a base de uma ampla gama de sistemas de última geração que têm demonstrado uma excelente capacidade de gerar textos legíveis e fluidos. Porém, como toda nova tecnologia, esses modelos trazem consigo novos desafios, entre eles, desafios relacionados a aspectos éticos e de escalabilidade. A disciplina focou em fundamentos e, também, em diversos aspectos relacionados ao uso destes modelos.

Nesta primeira edição, o curso contou com a participação de 27 alunos (13 de doutorado e 14 de mestrado). Os orientadores desses alunos, no programa de pós-graduação do CIn, formam um grupo heterogêneo composto por 16 professores que atuam em diversas áreas, tais como: inteligência artificial, aprendizagem de máquina, ciência de dados, otimização, realidade aumentada e engenharia de software. 

Esta diversidade trouxe desafios, mas, foi frutífera, em especial, nas discussões que expuseram pontos de vistas que, embora convergentes, tinham alvos díspares. Por outro prisma, esta diversidade também reforça a ubiquidade da aprendizagem de máquina nas mais diversas áreas de pesquisa.

Sigamos para a próxima edição!

Normalização dos atributos & Desempenho dos classificadores

Pré-processar os dados, antes de treinar uma máquina de aprendizagem, é uma etapa vital para se conseguir extrair o melhor de cada máquina. São várias as formas de pré-processar os dados e esta tarefa depende da aplicação em investigação. Por exemplo: em processamento de linguagem natural, é comum realizar a tokenization que objetiva separar sentenças em unidades menores, tais como palavras.

O foco desta post é o pré-processamento dos atributos com o objetivo de colocá-los em uma mesma escala, ou dentro de um mesmo critério, com o intuito de minimizar a influência indevida de um atributo sobre o outro. Esta tarefa é realizada por técnicas de scaling, muitas vezes chamadas de normalização.

Min-max scaler é a mais utilizada e difundida técnicas de scaling. Nela, cada um dos atributos é ajustado para caber em um intervalo, geralmente, entre 0 e 1. Outras técnicas de scaling permeiam as aplicações e, entre elas, destaco: standard scaler, maximum absolute scaler, robust scaler e quantile transformer.

Diante desse contexto com várias técnicas de scaling e vários classificadores, alguns questionamentos emergem:

  • Vale a pena normalizar os dados?
  • A escolha da técnica de scaling influencia no desempenho dos modelos de aprendizagem?
  • Qual técnica escolher para um dado classificador?
  • Quais classificadores são mais sensíveis às escolhas das técnicas de scaling?

Estas e outras questões são abordadas no artigo de Amorim et al. que realiza uma ampla avaliação usando 82 bancos de dados públicos e cinco técnicas de scaling. Foi mostrado que escolher bem a técnica de scaling melhora a precisão de classificadores. Em particular, algoritmos baseados em árvores de decisão são pouco sensíveis à escolha da técnicas de scaling. Logo, em alguns casos, não normalizar pode ser a melhor opção.

O nível de desbalancamento do banco de dados é um fator que influencia a escolha da técnica de scaling. O standard scaler obteve melhor desempenho em bancos de dados com baixos níveis de desbalanceameto, enquanto o quantile transformer apresenta-se como a melhor escolha para os níveis médio e alto de desbalanceamento.

Os autores também ressaltam que a melhor técnica de scaling para um sistema de múltiplos classificadores coincide com a melhor técnica empregada por seu classificador-base. Assim, a definição da melhor técnica de scaling, para um sistema de múltiplos classificadores, pode ser realizada avaliando o comportamento das técnicas em um classificador-base, o que torna todo o processo mais rápido e barato.

Sabendo que o emprego de técnicas de scaling é bastante negligenciado nas mais diversas aplicações, Amorim et al. colocam luz nesta questão e mostram que devemos ficar alertas em relação a esse ponto sensível, pois a escolha da técnica influencia significativamente o desempenho de modelos de classificação.

Lucas B.V. de Amorim, George D.C. Cavalcanti, Rafael M.O. Cruz, The choice of scaling technique matters for classification performance, Applied Soft Computing, 2023.

k-vizinhos mais próximos: uma análise

O algoritmo k-vizinhos mais próximos (do inglês, k-Nearest Neighbors – kNN) funciona da seguinte forma: dada uma instância de teste xq, o algoritmo encontra os k vizinhos mais próximos de xq no conjunto de treinamento. Em seguida, a classe de xq é dada pela classe que ocorrer com maior frequência entre os k vizinhos.

Na figura acima, são mostrados os cinco vizinhos mais próximos da instância de teste xq. Dessas cinco instâncias, 4 são da classe “+” (vermelha) e 1 da classe “0” (azul). Ao aplicar o kNN, com k=5, a instância xq é classificada como sendo da classe vermelha, pois essa classe possui mais representantes na vizinhança de xq.

Esse algoritmo possui dois parâmetros: o número de vizinhos (k) e a medida de dissimilaridade (ou de similaridade) usada para encontrar os vizinhos mais próximos. A distância Euclidiana é a medida mais amplamente usada para determinar os vizinhos, embora existam diversas opções. Em relação ao parâmetro k (número de vizinhos), várias alternativas para determinar o valor mais adequado por tarefa podem ser empregadas. Uma delas é avaliar o algoritmo kNN no conjunto de validação, adotando diferentes valores para k. O valor de k que alcançar a melhor precisão será escolhido para classificar todas as instâncias de teste.

Uma primeira diferença em relação a outras máquinas de aprendizagem, tais como árvore de decisão e multi-layer perceptron, é que, no kNN, a etapa de treinamento é caracterizada apenas pelo armazenamento das instâncias. A rigor, não há treinamento. Logo, a função que será usada para a tomada de decisão é definida em operação, analisando um subconjunto dos dados de treinamento, i.e., os k vizinhos mais próximos. Por esse motivo, pode-se dizer que o kNN é uma máquina de aprendizagem local.


Embora seja simples, vale destacar que o kNN constrói regiões de decisão não-lineares no espaço de características. Para ilustrar, a figura a seguir mostra como o espaço de características bidimensional é dividido quando emprega-se o kNN, com k=1. As linhas verdes delimitam a área de cobertura de cada uma das instâncias de treinamento (pontos pretos: x1, x2 e x3). Assim, qualquer instância de teste que se posicionar na região amarela será classificada como sendo da mesma classe da instância x1, pois essa será a instância mais próxima. Da mesma forma, instâncias localizadas na região laranja serão classificada pela classe de x2 e, na região azul, pela classe de x3.

Importante destacar que as regiões de cobertura mostradas na figura foram obtidas usando apenas um vizinho mais próximo (1NN). Ou seja, essas regiões podem ficam mais complexas ao adotar valores maiores de k. Além disso, uma caraterísticas interessante do kNN é que as regiões de coberturas podem ser facilmente modificadas ao inserir, remover ou reposicionar as instâncias.


Mas, o kNN possui algumas desvantagens:

Armazenamento: todas as instâncias de treinamento são armazenadas para posterior consulta, quando da chegada de uma instância de teste. Se o conjunto de treinamento possuir muitas instâncias, a quantidade de memória requerida para armazená-lo pode ser um problema. Uma alternativa, para aliviar essa questão, é usar algoritmos de redução de instâncias que têm o intuito de reduzir o número de instâncias no conjunto de treinamento.

Esforço computacional: a função que classificará uma instância de teste, só é definida em operação, usando os vizinhos mais próximos. Logo, o kNN requer um esforço de processamento, em tempo de execução, para vasculhar todo o conjunto de treinamento em busca dos vizinhos para cada instância de teste. Algoritmos de redução de instâncias também podem auxiliar para mitigar essa desvantagem do kNN.

Alta dimensionalidade: ao calcular a dissimilaridade (por exemplo: usando a distância Euclidiana) entre vetores que são representados por muitas variáveis, esse cálculo pode ser impreciso devido à alta dimensionalidade dos vetores. Uma maneira de atenuar essa questão é remover variáveis redundantes ou pouco relevantes, para fins de classificação, usando algoritmos de seleção ou de extração de características.


A figura a seguir mostra dois exemplos que ilustram uma instância de teste e seus cinco vizinhos mais próximos. Nesses dois exemplos, percebe-se que a instância de teste xq está bastante próxima das instâncias da classe “0” (azul). Mas, o kNN (k=5) classificará as duas instâncias de teste como pertencentes à classe “+” (vermelha), pois essa classe possui mais instâncias do que a classe azul na vizinhança de xq.

Nesses exemplos, a proximidade de xq em relação aos seus vizinhos não é levada em consideração. Apenas a quantidade de instâncias na vizinhança é usada para decidir a classe de xq. Mas, é possível encontrar variações do kNN que visam abrandar essa e outras propriedades previamente discutidas.

Redução de instâncias: seleção & geração

Algoritmos de redução de instâncias têm o objetivo de representar um conjunto de dados usando poucas instâncias. Dado um conjunto de dados (T), deseja-se obter um conjunto reduzido (S), de forma que o número de instâncias em S seja menor do que o número de instâncias em T, i.e., |S|<|T|. O novo conjunto S substituirá o conjunto T; logo, S não é qualquer subconjunto de T, mas, um conjunto que mantenha as informações do conjunto original e que o represente.

Esses algoritmos de redução são comumente aplicados na etapa de pré-processamento, antes do treinamento de uma máquina de aprendizagem. Ao diminuir o número de instâncias de um conjunto de dados, a quantidade de memória requerida para armazenar esses dados é reduzida. Além disso, máquinas de aprendizagem podem ser treinadas com maior agilidade, pois precisam extrair informações de uma quantidade menor de instâncias. Em especial, os algoritmos de aprendizagem baseados em instância (instance-based learning), tal como o k-Nearest Neighbors (kNN), podem se beneficiar bastante, visto que esses algoritmos são reconhecidamente lentos em operação.

Algoritmos de redução de instância são categorizados em: seleção de instâncias e geração de protótipos. Na seleção, o conjunto reduzido S é um subconjunto de T. Já na geração, o conjunto S é formado por instâncias que não necessariamente existem em T, ou seja, o algoritmo pode criar novas instâncias.

Seleção de instâncias

Essa abordagem busca pelo melhor subconjunto de instâncias (S) em um conjunto de dados (T), de forma que S ⊂ T. Para realizar tal tarefa, uma função de custo que define o que significa “melhor” subconjunto precisa ser definida. Por exemplo, no algoritmo de seleção de instâncias Edited Nearest Neighbors (ENN), a função de custo tem a tarefa de remover todas as instâncias que não são corretamente classificadas por seus vizinhos mais próximos. Outro exemplo é o Condensed Nearest Neighbors (CNN) que foca em remover instâncias que estão mais próximas dos centros das classes.

As figuras acima mostram os subconjuntos gerados pelos algoritmos ENN e CNN, a partir do conjunto de dados mostrado na primeira figura à esquerda. Pode-se notar que o ENN remove poucas instâncias e que a maioria das instâncias removidas pertence a regiões de borda. Logo, o ENN expõe mais claramente as fronteiras entre as classes.

A função de custo do CNN foca na remoção de áreas seguras, ou seja, agrupamentos de instâncias que têm a mesma classe. Por isso, na figura que mostra o resultado da aplicação do CNN, é possível perceber áreas vazias longe das fronteiras entre as classes. Esse algoritmo representa o conjunto de dados original usando bem menos instâncias do que o ENN.

Geração de protótipos

Os algoritmos de geração de protótipos criam instâncias artificiais que são usadas para representar o conjunto de dados original. Assim, ao invés de selecionar instâncias que existem no conjunto original, como os algoritmos de seleção de instâncias, os algoritmos de geração produzem novas instâncias (protótipos) que não existem no conjunto de dados inicial.

Para ilustrar como um protótipo pode ser criado para representar algumas instâncias, é possível se valer da noção de algoritmos de agrupamento (clustering), mesmo sabendo que esses pertencem a um espectro maior de aplicações. Os algoritmos de agrupamento fornecem um conjunto de grupos, e cada grupo pode ser representado por seu centro. Logo, pensando em reduzir as instâncias, pode-se representar todo o conjunto de dados original usando apenas os centros dos grupos. Assim, o número de protótipos no conjunto reduzido S é definido pela quantidade de grupos gerada pelo algoritmo de agrupamento.

A ideia é criar esses novos protótipos de forma que sejam necessários poucos deles para cobrir o espaço de características. Desta forma, o posicionamento desses protótipos nesse espaço é de suma importância. Muitas vezes, esse posicionamento é definido por um processo de otimização, tal como no algoritmo de classificação supervisionada learning vector quantization que é a pedra angular de diversas técnicas de geração de protótipos.

Discussão: Seleção versus Geração

A maioria das técnicas de seleção de instâncias e de geração de protótipos foi desenvolvida tendo como alvo o algoritmo kNN. Mas, vale destacar que essas técnicas podem ser usadas, eficientemente, como pré-processamento em outras abordagens de aprendizagem.

Para algumas aplicações, não é plausível gerar dados artificiais a partir dos dados originais. Logo, as técnicas de seleção seriam mais indicadas para esses casos. De maneira geral, as técnicas de seleção requerem menos poder computacional do que as de geração. Por outro lado, as técnicas de geração conseguem representar os dados originais de maneira mais concisa e, em geral, obtêm melhor precisão do que as de seleção.

Embora os algoritmos de redução de instâncias sejam rotineiramente usados na etapa de pré-processamento, antes do treinamento de uma máquina de aprendizagem, eles podem ser aplicados em outros cenários. Em [Cruz et al. 2018, Cruz et al. 2017], algoritmos de redução foram aplicados no contexto de combinação de classificadores.

Classificador baseado em perturbação

Após o treinamento de uma máquina de aprendizagem, obtém-se um modelo M que é usado para classificar novas instâncias, ou seja, instâncias nunca vistas durante o processo de treinamento. Esse modelo funciona da seguinte maneira: recebe como entrada uma instância de teste (xq) e fornece como saída uma predição da classe (ωq) dessa instância, i.e., M(xq) → ωq.

Conforme descrito acima, observam-se duas fases: uma de treinamento, na qual o modelo M é gerado, e uma de teste, na qual o modelo é usado para classificar novas instâncias (xq). Mas, existem outras alternativas, por exemplo: no artigo Online local pool generation for dynamic classifier selection, os modelos só são treinados quando a instância de teste é apresentada ao sistema. Assim, os modelos são treinados on-the-fly, especificamente para classificar cada instância de teste e, depois da classificação, os modelos são descartados. Vale destacar que quando o sistema é colocado em execução, ele não possui nenhum classificador armazenado. Esse tipo de abordagem tem a vantagem ser facilmente adaptável à inclusão de novos dados de treinamento, mesmo quando o sistema está implantado no cliente.

Com o intento de unir esses dois mundos, propusemos um novo classificador que parte do processo de treinamento é feito offline e parte é feito online, chamado Perturbation-based Classifier (PerC). A parte offline é igual ao procedimento corriqueiro, descrito acima, no qual o conjunto de dados de treinamento é usado para gerar o modelo. Já o procedimento onlineutiliza a instância de teste (xq), em tempo de execução, para auxiliar no processo de tomada de decisão da máquina de aprendizagem.

Para explicar o funcionamento da parte online, suponha um problema com duas classes (ω1 e ω2)  e admita que a instância de teste xq pertence à classe ω1. Assim, é esperado que a inserção da instância xna classe ω1 causará uma “perturbação” (daí o nome do classificador) menor do que sua inserção na classe ω2, pois xq pertence à classe ω1. Essa é a hipótese.

perc

Para ilustrar o conceito de perturbação, a figura acima mostra uma tarefa simples composta de duas classes (ω1: azul e ω2: vermelha), na qual deseja-se classificar a instância de teste xq (representada pelo triângulo verde). Para cada uma das classes, é possível calcular seu centroide (centro de massa), representado por um quadrado preenchido da cor da classe.

O algortimo PerC adiciona xq ao conjunto de treinamento das classes, admitindo, momentaneamente, que tal instância pertence a cada uma das possíveis classes do problema. Assim, suponha que xq pertence à classe azul. Logo, o número de instâncias nessa classe será acrescido de um e, feito isso, recalcule seu centro de massa. Faça o mesmo para a classe vermelha: suponha que xé uma instância vermelha e recalcule o centro de massa dessa classe. Os novos centros de massa são representados por quadrados vazados da cor de cada classe.

Depois do recálculo dos centros de massa, podemos verificar qual centro de massa sofreu maior variação em seu posicionamento original no espaço de características. O centro de massa da classe azul sofreu uma menor variação quando comparado ao centro de massa da classe vermelha. Logo, o PerC classificará xcomo sendo da classe azul (ω1). Vale enfatizar que ao inserir xna classe azul, o comportamento dessa classe mudou pouco, dando a entender que a instância adicionada já fazia parte da distribuição dessa classe. Observando a figura, notam-se que os quadrados preenchidos são calculados offline, enquanto os quadrados vazados só foram calculados online, usando a instância de teste (xq).

Para tarefas com mais de duas classes, ou seja, multi-classe, o PerC funciona da mesma forma. Ele adiciona, temporariamente, a instância de teste xq, em cada uma das classes, e avalia a perturbação causada. A classe que for minimamente perturbada é atribuída como sendo a classe da instância xq. Para fins de ilustração, nesse exemplo foi usada a média da classe como fator fundamental para a análise da perturbação. Mas, outros fatores podem ser levados em conta, tal como a matriz de covariância das classes.

PerC não pode ser categorizado como um sistema de online learning, pois a instância de consulta xq não é permanentemente adicionada ao conjunto de treinamento. No PerC, após a classificação, a instância xé descartada. De maneira geral, PerC não pode ser enquadrado em nenhum paradigma de aprendizagem existente. É um novo paradigma.

O código-fonte do PerC pode ser acessado em https://github.com/rjos/perc.

Processamento de linguagem natural: representando palavras

Os avanços científicos e tecnológicos em processamento de linguagem natural têm o objetivo de intermediar a comunicação entre computadores e humanos usando seu principal meio de transmissão de informação, de conhecimento e de sentimento: a linguagem natural. A comunicação entre humanos é uma relação social bastante complexa que envolve o uso de diversos recursos, tais como: gestos e símbolos. Mas, dentre todos os meios, a palavra merece uma atenção especial, por sua abrangência e alcance.

A confluência entre palavras e sistemas de aprendizagem de máquina mostra um caminho para a produção de aplicações que agregam valor a diversas tarefas: tradução, detecção de fake news, deteção de hate speech, categorização de documentos, análise de sentimentos e de emoções, entre outras. Um pilar fundamental para o sucesso da automatização de tais aplicações reside na representação dessas palavras de uma forma que facilite a tarefa das máquinas de aprendizagem. Essa tal representação deve preservar o significado das palavras.

WordNet é um dicionário de sinônimos de palavras em inglês. Além dos sinônimos, o WordNet armazena, para cada palavra, um conjunto de relações do tipo “é um”. Por exemplo: para a palavra morcego, as relações “é um” animal, “é um” mamífero, entre outras, podem ser recuperadas. Assim, o WordNet é uma alternativa para representar palavras, porém, possui algumas limitações. Uma delas refere-se a incompletude, ou seja, faltam sinônimos de várias palavras, especialmente, de palavras mais novas. Ao se analisar textos, algumas palavras aparecem regularmente próximas entre si, enquanto outras, raramente, aparecem juntas. Para exemplificar: as palavras “tubarão” e “baleia” ocorrem juntas com mais frequência do que as palavras “tubarão” e “deserto”. Logo, uma informação importante diz respeito à similaridade entre palavras, e isso, o WordNet também não oferece.  

One-hot encoding

Até 2012, boa parte das aplicações representavam palavras usando uma codificação ortogonal. Para ilustrar, um corpus composto por seis palavras: tubarão, baleia, deserto, golfinho, mamífero e peixe, seria representado pelos vetores binários:

one-hot-enconding

Essa forma de representar, também conhecida como one-hot encoding, traz consigo algumas questões. Em geral, um corpus (conjunto de textos) possui mais do que seis palavras. Dado que o tamanho do vetor, que representa cada palavra, é igual ao número de palavras no corpus, esse vetor terá, facilmente, o tamanho de algumas centenas de milhares de posições. Logo, são vetores grandes e esparsos (cada vetor possui apenas um valor “1” e vários “0”s). 

Outro fator negativo ao empregar o one-hot encoding está relacionado à similaridade entre as palavras. Nessa representação, a distância entre quaisquer duas palavras é a mesma, pois cada palavra é um vetor perpendicular a todos os outros, logo, o produto interno entre dois vetores é igual a zero. Desta forma, a distância entre as palavras “baleia” e “golfinho” e as palavras “baleia” e “deserto” é a mesma. Nenhuma relação entre as palavras é estabelecida, e isso fere o objetivo de adicionar semântica ao processo, pois sabemos que as palavras “baleia” e “golfinho” aparecem mais frequentemente juntas do que as palavras “baleia” e “deserto”.

Word vectors

Tendo em vista que a relação entre as palavras é importante, pois é uma forma de adicionar semântica ao processo, alternativas foram desenvolvidas para incluir essa informação de contexto no vetor que representada cada palavra. Desde 2013, uma forma de mapear palavras em vetores com valores reais, estabeleceu-se como o estado da arte da área: word vectors (word embedding).

Ao contrário do one-hot enconding, no qual um vetor perpendicular às demais palavras é atribuído a cada palavra, os word vectors são aprendidos usando uma rede neural artificial. Esse processo de aprendizagem dos vetores leva em consideração o fato de que palavras que ocorrem em contextos similares possuem semânticas, também, similares. Dito de outra forma, se a palavra “peixe” aparece próxima da palavra “tubarão” mais frequentemente do que a palavra “mamífero”, é esperado que as palavras “peixe” e “tubarão” sejam mais “parecidas”, semanticamente, do que as palavras “peixe” e “mamífero”. Assim, deseja-se construir vetores que representem as palavras de forma que a distância entre “peixe” e “tubarão” seja menor do que a distância entre “peixe” e “mamífero”.

A figura a seguir mostra exemplos de word vectors nos quais é possível observar que as distâncias entre as palavras não é a mesma e que algumas relações semânticas, semelhantes às descritas no parágrafo anterior, são preservadas. Nota: cada uma das palavras dessa figura era formada originalmente por um vetor de cem valores e, para fins de visualização, a dimensionalidade foi reduzido para duas usando a análise dos componentes principais. Logo, muita informação foi perdida nesse processo de redução para uma representação 2D.

pca-word2vec

Mas, como embutir tal semântica nos vetores que representam as palavras, sabendo que tais vetores são compostos por números reais? Para ilustrar a intuição dessa construção dos vetores, veja o exemplo a seguir que mostra a frase “Focas, orcas, golfinhos e baleias são mamíferos que vivem nos mares”. Nesse exemplo, o elemento “central” é dado pela palavra “baleia” e os elementos de “contexto” estão destacados em verde.  Esse processo é chamado de janelamento e, para essa ilustração, foi usado uma janela de tamanho cinco. De maneira iterativa, essa janela percorre a frase, colocando outras palavras como o elemento “central”.

word2vec-frase2

Os valores que compõem o vetor da palavra “central” são atualizados de maneira que consigam predizer quais palavras formam o “contexto”. Na figura, wt representa a palavra central “baleia” e P(wt+2|wt) é a probabilidade de predizer a palavra  “mamífero” (wt+2) dada a palavra “baleia” (wt). Desta forma, ao apresentar várias e várias janelas à máquina de aprendizagem, o modelo consegue aprender o contexto de palavras estimando a probabilidade de uma palavra no “contexto” ser predita pela palavra “central”. E, ao fim, esse processo “magicamente” embute o significado das palavras nos valores dos vetores.  Para mais detalhes sobre o funcionamento do modelo, veja o artigo que propõe o Word2vec. Esse é o modelo seminal que usa uma rede neural para representar as palavras seguindo a intuição descrita acima.

Etapas de um sistema de múltiplos classificadores

Um sistema de múltiplos classificadores (multiple classifier system — MCS) é composto por um pipeline de três etapas: geração, seleção e integração — conforme mostrado na figura a seguir.

mcs
Etapas de um sistema de múltiplos classificadores. [adaptada de Cruz et al. 2018]
Pode-se observar essas três etapas de um MCS como uma caixa-preta que recebe como entrada um conjunto de treinamento (Γ), um conjunto validação e uma instância de teste (xq), e que fornece como saída, a classe (no caso de classificação) ou o valor predito (no caso de regressão ou previsão de séries temporais) da instância de teste. Da mesma forma que máquinas de aprendizagem monolíticas (árvore e decisão, redes neurais, entre outras), um MCS busca uma função capaz de predizer com eficácia o rótulo das instâncias que lhe são apresentadas durante a generalização. A seguir, são descritas as três etapas de um MCS.


Geração

Na primeira etapa, geração, as máquinas de aprendizagem são treinadas e armazenadas em um pool que pode ser homogêneo ou heterogêneo. Por homogêneo, entende-se que todos os modelos do pool são treinados usando o mesmo algoritmo de aprendizagem, e.g., árvore de decisão. Por outro lado, em um pool heterogêneo, os modelos são treinados com diferentes algoritmos, tais como: árvore de decisão, perceptron e redes neurais.

Usar algoritmos diferentes é uma forma de aumentar a diversidade do pool; sendo essa uma vantagem de um pool heterogêneo. Porém, escolher quais algoritmos de aprendizagem devem ser usados, e quantos, é um problema desafiador. Daí, gerar um pool homogêneo é uma alternativa interessante por sua simplicidade.

Mesmo trabalhando com um pool homogêneo, é necessário que os modelos desse pool sejam diversos. Bagging (bootstrap aggregating) é um algoritmo comumente usado para esse fim e funciona da seguinte forma: dado um banco de dados de treinamento (Γ) com n instâncias, bagging gera m bancos de dados usando reamostragem com reposição. Cada banco de dados gerado tem o mesmo número de instâncias (n) do banco de dados original. Mas, como bagging é um procedimento com reposição, cada banco de dados terá instâncias repetidas. É esperado que 63,2% sejam instâncias únicas de Γ, e que, o restante, 36,8%, seja composto de instâncias repetidas. Cada um dos bancos de dados gerado por bagging é usado para treinar um modelo. Assim, ao fim do processo, m modelos são treinados, C = {c1, c2, …, cm}.

Dado que bagging usa um processo aleatório para adicionar instâncias a cada um dos bancos, pode-se afirmar, com alta probabilidade, que os bancos gerados são diferentes entre si. Diferença essa que auxilia na geração de modelos diversos. Além do bagging, outros algoritmos são usados para gerar o pool, entre eles: boostingrandom subspace rotation forest.


Seleção

Após a geração, a próxima etapa tem o objetivo de selecionar um subconjunto de modelos do pool que será usado para predizer a classe/valor da instância de teste. A seleção pode se dar de duas formas: estática ou dinâmica.

ss
Seleçao estática [adaptada de Cruz et al. 2018]
A seleção estática (static selection – SS) escolhe os melhores modelos do pool C que comporão o ensemble de modelos C’, sendo C’ ⊂ C. A figura acima mostra que esse processo é realizado offline, ou seja, durante o treinamento, e usa o conjunto de validação como guia para a escolha dos modelos. Na seleção estática, o mesmo subconjunto de modelos C’ é usado para classificar/predizer todas as instâncias de teste (xq).

Já na seleção dinâmica, os modelos selecionados podem diferir de uma instância de teste para outra; por esse motivo é chamada de dinâmica. Essa operação de seleção é realizada online, quando o sistema completo já está em operação, e depende da instância de teste que se deseja avaliar.

dcs
Seleção dinâmica de um modelo (ci) por instância de teste (xq) [adaptada de Cruz et al. 2018]
des
Seleção dinâmica de um ensemble (C’) por instância de teste (xq) [adaptada de Cruz et al. 2018]
As duas figuras acima mostram formas de selecionar dinamicamente modelos: a primeira seleciona apenas um modelo por instância de teste, enquanto a segunda seleciona um ensemble, um subconjunto do pool inicial.

A seleção dinâmica é motivada pelo fato de que nem todos os modelos no pool são competentes para predizer o rótulo de todas as instâncias de teste. Assim, deseja-se encontrar, por instância, os melhores especialistas (modelos) para realizar essa predição.


Integração

A etapa de seleção pode escolher um ou mais modelos. Se apenas um modelo for selecionado, não há integração. Nesse caso, a resposta do sistema é dada pela aplicação do modelo selecionado à instância de teste, i.e., ci(xq).

Sob outra perspectiva, se mais de um modelo for selecionado, é necessário o emprego de alguma regra para combinar as respostas dos modelos. Essas regras podem ser divididas em duas categorias: treináveis e não-treináveis. As não-treináveis levam esse nome pois são regras fixas que não necessitam de um processo de treinamento. Nessa categoria, o voto majoritário é a regra mais empregada. Nesta regra, cada modelo vota em uma classe e a classe com mais votos é atribuída como sendo o rótulo da instância de teste. Outros exemplos de regras não-treináveis são: média, produto, soma, mínimo e máximo.

Como o próprio nome indica, as regras treináveis são definidas por um processo de treinamento. Assim, usam-se máquinas de aprendizagem com o propósito de aprender a melhor função que integrará as respostas dos modelos selecionados. Qualquer máquina de aprendizagem pode ser usada para esse fim, e.g., árvore de decisão e multi-layer perceptrons.

Quando não se sabe a priori quantos modelos serão escolhidos pela etapa de seleção, as regras não-treináveis são mais usadas do que as treináveis, pois a maioria das máquinas de aprendizagem requerem um vetor de características de tamanho fixo. Além disso, as regras não-treináveis são mais simples e, por conseguinte, mais fáceis de interpretar.

Combinação de classificadores: uma introdução

Ao treinar uma máquina de aprendizagem, muitos desafios espreitam o horizonte, entre eles: overfitting. Uma das alternativas para minimizar overfitting é escolher a máquina correta para a tarefa que se deseja resolver. Por exemplo: se tivermos poucos dados disponíveis, uma rede neural artificial pode não ser a melhor escolha; embora existam estratégias para gerar dados artificiais e aumentar a quantidade de dados de treinamento, tais como oversampling data augmentation. Uma escolha mais apropriada seria um algoritmo de instante-based learning, e.g., k-nearest neighbor. 

Escolher o melhor algoritmo de aprendizagem, por tarefa, é uma problema em busca de solução. Muitas abordagens que se valem de meta-learning já foram propostas, mas ainda existe muito terreno a percorrer nesse campo. Essa é uma pesquisa bem interessante e motivada, também, por um teorema de nome engraçado, mas, extremamente importante para a área, chamado de no free lunch theorem. Esse teorema nos indica que não existe uma máquina de aprendizagem que seja a melhor para todas as tarefas. Ou seja, cada tarefa tem suas peculiaridades que devem ser melhor resolvidas por máquinas que tenham características distintas. Nota: um teorema é uma afirmação provada como verdadeira; logo, essa difere de uma mera opinião.

Consequentemente, é responsabilidade do especialista em aprendizagem a escolha da melhor máquina para resolver uma nova tarefa. Mas, existe outra alternativa…

Se para cada tarefa, uma máquina deve ser escolhida, por que não unir esforços e juntar várias máquinas para resolver essa tal tarefa? Vox Populi, Vox Dei. vox-populi-vox-dei3Esse “poder das multidões” (wisdom of the crowd) é a premissa da área de Combinação de Classificadores (ensemble learning) que possui vários nomes, tais como: sistemas de múltiplos classificadores e máquinas de comitê. Esses sistemas combinam máquinas com o intuito de melhorar a precisão geral do sistema, fundamentando-se no argumento de que a junção das opiniões de um grupo de indivíduos é melhor do que a opinião de apenas um indivíduo.

Em um experimento, no início do século vinte, Sir Francis Galton — o mesmo que desenvolveu um método eficiente para classificação de impressões digitais — combinou a resposta de 787 pessoas que estimaram o peso de um boi morto e vestido. Ao calcular a média das respostas de todos os participantes, Galton observou que o erro foi menor do que um porcento (link). Ao invés de combinar as respostas de todos, Galton poderia ter escolhido o indivíduo mais competente para estimar o peso. Entretanto, essa escolha não seria uma tarefa trivial, da mesma forma que, escolher a melhor máquina de aprendizagem, por tarefa, não é uma tarefa simples. Assim, ao combinar todas as respostas, a probabilidade de escolher um indivíduo incompetente foi minimizada.

É inútil combinar máquinas que tenham o mesmo comportamento, ou seja, máquinas que acertem e errem as mesmas instâncias. Assim, ao juntar várias máquinas em um pool, é esperado que elas tenham um excelente desempenho em partes diferentes do espaço de características. Em outras palavras, é fundamental que as máquinas sejam diversas entre si. Existem várias maneiras de se obter diversidade, entre elas: usar diferentes algoritmos de aprendizagem e usar dados diferentes para treinar cada uma das máquinas.

Razões para combinar máquinas

Os aspectos que fortalecem o uso de estratégias de combinação de classificadores podem ser aglutinados em: estatístico, computacional e representacional. A figura ao lado é usada para explicar esses três aspectos. reasons-mcsNela, vê-se que o “espaço dos bons modelos”, para uma dada tarefa, é um subconjunto do “espaço dos modelos”. Esses modelos são máquinas de aprendizagem, de classificação ou de regressão, que foram treinadas com dados de uma tarefa específica. Além disso, o asteriscos (∗) representa o classificar ideal, os círculos (•) são os classificadores individuais e o triângulo (Δ) representa a combinação dos classificadores (ensemble). Objetiva-se obter um modelo o mais próximo possível do modelo ideal (∗). Nota: essa figura foi adaptada da figura 3.2 do livro da Kuncheva, 2014.

Estatístico

Na figura que mostra o aspecto Estatístico, percebe-se que o modelo combinado (Δ) está bem mais próximo do modelo ideal (∗) do que a maioria dos modelos individuais (•). Vale salientar que o modelo combinado não é o melhor, pois existe pelo menos um modelo (•) que está mais próximo do modelo ideal do que o modelo combinado. Entretanto, por melhor que seja o seu procedimento experimental, a incerteza relacionada à precisão do modelo, aferida durante o treinamento, pode levar a escolha de um modelo inadequado. Assim, ao combinar os modelos, minimiza-se a chance de selecionar um modelo ruim.

Computacional

Durante o treinamento, um modelo é levado do “espaço dos modelos” para o “espaço dos bons modelos” — conforme mostrado pelas curvas em cinza na figura do aspecto Computacional.  Cada um desses modelos (•) deve se posicionar em um mínimo local diferente da superfície de erro. Logo, a combinação desses modelos diversos gerará um modelo mais próximo do modelo ideal.

Representacional

Suponha que todos os modelos individuais (•) sejam lineares e que a tarefa, que se deseja resolver, seja não-linearmente separável. Logo, nenhum modelo, cuja representação é linear, será capaz de modelar essa tarefa. Por outro lado, ao combinar modelos lineares, regiões não-lineares podem ser modeladas. Assim, na figura que mostra o aspecto Representacional, percebe-se que o modelo combinado (Δ) está fora do “espaço dos modelos”, pois todos os modelo desse espaço são lineares e o alvo é um modelo não-linear que pode ser alcançado combinando modelos lineares. De maneira geral, regiões complexas de bordas entre classes podem ser modeladas usando modelos simples.

No próximo post, arquiteturas de combinação de classificadores — estática e dinâmica — serão discutidas.

Como evitar overfitting?

Não existe uma bala-de-prata para evitar overfitting. Boas práticas na condução de procedimentos experimentais, aliado ao entendimento do significado desse fenômeno, 99-ou-overfitting
contribuem para amenizar esse indesejável problema. Seguem alguns pontos a considerar para combater o overfitting.

treinar com mais dados

Se a máquina de aprendizagem usada é complexa, em termos da quantidade de parâmetros a ajustar, uma alternativa é adquirir mais dados com o intuito de equilibrar a quantidade de parâmetros versus a quantidade de instâncias de treinamento. Ou, simplesmente, deve-se escolher uma máquina mais simples, que tenha menos parâmetros.

validação cruzada

Uma das formas de realizar validação cruzada é usar o procedimento k-fold cross-validation. Nesse procedimento, o conjunto de dados é dividido em k partes, aproximadamente do mesmo tamanho, das quais, k-1 partes são usadas para treinar o modelo e a parte restante é usada para avaliar o modelo. Esse processo é repetido k vezes, de forma que cada parte será usada tanto para treinar como para avaliar o modelo. De maneira geral, a validação cruzada, por si só, não evita overfitting, mas segue uma boa prática ao separar o conjunto de teste e ao realizar um revezamento dos dados para uma melhor avaliação, no que tange a generalização do modelo em instâncias não vistas. Uma observação: o k-fold cross-validation não é uma boa opção quando o conjunto possui poucos dados.

parar o treinamento mais cedo (early stopping)

Máquinas de aprendizagem, tais como redes neurais artificiais, árvores de decisão, deep learning, entre outras, aprendem iterativamente. A cada passo, a máquina ajusta seus parâmetros aos dados e isso pode ser monitorado. Pode-se usar esse monitoramento para decidir qual é o melhor momento de interromper o treinamento da máquina. Espera-se que a precisão no conjunto de treinamento aumente com o tempo, mas, em relação ao conjunto de validação, a acurácia deve atingir um pico e depois cair. Esse pode ser um bom momento para frear o treinamento, antes que a máquina se sobreajuste aos dados.

regularização

Regularização é um conceito amplo que envolve várias técnicas com o propósito de produzir modelos que melhor se ajustem aos dados, evitando overfitting. Um exemplo é o procedimento de poda em uma árvore de decisão. Esse consiste em eliminar alguns “galhos” que, uma vez removidos, reduzirá a árvore, tornando-a mais simples e menos específica às instâncias de treinamento. Outros exemplos de técnicas de regularização envolvem dropout em redes neurais e adição de parâmetros de penalização na função de custo.

ensemble

Ensemble learning, ou sistema de múltiplos classificadores – SMC -,  combina as saídas de vários modelos com o intuito de melhorar a resposta final do sistema. Os SMCs têm alcançado resultados melhores do que o uso de modelos isolados. Esse sucesso deve-se a divisão de tarefas que é o espírito dessa área. Baseado no princípio de dividir-para-conquistar, cada modelo que compõe o SMC é treinado com parte do conjunto de treinamento e, consequentemente, acaba por se tornar um especialista nessa porção. Essa estratégia ajuda a amenizar o overfitting, e além disso, é robusta à presença de ruído nos dados.

 

Overfitting: desafio capital para aprendizagem de máquina

Overfitting (sobreajuste ou superajuste) é, provavelmente, o maior problema em aprendizagem de máquina. Ele ocorre quando um modelo não é capaz de generalizar. Ou seja, o modelo classifica corretamente os dados que foram usados para treiná-lo, mas, não consegue reproduzir esse desempenho em dados novos, que lhe são apresentados durante seu uso em produção. Logo, assume-se que o modelo “decorou” os dados usados para treiná-lo e, por conseguinte, seu desempenho nos dados de treinamento é bastante superior ao seu desempenho em uso, frustrando as expectativas do cliente. 

Para ilustrar, suponha que o treinamento de uma máquina de aprendizagem, usando um conjunto de treinamento Τ, gerou um modelo, e que, esse modelo foi avaliado no conjunto de teste Δ. As taxas de acerto do modelo, nos conjuntos Τ e Δ, foram de 95 e 92%, respectivamente. Logo, a expectativa é que, em uso, a acurácia do modelo gire em torno dos noventa porcento. Mas, ao ser colocado em produção, esse modelo não ultrapassa os 70% de acerto. Essa perda de 20 pontos percentuais, pode ser oriunda de várias fontes, uma delas é overfitting. Mas, o que ocorreu?

Vamos usar um exemplo para explicar o ocorrido. A figura acima mostra três cenários que diferem na função aprendida (modelo que é mostrado em verde) a partir dos dados de treinamento. Veja que na figura (a), o modelo classifica incorretamente muitas instâncias. Já na figura (b), o modelo não erra nenhuma instância, a separação é perfeita. A diferença entre as figuras (a) e (b) está no ajuste dos modelos. Enquanto o modelo da figura (a) não conseguiu aprender a estrutura dos dados (underfitting), o modelo da figura (b) fez uma estimativa muito precisa e acabou por “decorar” as instâncias de treinamento (overfitting). Um caso desejado é apresentado na figura (c), na qual, o modelo se ajusta aos dados, mas de forma a capturar as estruturas das classes e, consequentemente, poder generalizar bem instâncias nunca vistas.

Em outras palavras, caso um modelo bastante simples seja usado, pode-se subestimar e não capturar a complexidade dos dados. Observe que, na figura (a), a região de decisão é não-linearmente separável, logo, uma reta não é capaz de resolver o problema. Por outro lado, ao usar uma função muito complexa (popularmente: um canhão para matar uma mosca), corre-se o risco de decorar as instâncias de treinamento (figura (b)) e, dessa forma, perde-se a capacidade de classificar corretamente instâncias não usadas no treinamento. Vale salientar que a maioria das instâncias que serão incorretamente classificadas concentram-se na borda, perto da região de decisão, entre as classes. Já as instâncias mais internas às classes, essas são facilmente classificadas por qualquer algoritmo (mas, essa é uma discussão para outro post).

Avaliações incorretas geram modelo com overfitting 

A maneira mais comum de se incorrer em overfitting é treinar e avaliar a máquina usando o mesmo conjunto de dados. Suponha a situação na qual o professor passa listas de exercícios durante o curso e, na prova, repete questões dessas listas. Nesse caso, é esperado que os alunos que aprenderam as questões das listas, não terão nenhuma dificuldade em acertar todas as questões da prova. Dessa forma, as notas não refletirão a capacidade dos alunos em resolver problemas semelhantes aos que foram apresentados nas listas de exercícios; pois, os alunos devem ser avaliados em questões diferentes das usadas nas listas de exercícios. Com base nessa analogia, as máquinas devem ser avaliadas usando dados diferentes dos dados que foram usados para treiná-las.

treino-teste

Mesmo quando são usados dois conjuntos disjuntos, um para treinar a máquina e outro para testá-la, não há garantia de que o overfitting será evitado. Isso ocorre quando procedimentos metodológicos incorretos são empregados, tais como: uso de informações dos dados de teste e overfitting no conjunto de validação. 

Usando informações do conjunto de teste

Aprendizagem de máquina é a arte de ajustar parâmetros. São muitos parâmetros para avaliar e uma pergunta recorrente é: quais parâmetros devo usar e em quais circunstâncias? Uma forma comum de abordar essa questão é usar o seguinte procedimento: primeiro, define-se um conjunto de parâmetros, depois, a máquina é treinada e, por fim, o modelo gerado é avaliado no conjunto de teste. Até aí, tudo bem! Mas, se esse processo for repetido com um conjunto diferente de parâmetros, teremos, ao final, dois modelos, cada um treinado com parâmetros diferentes. Como escolher o melhor deles? Se escolhermos olhando para o resultado dos modelos no conjunto de teste, essa escolha está fadada a overfitting, pois, o conjunto de teste foi usado no processo de escolha dos parâmetros. Existem variações desse procedimento incorreto que, por princípio, ferem a premissa de não usar o conjunto de teste no processo de ajuste/escolha do modelo.

Overfitting no conjunto de validação 

Modificando um pouco o procedimento descrito acima, ao invés de se ter dois conjuntos, dividimos os dados em três conjuntos disjuntos: treinamento, validação e teste. O objetivo do conjunto de validação é auxiliar o treinamento da máquina, buscando os melhores parâmetros, similar ao procedimento acima, mas, deixando o conjunto de teste fora do processo. Esse parece ser um procedimento mais confiável, pois, o conjunto de teste, no qual o modelo será avaliado, está, de fato, ausente do processo de treinamento. Perceba que o procedimento de ajuste dos parâmetros pode se repetir diversas vezes, mas o conjunto de validação é o mesmo. Assim, após várias tentativas, um conjunto de parâmetros que satisfaça a métrica usada será encontrado, porém, esse modelo estará sobreajustado ao conjunto de validação. 

Etapas de um sistema de aprendizagem de máquina

O desenvolvimento de sistemas, que usam algoritmos de aprendizagem de máquina, segue um fluxo diferente das abordagens tradicionais. A fonte dessa diferença reside na premissa básica de qualquer algoritmo de aprendizagem: extração de conhecimento a partir de dados históricos.  Assim, são descritas a seguir, cinco etapas para a construção de soluções que baseiam-se em aprendizagem de máquina.

etapa-1

Dado que os algoritmos de aprendizagem de máquina “aprendem” a partir de dados, a primeira etapa é a aquisição dos dados. O conjunto de informações coletadas pode ser armazenado de várias maneiras: sistema gerenciador de banco de dados, planilhas, ou mesmo em arquivo texto. Importante ressaltar que esses dados serão usados para treinar/calibrar o modelo (a máquina de aprendizagem), logo, devem representar toda a diversidade da tarefa sob investigação. Em outras palavras, não conjecture que o sistema irá classificar um pássaro como sendo beija-flor-tesoura, nome científico eupetomena macroura, se nenhum beija-flor dessa espécie está presente nos dados.

etapa-2

Os dados coletados na etapa anterior devem ser tratados com o intuito de prepará-los para o processo de treinamento do algoritmo de aprendizagem. Alguns procedimentos comuns são: seleção de variáveis, redução de instâncias, extração de características, imputação de dados faltantes e análise de outliers. Vale salientar que esse processamento, muitas vezes, está atrelado ao algoritmo de aprendizagem que será usado na etapa seguinte. Isso se dá, pois, algoritmos diferentes, possuem requisitos diferentes. Por exemplo: alguns algoritmos lidam apenas com dados que estejam representados com valores numéricos, outros apenas com valores categóricos. Logo, é necessário converter variáveis categóricas em numéricas, ou vice-versa, dependendo do algoritmo.

etapa-3

Nessa etapa, o algoritmo de aprendizagem de máquina, que melhor adere aos dados, é escolhido para treinar o modelo. Essa escolha deve levar em consideração vários pontos, entre eles: quantidade de instâncias e de variáveis no banco de dados e existência de desbalanceamento entre as classes. Além disso, deve-se atentar ao tipo de aprendizagem: supervisionado, não-supervisionada, semi-supervisionada ou por reforço. E, no caso de ser supervisionado, se o problema é de classificação ou de regressão. Dentre os modelos mais comumente usados, é possível citar: árvore de decisão, redes neurais multi-layer perceptronrandom forest, support vector machines, k-nearest neighbours, XGBoost, logistic regression, k-means, naive bayes, apriori e expectation-maximization. Por fim, vale destacar os sistemas de múltiplos classificadores (ensemble learning) que, ao invés de usar apenas uma máquina, combinam várias máquina de aprendizagem, a fim de melhorar a precisão final do sistema. 

etapa-4

O modelo treinado deve ser avaliado para que seja possível predizer sua precisão em uso. Várias medidas podem ser usadas para aferir a performance do modelo e, a escolha da medida depende da tarefa que se deseja resolver. Exemplos de medidas: acurácia, f-score e curva ROC. Vale ainda frisar que o modelo deve ser avaliado com dados diferentes dos que foram usados para treiná-lo. Assim, os dados devem ser divididos em dois conjuntos disjuntos: treinamento (usada para treinar o modelo) e teste (usado para avaliar o modelo). Quando a estimative de desempenho de um modelo, em dados nunca vistos (dados de teste), é otimista, diz-se que ocorreu overfitting. Esse é, provavelmente, o maior problema de aprendizagem de máquina.

etapa-5

Após a avaliação do modelo, caso o desempenho esperado não tenha sido alcançado, faz-se necessário aperfeiçoar o modelo. As possíveis causas dessa inadequação devem ser investigadas e, caso necessário, retorna-se para a aquisição de novos dados (etapa 1), para o processamento dos dados de um forma diferente (etapa 2) e/ou para o treinamento de um novo modelo, possivelmente, usando um algoritmo de aprendizagem diferente (etapa 3).