IGTI Blog
Aprendizado de Máquina

Machine Learning na Prática: como escolher seus algoritmos?

O campo de aprendizado de máquina oferece uma grande quantidade de opções quando se trata de algoritmos. No entanto, escolher o algoritmo correto não é uma tarefa trivial.

Nesse artigo falaremos sobre como devemos escolher os algoritmos e quais as principais características devemos estar atentos para aumentar nossa chance de sucesso.

Como professor e pesquisador na área de aprendizado de máquina e reconhecimento de padrões, não é raro ouvir a pergunta: qual o melhor algoritmo? Essa pergunta, tão recorrente nos cursos de formação, também circula na indústria e nos centros de pesquisa, e sua resposta é bastante insatisfatória.

Seria fantástico se houvesse uma resposta simples, mas a primeira (e única) resposta possível para ela é: depende. Depende da natureza da tarefa, da quantidade e tipos de dados disponíveis, do tipo de resposta que se espera, do tempo e recursos computacionais à disposição, da profundidade do nosso conhecimento sobre os algoritmos…

Assim, temos que nos conformar com o fato de que o melhor algoritmo para qualquer tipo de problema simplesmente não existe. Apesar de parecer frustrante, esse fato nos leva à uma pergunta muito mais interessante (e correta) a qual gostaria de discutir nesse artigo: o que devemos saber antes de escolher os algoritmos de aprendizado de máquina para a resolução de um problema?

Apesar de serem aplicados de diferentes formas em diferentes domínios, cada algoritmo possui características decorrentes dos seus princípios de funcionamento e que nos ajudam a responder essa pergunta. Alguns algoritmos exigem memória, enquanto outros exigem grande capacidade de processamento. Alguns precisam de um grande volume de amostras rotuladas, ao passo que outros são mais eficientes justamente quando temos uma quantidade reduzida de dados. São exatamente essas características que podem nos auxiliar na escolha daquele, ou daqueles, mais adequados ao nosso problema.

Antes de entrar no assunto, gostaria de deixar claro que esse artigo implica algum conhecimento prévio e será mais útil para pessoas que já foram iniciadas na área, já compreendem as diferenças básicas entre os tipos de aprendizado e já têm conhecimento dos métodos mais consolidados como o Naive Bayes, Árvores de Decisão, técnicas de regressão, clustering e redes neurais. Se alguns desses assuntos são novidades para você sugiro algumas leituras interessantes como esse artigo do Professor João Paulo Barbosa do IGTI.

Por ser uma área de grande interesse e em franca expansão, o aprendizado de máquina é um campo extremamente volátil. Novos algoritmos, ou novas versões de antigos algoritmos, são propostos e publicados quase que diariamente e, por esse motivo, gostaria de esclarecer que trataremos nesse artigo os algoritmos mais conhecidos em suas formas mais utilizadas. Bom, por onde começar?

A natureza da tarefa

Comecemos pelo óbvio. A área de Reconhecimento de Padrões abrange o estudo de algoritmos projetados para tarefas de descrição e predição de padrões. Isso significa tentar prever que algo pode ou não acontecer (ou estar presente) com um certo grau de incerteza. Sim, isso é um pouco vago, mas saber diferenciar qual tarefa se deseja executar e qual o tipo de resposta se deseja obter é o primeiro passo para a sua escolha.

O que isso significa? Significa que se estamos trabalhando na construção de agente autônomo (bot) para o mercado financeiro, temos que entender que tentar prever a variação de uma moeda frente a um cenário econômico em um horizonte de tempo é um problema completamente diferente de se decidir se é o momento certo ou não de comprá-la ou vendê-la.

Para iniciar o processo de escolha é necessário saber distinguir, pelo menos, os três grandes grupos de tarefas: classificação, regressão e clusterização. Existem excelentes artigos disponíveis para explicar as diferenças entre esses grupos, como esse outro artigo do Anderson Vinícius. Às vezes pode ser complicado distinguir entre esses grupos e segue aqui mais uma sugestão: se estamos tentando prever um valor, Regressão, se tentamos prever uma categoria, Classificação, se não sabemos as categorias, Clusterização.

Os dados podem decidir o caminho

Caso pergunte a um cientista de dados qual a quantidade de amostras que ele precisaria para garantir o melhor desempenho certamente responderá: “o máximo possível”. Quando se trata de reconhecimento de padrões, “mais” geralmente significa melhor. No entanto, quanto pode ser considerado suficiente? Qualquer dado nos interessa?

É fato que sem dados não há aprendizado e por isso, a primeira recomendação que se pode fazer é: se não possui dados, trate de obtê-los. Os dados disponíveis conduzem as técnicas que podemos utilizar. Se temos amostras rotuladas podemos utilizar técnicas supervisionadas, se não as temos é necessário recorrer às técnicas não supervisionadas, e quando a tarefa a ser realizada é tão complexa que só a resposta da interação com o ambiente pode fornecer um treinamento eficaz, aprendizado por reforço.

Independentemente das técnicas, a quantidade de dados necessários depende do problema. Apesar disso, alguns algoritmos costumam ser mais ávidos por dados do que outros. Sem se prender a faixas exatas de valores, mas sabendo que é mais comum falar-se de milhares do que de centenas, percebemos que os algoritmos apresentam tendências.

Redes Neurais, por exemplo, precisam de uma quantidade considerável de dados para apresentar resultados competitivos, mas, geralmente, o aumento da quantidade de dados melhora seu desempenho de predição. É um comportamento diferente, por exemplo, do algoritmo Naïve Bayes, que consegue realizar a tarefa de predição com algumas centenas de amostras.

Técnicas que combinam múltiplos preditores, como as Random Forests e técnicas de boosting, por precisarem alternar as amostras durante o treinamento, também precisam de uma quantidade maior de dados para apresentar bons resultados que seus preditores individualmente.

O mesmo pensamento se aplica à quantidade de dimensões do problema: a “maldição da dimensionalidade”. Alguns algoritmos se deterioram mais rapidamente quando se aumenta a quantidade de campos utilizados para a predição.

Um caso conhecido desse efeito é o K-NN.  O processo de classificação desse algoritmo faz com ele seja sensível à ruídos: características que dificultam a resolução do problema.  À medida que a quantidade de campos aumenta (10 a 20 características) rapidamente ele perde eficiência. Em contrapartida, as SVMs são menos sensíveis aos ruídos conseguindo lidar com grandes quantidades de características (mais de 100) sendo mais indicadas nesses casos.

O tempo que temos

Imagine um programa que coordena as ações de um jogador adversário utilizando técnicas de aprendizado de máquina. Esse programa é responsável por, a cada ação de um jogador humano, determinar uma jogada que maximize a chance de derrota do seu oponente. Para que desempenhe bem essa tarefa, esse programa além de ser bem projetado, precisa ser treinado antes de ser disponibilizado e deve atuar dentro do jogo oferecendo respostas em tempo adequado.

Se o jogo em questão é o xadrez, não será um grande problema se o programa levar vários segundos para responder a uma jogada e, da mesma forma, investir alguns meses sendo treinado para jogar. Contudo, se o jogo é um jogo de arena online a resposta precisa ser imediata e o treinamento deve acontecer durante o próprio jogo para que a máquina possa se adaptar àqueles jogadores.

Os algoritmos possuem diferentes exigências a respeito do tempo e recursos necessários para serem devidamente treinados e executarem suas tarefas, e isso é importantíssimo se temos restrições quanto a esses parâmetros. A pergunta que se faz aqui é: quais algoritmos são treinados mais rapidamente? Quais são mais rápidos durante a execução?

Técnicas baseadas em otimização de parâmetros como os modelos de Regressão Linear, requerem um esforço maior durante a fase de treinamento do sistema, em contrapartida, depois de escolhido o modelo, o processo de execução é rápido pois resume à realização de um único cálculo. Da mesma forma, técnicas baseadas em aprendizado por reforço, também precisam de mais tempo para serem treinados, mas respondem em baixíssimo tempo durante a execução.

O mesmo ocorre na construção de uma Árvore de Decisão que possui um tempo de treinamento relativamente elevado, mas seu processo de classificação baseado em testes é extremamente rápido. Em contrapartida, o K-NN tem um tempo de treinamento baixíssimo, mas o tempo que leva para calcular as distâncias de uma amostra para todas as outras, faz com que a execução do processo de classificação seja extremamente lenta, especialmente em grandes bases de dados.

A Regressão Logística, assim como o Naive Bayes, possui ambos os processos, treinamento e classificação, rápidos. As SVMs possuem um tempo de treinamento mais lento que os anteriores, mas seu processo de predição também é rápido o suficiente para ser utilizado em problemas de processamento de texto e de linguagem natural.

A complexidade da tarefa e do algoritmo

O raciocínio é simples: boa parte dos algoritmos de aprendizado de máquina se baseiam na criação de linhas que descrevem ou dividem o espaço. Algoritmos de classificação e clustering criam linhas que expressam a fronteira entre diferentes grupos. Algoritmos de regressão criam linhas que expressam uma tendência dos dados. Alguns desses algoritmos presumem que essas relações são lineares. Essa premissa é ruim para alguns problemas, e saber isso pode economizar muito tempo da equipe de desenvolvimento.

O Discriminante Linear de Fisher, ou seu modelo generalizado LDA (Linear Discriminant Analysis), e a Regressão Logística, por exemplo, são exemplos de algoritmos que utilizam a linearidade como premissa. Outros modelos de regressão também possuem dificuldade de expressar relações não lineares complexas, pois como seu modelo se resume a encontrar um conjunto de parâmetros para uma equação que maximiza o ajuste da curva, seus termos de alta ordem podem ser um desafio. Logo, se a fronteira ou tendência é complexa, tome cuidado com esses algoritmos.

Alguns algoritmos, apesar de se aproveitarem da linearidade, introduziram artifícios para evitar esse problema. As SVMs, por exemplo, introduziram as variáveis slack e os “truques” de kernel para mitigar essas situações. No entanto, isso faz com que sua utilização se torne mais complexa. Em compensação, outros algoritmos como Árvores de Decisão, K-NN e as Redes Neurais possuem a capacidade de estabelecerem fronteiras de decisão (e de tendência no caso da utilização das Árvores para a tarefa de regressão) complexas e não lineares sem a necessidade de parametrização.

O quanto o algoritmo acerta e o que queremos que ele acerte

Acurácia é uma palavra que deve fazer parte do vocabulário de qualquer profissional que queira atuar na área de aprendizado de máquina. Apesar de existirem diversas formas de se determinar o desempenho de um algoritmo, esse é, sem dúvida, o primeiro parâmetro a se avaliar. Sendo a acurácia a nossa primeira medida é certo que com tempo para treinamento e uma quantidade suficiente de dados, as Redes Neurais, SVMs e métodos ensembles como as Random Forests geralmente apresentam desempenho superiores. Da mesma forma, é comum que métodos como Naïve Bayes e o LDA tenham desempenho inferiores aos demais.

Mas o cuidado nesse aspecto não é somente de se avaliar qual algoritmo “acerta” mais. Imagine o seguinte: existe um sistema que controla um reator nuclear e ele deve alertar se há ou não risco de vazamento. Um típico problema de classificação com duas categorias (existe vazamento / não existe vazamento) sobre o qual reside uma decisão de projeto. Responda o que é pior: o sistema emitir um alerta quando não há vazamento ou não emitir um alerta quando há vazamento?

Nesse caso é óbvio que o falso positivo tem consequências menos trágicas que um falso negativo. Saber qual medida se deseja privilegiar também pode ajudar na escolha. Nesses casos, somente testes comparativos sobre o problema com os algoritmos escolhidos previamente podem nos ajudar a acertar na escolha.

Conclusão

Projetar um sistema de aprendizado de máquina que reconheça padrões não é uma tarefa trivial. Os aspectos citados nesse artigo podem ajudá-lo a escolher de forma mais consciente os algoritmos para aumentar, assim, sua chance de sucesso. Para terminar o artigo um último conselho: teste sempre que puder!

Professor autor: Flávio Augusto Rezende Calado