Qual algoritmo de ML escolher?

Mar 04 2023
Uma das principais decisões que você precisa tomar ao resolver um problema de ciência de dados é qual algoritmo de aprendizado de máquina usar. Existem centenas de algoritmos de aprendizado de máquina para escolher, cada um com suas próprias vantagens e desvantagens.

Uma das principais decisões que você precisa tomar ao resolver um problema de ciência de dados é qual algoritmo de aprendizado de máquina usar.

Existem centenas de algoritmos de aprendizado de máquina para escolher, cada um com suas próprias vantagens e desvantagens. Alguns algoritmos podem funcionar melhor do que outros em tipos específicos de problemas ou em conjuntos de dados específicos.

O teorema “No Free Lunch” (NFL) afirma que não existe um algoritmo que funcione melhor para todos os problemas, ou em outras palavras, todos os algoritmos têm o mesmo desempenho quando sua média é calculada sobre todos os problemas possíveis.

Diferentes modelos de aprendizado de máquina

Neste artigo vamos discutir os principais pontos que você deve considerar ao escolher um modelo para o seu problema, e como comparar entre diferentes algoritmos de aprendizado de máquina.

Aspectos Chave do Algoritmo

A lista a seguir contém 10 perguntas que você pode se fazer ao considerar um algoritmo de aprendizado de máquina específico:

  1. Que tipo de problemas o algoritmo pode resolver? O algoritmo pode resolver apenas problemas de regressão ou classificação, ou pode resolver ambos? Ele pode lidar com problemas multi-classe/multi-rótulo ou apenas problemas de classificação binária?
  2. O algoritmo tem alguma suposição sobre o conjunto de dados? Por exemplo, alguns algoritmos assumem que os dados são linearmente separáveis ​​(por exemplo, perceptron ou SVM linear), enquanto outros assumem que os dados são normalmente distribuídos (por exemplo, Gaussian Mixture Models).
  3. Há alguma garantia sobre o desempenho do algoritmo? Por exemplo, se o algoritmo tentar resolver um problema de otimização (como em regressão logística ou redes neurais), é garantido encontrar o ótimo global ou apenas uma solução ótima local?
  4. Quantos dados são necessários para treinar o modelo de forma eficaz? Alguns algoritmos, como redes neurais profundas, são mais experientes em dados do que outros.
  5. O algoritmo tende a superajustar? Em caso afirmativo, o algoritmo fornece maneiras de lidar com o overfitting?
  6. Quais são os requisitos de tempo de execução e memória do algoritmo, tanto durante o treinamento quanto no tempo de previsão?
  7. Quais etapas de pré-processamento de dados são necessárias para preparar os dados para o algoritmo?
  8. Quantos hiperparâmetros o algoritmo possui? Algoritmos que possuem muitos hiperparâmetros levam mais tempo para treinar e ajustar.
  9. Os resultados do algoritmo podem ser facilmente interpretados? Em muitos domínios de problemas (como diagnóstico médico), gostaríamos de ser capazes de explicar as previsões do modelo em termos humanos. Alguns modelos podem ser facilmente visualizados (como árvores de decisão), enquanto outros se comportam mais como uma caixa preta (por exemplo, redes neurais).
  10. O algoritmo suporta aprendizado online (incremental), ou seja, podemos treiná-lo em amostras adicionais sem reconstruir o modelo do zero?

Por exemplo, vamos pegar dois dos algoritmos mais populares: árvores de decisão e redes neurais, e compará-los de acordo com os critérios acima.

Árvores de decisão

  1. As árvores de decisão podem lidar com problemas de classificação e regressão. Eles também podem lidar facilmente com problemas multiclasse e multirótulo.
  2. Os algoritmos de árvore de decisão não têm nenhuma suposição específica sobre o conjunto de dados.
  3. Uma árvore de decisão é construída usando um algoritmo guloso, que não garante encontrar a árvore ótima (ou seja, a árvore que minimiza o número de testes necessários para classificar corretamente todas as amostras de treinamento). No entanto, uma árvore de decisão pode atingir 100% de precisão no conjunto de treinamento se continuarmos estendendo seus nós até que todas as amostras nos nós folha pertençam à mesma classe. Essas árvores geralmente não são bons preditores, pois se adaptam ao ruído no conjunto de treinamento.
  4. As árvores de decisão podem funcionar bem mesmo em conjuntos de dados pequenos ou médios.
  5. As árvores de decisão podem facilmente se sobreajustar. No entanto, podemos reduzir o overfitting usando a poda de árvore. Também podemos usar métodos de conjunto, como florestas aleatórias, que combinam a saída de várias árvores de decisão. Esses métodos sofrem menos com overfitting.
  6. O tempo para construir uma árvore de decisão é O ( n ² p ), onde n é o número de amostras de treinamento e p é o número de características. O tempo de predição em árvores de decisão depende da altura da árvore, que geralmente é logarítmica em n , pois a maioria das árvores de decisão é razoavelmente balanceada.
  7. As árvores de decisão não requerem nenhum pré-processamento de dados. Eles podem lidar perfeitamente com diferentes tipos de recursos, incluindo recursos numéricos e categóricos. Eles também não requerem normalização dos dados.
  8. As árvores de decisão têm vários hiperparâmetros-chave que precisam ser ajustados, especialmente se você estiver usando poda, como a profundidade máxima da árvore e qual medida de impureza usar para decidir como dividir os nós.
  9. As árvores de decisão são simples de entender e interpretar, e podemos visualizá-las facilmente (a menos que a árvore seja muito grande).
  10. As árvores de decisão não podem ser facilmente modificadas para levar em consideração novas amostras de treinamento, pois pequenas alterações no conjunto de dados podem causar grandes alterações na topologia da árvore.
  1. As redes neurais são um dos modelos de aprendizado de máquina mais gerais e flexíveis que existem. Eles podem resolver quase qualquer tipo de problema, incluindo classificação, regressão, análise de séries temporais, geração automática de conteúdo, etc.
  2. As redes neurais não têm suposições sobre o conjunto de dados, mas os dados precisam ser normalizados.
  3. As redes neurais são treinadas usando gradiente descendente, portanto, elas só podem encontrar uma solução ótima local. No entanto, existem várias técnicas que podem ser usadas para evitar ficar preso em mínimos locais, como impulso e taxas de aprendizado adaptativo.
  4. Redes neurais profundas requerem muitos dados para treinar, na ordem de milhões de pontos de amostra. Em geral, quanto maior a rede (mais camadas e neurônios ela possui), precisamos de mais dados para treiná-la.
  5. Redes muito grandes podem memorizar todas as amostras de treinamento e não generalizar bem. Para muitos problemas, você pode começar com uma rede pequena (por exemplo, com apenas uma ou duas camadas ocultas) e aumentar gradualmente seu tamanho até começar a sobreajustar o conjunto de treinamento.
  6. O tempo de treinamento de uma rede neural depende de muitos fatores (o tamanho da rede, o número de iterações de descida de gradiente necessárias para treiná-la, etc.). No entanto, o tempo de previsão é muito rápido, pois precisamos apenas fazer uma passagem direta pela rede para obter o rótulo.
  7. As redes neurais exigem que todos os recursos sejam numéricos e normalizados.
  8. As redes neurais possuem muitos hiperparâmetros que precisam ser ajustados, como número de camadas, número de neurônios em cada camada, qual função de ativação usar, taxa de aprendizado, etc.
  9. As previsões das redes neurais são difíceis de interpretar, pois são baseadas na computação de um grande número de neurônios, cada um dos quais tem apenas uma pequena contribuição para a previsão final.
  10. As redes neurais podem se adaptar facilmente para incluir amostras de treinamento adicionais, pois usam um algoritmo de aprendizado incremental (descida de gradiente estocástico).

A tabela a seguir compara os tempos de treinamento e previsão para alguns algoritmos populares ( n é o número de amostras de treinamento ep é o número de recursos).

Algoritmos de maior sucesso em competições Kaggle

De acordo com uma pesquisa realizada em 2016, os algoritmos usados ​​com mais frequência pelos vencedores da competição Kaggle foram algoritmos de aumento de gradiente (XGBoost) e redes neurais (veja este artigo ).

Entre os 29 vencedores da competição Kaggle em 2015, 8 deles usaram XGBoost, 9 usaram redes neurais profundas e 11 usaram um conjunto de ambos.

O XGBoost foi usado principalmente em problemas que lidavam com dados estruturados (por exemplo, tabelas relacionais), onde as redes neurais eram mais bem-sucedidas no tratamento de problemas não estruturados (por exemplo, problemas que lidam com imagem, voz ou texto).

Seria interessante verificar se ainda é assim hoje ou se as tendências mudaram (alguém aceita o desafio?)

Obrigado por ler!