
Hoje, existe um grande número de ferramentas de software para criar modelos de Machine Learning. As primeiras dessas ferramentas foram formadas entre cientistas e estatísticos, onde as linguagens R e Python são populares, ecossistemas historicamente desenvolvidos para processar, analisar e visualizar dados nessas linguagens, embora existam certas bibliotecas de aprendizado de máquina para Java, Lua, C ++. Além disso, as linguagens de programação interpretadas são muito mais lentas que as compiladas, portanto, a preparação dos dados e a estrutura dos modelos são descritas na linguagem interpretada, e os principais cálculos são realizados na linguagem compilada.
Neste post, falaremos principalmente sobre bibliotecas que têm uma implementação em Python, pois essa linguagem possui um grande número de pacotes para integração em vários serviços e sistemas, bem como para escrever vários sistemas de informação. O material contém uma descrição geral de bibliotecas conhecidas e será útil principalmente para aqueles que começarem a estudar o campo da ML e quiserem entender aproximadamente onde procurar implementações de certos métodos.
Ao escolher pacotes específicos para resolver problemas, a primeira coisa a decidir é se eles têm um mecanismo para resolver seus problemas. Assim, por exemplo, para análise de imagem, provavelmente você precisará lidar com redes neurais e para trabalhar com texto - com redes recorrentes, com uma pequena quantidade de dados, as redes neurais provavelmente terão que ser abandonadas.
Bibliotecas de uso geral em Python
Todos os pacotes descritos nesta seção são de alguma forma usados para resolver praticamente qualquer tarefa de aprendizado de máquina. Muitas vezes, são suficientes para construir o modelo inteiro, pelo menos na primeira aproximação.
Numpy
Uma biblioteca de código aberto para executar operações de álgebra linear e transformações numéricas. Como regra, essas operações são necessárias para converter conjuntos de dados, que podem ser representados como uma matriz. A biblioteca implementou um grande número de operações para trabalhar com matrizes multidimensionais, transformadas de Fourier e geradores de números aleatórios. Os formatos de armazenamento Numpy são o padrão de fato para armazenar dados numéricos em muitas outras bibliotecas (por exemplo, Pandas, Scikit-learn, SciPy).
Site :
www.numpy.orgPandas
Biblioteca para processamento de dados. Com sua ajuda, você pode baixar dados de quase qualquer fonte (integração com os principais formatos de armazenamento de dados para aprendizado de máquina), calcular várias funções e criar novos parâmetros, criar consultas de dados usando funções agregadas semelhantes às implementadas no SQL. Além disso, há uma variedade de funções de transformação de matriz, um método de janela deslizante e outros métodos para obter informações de dados.
Site :
pandas.pydata.orgScikit-learn
Uma biblioteca de software com mais de uma década de história contém implementações de quase todas as transformações possíveis e, muitas vezes, é suficiente para implementar completamente o modelo. Como regra, ao programar quase qualquer modelo em Python, algumas transformações usando esta biblioteca estão sempre presentes.
O Scikit-learn contém métodos para dividir um conjunto de dados em teste e treinamento, calcular métricas básicas sobre conjuntos de dados e realizar validação cruzada. A biblioteca também possui os algoritmos básicos de aprendizado de máquina: regressão linear (e suas modificações de Lasso, regressão de cume), vetores de suporte, árvores de decisão e florestas, etc. Há também implementações dos principais métodos de agrupamento. Além disso, a biblioteca contém métodos constantemente usados pelos pesquisadores para trabalhar com parâmetros (recursos): por exemplo, diminuindo a dimensão usando o método do componente principal. A biblioteca imblearn faz parte do pacote, permitindo que você trabalhe com amostras desequilibradas e gere novos valores.
Site :
www.scikit-learn.orgScipy
Uma extensa biblioteca projetada para pesquisa. Inclui um grande conjunto de funções da análise matemática, incluindo o cálculo de integrais, a busca de máximo e mínimo, funções para processar sinais e imagens. De várias maneiras, essa biblioteca pode ser considerada um análogo do pacote MATLAB para desenvolvedores na linguagem Python. Com sua ajuda, você pode resolver sistemas de equações, usar algoritmos genéticos e executar muitas tarefas de otimização.
Website :
www.scipy.orgBibliotecas específicas
Nesta seção, são consideradas bibliotecas com um campo específico de aplicabilidade ou popular com um número limitado de usuários.
Tensorflow
Uma biblioteca desenvolvida pelo Google para trabalhar com tensores é usada para construir redes neurais. O suporte para computação em placas gráficas possui uma versão para a linguagem C ++. Com base nessa biblioteca, as bibliotecas de nível superior são construídas para trabalhar com redes neurais no nível de camadas inteiras. Então, há algum tempo, a popular biblioteca Keras começou a usar o Tensorflow como principal back-end para cálculos, em vez da biblioteca Theano similar. A biblioteca cuDNN é usada para trabalhar em placas gráficas NVIDIA. Se você trabalha com imagens (com redes neurais convolucionais), provavelmente precisará usar esta biblioteca.
Site :
www.tensorflow.orgKeras
Uma biblioteca para construção de redes neurais que suporta os principais tipos de camadas e elementos estruturais. Ele suporta redes neurais recorrentes e convolucionais, incorpora a implementação de arquiteturas de redes neurais conhecidas (por exemplo, VGG16). Algum tempo atrás, as camadas dessa biblioteca ficaram disponíveis dentro da biblioteca Tensorflow. Existem funções prontas para trabalhar com imagens e texto (incorporação de palavras etc.). Integrado no Apache Spark usando a distribuição dist-keras.
Site :
www.keras.ioCaffe
Uma estrutura para o treinamento de redes neurais da Universidade de Berkeley. Como o TensorFlow, ele usa cuDNN para trabalhar com placas gráficas NVIDIA. Ele contém a implementação de redes neurais mais conhecidas, uma das primeiras estruturas integradas ao Apache Spark (CaffeOnSpark).
Site :
cafee.berkeleyvision.orgpyTorch
Permite portar a biblioteca Torch da linguagem Lua para a linguagem Python. Ele contém implementações de algoritmos para trabalhar com imagens, operações estatísticas e ferramentas para trabalhar com redes neurais. Separadamente, você pode criar um conjunto de ferramentas para algoritmos de otimização (em particular, descida de gradiente estocástico).
Website :
www.torch.chImplementações de aumento de gradiente sobre árvores de decisão
Tais algoritmos invariavelmente causam maior interesse, pois geralmente apresentam melhores resultados do que as redes neurais. Isso é especialmente verdadeiro se você não tiver conjuntos de dados muito grandes (uma estimativa muito aproximada: milhares e dezenas de milhares, mas não dezenas de milhões). Entre os modelos vencedores da plataforma competitiva kaggle, algoritmos de aumento de gradiente sobre árvores de decisão são bastante comuns.
Como regra, as implementações de tais algoritmos estão em bibliotecas de aprendizado de máquina de base ampla (por exemplo, no Scikit-learn). No entanto, existem implementações especiais desse algoritmo, que geralmente podem ser encontradas entre os vencedores de várias competições. Vale destacar o seguinte.
Xgboost
A implementação mais comum do aumento de gradiente. Tendo aparecido em 2014, em 2016 já havia conquistado uma popularidade considerável. A classificação e os modelos baseados na análise de histograma são usados para selecionar a partição.
Website :
github.com/dmlc/xgboostLightgbm
Opção de aumento de gradiente da Microsoft, lançada em 2017. Amostragem de um lado com base em gradiente (GOSS) é usada para selecionar o critério de particionamento. Existem métodos para trabalhar com atributos categóricos, ou seja, com sinais que não são expressos explicitamente por um número (por exemplo, o nome do autor ou a marca do carro). Faz parte do projeto Microsoft DMTK dedicado à implementação de abordagens de aprendizado de máquina para .Net.
Website :
www.dmtk.ioCatboost
O desenvolvimento do Yandex, que, como o LightGBM, foi lançado em 2017, implementa uma abordagem especial para o processamento de recursos categóricos (com base na codificação de destino, ou seja, substituição de recursos categóricos por estatísticas com base no valor previsto). Além disso, o algoritmo contém uma abordagem especial para a construção da árvore, que mostrou os melhores resultados. Nossa comparação mostrou que esse algoritmo funciona melhor do que outros diretamente da caixa, ou seja, sem definir nenhum parâmetro.
Site :
catboost.yandexCNTK (Microsoft Cognitive Toolkit)
A estrutura da Microsoft Corporation possui uma interface C ++. Fornece implementação de várias arquiteturas de redes neurais. Pode ser uma integração interessante com o .Net.
Site :
www.microsoft.com/en-us/cognitive-toolkitOutros recursos de desenvolvimento
À medida que o aprendizado de máquina se tornou mais popular, os projetos pareciam repetidamente simplificar o desenvolvimento e colocá-lo em forma gráfica com acesso on-line. Nesse campo, vários podem ser observados.
Azure ML
Serviço de aprendizado de máquina na plataforma Microsoft Azure, no qual você pode criar o processamento de dados na forma de gráficos e executar cálculos em servidores remotos, com a capacidade de incluir código Python e outros.
Website: azure.microsoft.com/ru-ru/services/machine-learning-studio
Experiência do IBM DataScience (IBM DSX)
Um serviço para trabalhar no ambiente do Jupyter Notebook com a capacidade de executar cálculos em Python e outros. Oferece suporte à integração com conjuntos de dados conhecidos e Spark, um projeto IBM Watson.
Website :
ibm.com/cloud/watson-studioPacotes de ciências sociais
Entre eles estão o IBM Statistical Package for the Social Sciences (SPSS), um produto de software IBM para processamento de estatísticas nas ciências sociais, que suporta uma interface gráfica para definir o processo de processamento de dados. Algum tempo atrás, tornou-se possível incorporar algoritmos de aprendizado de máquina na estrutura geral de execução. Em geral, o suporte limitado a algoritmos de aprendizado de máquina está se tornando popular entre pacotes estatísticos que já incluem funções estatísticas e métodos de visualização (por exemplo, Tableau e SAS).
Conclusão
A escolha do pacote de software com base no qual a tarefa será resolvida é geralmente determinada pelas seguintes condições.
- O ambiente em que o modelo será usado: se o suporte ao Spark é necessário, quais serviços precisam ser integrados.
- Recursos de dados. Quais são os dados: imagem, texto ou é um conjunto de números, que tipo de processamento eles precisam?
- A predisposição de modelos para esse tipo de tarefa. Os dados das imagens geralmente são processados por redes neurais convolucionais, e algoritmos baseados em árvores de decisão são usados para pequenos conjuntos de dados.
- Limitações no poder da computação, tanto em treinamento quanto em uso.
Como regra, ao desenvolver em Python, o uso de bibliotecas de uso geral (Pandas, Scikit-learn, numPy) não pode ser evitado. Isso levou ao fato de que a interface deles suporta as bibliotecas mais especializadas, mas se esse não for o caso, é necessário entender que você precisará escrever os conectores ou escolher outra biblioteca.
Você pode criar o primeiro modelo usando um número relativamente pequeno de bibliotecas e, em seguida, terá que decidir no que gastar tempo: desenvolvendo parâmetros (engenharia de recursos) ou escolhendo a biblioteca e o algoritmo ideais ou executando essas tarefas em paralelo.
Agora um pouco sobre as recomendações para a escolha. Se você precisar de um algoritmo que funcione melhor imediatamente, esse é o Catboost. Se você pretende trabalhar com imagens, pode usar Keras e Tensorflow ou Caffe. Ao trabalhar com texto, você precisa decidir se pretende construir uma rede neural e levar em consideração o contexto. Se sim, o mesmo desejo para as imagens, se um “pacote de palavras” (características de frequência da ocorrência de cada palavra) for suficiente, algoritmos de aumento de gradiente são adequados. Com pequenos conjuntos de dados, é possível usar os algoritmos para gerar novos dados a partir dos métodos lineares e de aprendizado do Scikit implementados na mesma biblioteca.
Como regra, as bibliotecas descritas são suficientes para resolver a maioria dos problemas, mesmo para vencer competições. O campo do aprendizado de máquina está se desenvolvendo muito rapidamente - temos certeza de que novas estruturas já apareceram no momento da redação deste post.
Nikolay Knyazev, chefe do grupo de aprendizado de máquina da Jet Infosystems