24 / 07 / 2018

A melhor linguagem de programação para ciência de dados e aprendizado de máquina

tecnologia

A melhor linguagem de programação para ciência de dados e aprendizado de máquina

Dica: Não há uma resposta fácil e também não há consenso.

Discutir sobre qual linguagem de programação é a melhor é um passatempo favorito entre os desenvolvedores de software. A parte complicada, é claro, é definir um conjunto de critérios para "melhor".

Com o desenvolvimento de software sendo redefinido para funcionar em um contexto de ciência de dados e aprendizado de máquina, essa questão atemporal está ganhando nova relevância. Vejamos algumas opções e seus prós e contras, com comentários de especialistas de domínio.

Mesmo que, no final, a escolha seja pelo menos até certo ponto subjetiva, alguns critérios vêm à mente. A facilidade de uso e a sintaxe podem ser subjetivas, mas coisas como suporte da comunidade, bibliotecas disponíveis, velocidade e segurança do tipo não são. Existem algumas nuances aqui, no entanto.

Velocidade de execução e tipo de segurança

Em aplicações de aprendizado de máquina, as fases de treinamento e operacional (ou inferência) para algoritmos são distintas. Então, uma abordagem adotada por algumas pessoas é usar uma linguagem para a fase de treinamento e outra para a fase operacional.

O raciocínio aqui é trabalhar durante o desenvolvimento com a linguagem que é mais familiar ou fácil de usar, ou que possui o melhor suporte a ambiente e biblioteca. Em seguida, o algoritmo treinado é portado para ser executado no ambiente preferido pela organização para suas operações.

Embora isso seja uma opção, especialmente o uso de padrões como PMML, isso pode aumentar a complexidade operacional. Além disso, em muitos casos, as coisas não são claras, já que a programação feita em um idioma pode chamar bibliotecas em outro, diluindo assim o argumento na velocidade de execução.

Outra coisa a notar é o tipo de segurança. A segurança de tipo nas linguagens de programação é um pouco parecida com o esquema dos bancos de dados: embora isso não aumente a flexibilidade, também aumenta as chances de erros.

Neste segmento iniciado por Andriy Burkov, líder de equipe de aprendizado de máquina do Gartner, Burkov argumenta contra o uso de linguagens dinamicamente tipificadas como o Python para aprendizado de máquina.

"Você pode executar uma experiência por várias horas, ou mesmo dias, apenas para descobrir que o código falhou devido a uma conversão de tipo incorreta ou a um número errado de atributos em uma chamada de método", diz Burkov.

Java

Apesar de ter o que é indiscutivelmente a maior pegada na implantação de empresas, Java não está recebendo muito amor hoje em dia. Parte disso pode ter a ver com o "fator de frescor", como o Java tem sido desafiado por novas linguagens de programação, mas também há algumas preocupações muito reais aqui.

O que ajudou muito o Java a estabelecer sua pegada, ou seja, a JVM, também é uma das razões pelas quais as pessoas são céticas quanto a usá-lo para o aprendizado de máquina. Da mesma forma, um recurso famoso do Java, que ajuda a lidar com as complexidades do C ++, coleta de lixo, pode representar problemas em ambientes de produção.

Java pode não estar recebendo muito amor atualmente, mas continua sendo a única linguagem de programação com a maior base de implementação da empresa.

Java pode não estar recebendo muito amor atualmente, mas continua sendo 
a única linguagem de programação com a maior base de implementação da empresa.


Ao discutir as tendências no desenvolvimento de software com Paco Nathan, sócio-gerente da Derwen e praticante de ciência de dados e líder de pensamento, o tópico surgiu.

Nathan observa que a tendência que ele vê é para aplicativos em tempo real, e isso não é algo que ele acredita que a JVM é adequada, já que é uma abstração sobre o hardware. A adição de uma camada entre o código e o hardware fornece portabilidade entre plataformas, mas também diminui a execução.

Nathan também cita Ion Stoica, o iniciador do Apache Spark, que é muito usado para aplicativos em tempo real. Nathan mencionou que uma das regras que Stoica estabeleceu recentemente para sua equipe de pesquisa em Berkeley é abolir o Java.

Nathan comentou que espera que isso transborde da pesquisa para a indústria ao longo de um período de cinco anos, como é típico para direções iniciadas em ambientes de pesquisa. Mas talvez não devamos ser muito rápidos em escrever sobre Java.

Além disso, essa grande área de cobertura deu origem a iniciativas, como o DeepLearning4J, que visa levar aos usuários de Java acesso às mesmas bibliotecas normalmente usadas em outros idiomas.

Python

De acordo com uma pesquisa recente da KDNuggets, o Python é o líder indiscutível em uso para ciência de dados e aprendizado de máquina. Algumas razões frequentemente citadas para essa preferência são a grande variedade de bibliotecas e o fato de ser considerada uma linguagem fácil de se trabalhar.

Python é a linguagem preferida para a maioria quando se trata de ciência de dados e aprendizado de máquina.

Python é a linguagem preferida para a maioria quando se trata de ciência de dados e aprendizado de máquina.

Ashok Reddy, GM DevOps na CA Technologies, observa que o Python foi o idioma de escolha em seu mestrado recentemente concluído em IA e Machine Learning na Georgia Tech.

Reddy acrescenta que o Python está ganhando popularidade nas universidades devido à sua simplicidade, então é mais provável que os graduados conheçam o Python do que o Java. Além da simplicidade, ele também cita a abundância de bibliotecas como uma das principais razões para isso.

Reddy observa que, do ponto de vista do desempenho, C também é uma opção popular para uso em aplicativos de IA e IoT incorporados, mas o Java não está desaparecendo. Reddy também vê um padrão no uso do Python para desenvolvimento e, em seguida, outras linguagens para a implementação de algoritmos de aprendizado de máquina.

Isso também se aplica internamente na CA, já que Reddy observa que, além de ter código legado em C e Java, a portabilidade entre plataformas oferecida pelo Java é uma prioridade chave para a CA.

"Muitas startups usam Ruby ou Python inicialmente, e quando elas crescem, elas mudam para Java", diz Reddy.

R

Na pesquisa KDNuggets, o compartilhamento de R parece estar caindo em relação ao último. R, no entanto, vem ganhando adoção corporativa nos últimos anos.

De certa forma, R não é uma linguagem de programação típica, já que não é uma linguagem de propósito geral. As raízes de R estão nas estatísticas, pois foram desenvolvidas especificamente para lidar com tais necessidades.

R é uma linguagem construída para estatísticas e ciência de dados, mas sua aplicabilidade na empresa depende muito do ecossistema de suporte.

R é uma linguagem construída para estatísticas e ciência de dados, 
mas sua aplicabilidade na empresa depende muito do ecossistema de suporte.


Isso, e o fato de ser de código aberto, geram uma grande variedade de bibliotecas disponíveis para tarefas relacionadas comuns e não tão comuns. O outro lado disso é que R foi atormentado por questões como gerenciamento de memória e segurança, e sua sintaxe não é muito direta ou disciplinada.

Nos últimos anos, R viu os ambientes de desenvolvimento serem construídos em torno dele para preencher as lacunas necessárias para retirá-lo do laboratório de ciência de dados e para implantações corporativas.

Linguagens Julia, Golang, Rust, Swift e JVM

E aqueles que não querem a digitação dinâmica do Python, ou a bagagem lecagy de Java ou C / C ++? Bem, além do fato de que o Python 3.6 e posterior suporta a tipagem estática.

Burkov observa que Scala e Kotlin, duas novas linguagens baseadas na JVM, possuem tipagem opcional, mas uma curva de aprendizado acentuada e baixa adoção pelos usuários, respectivamente. E, no final, podemos acrescentar, eles também vêm com as mesmas restrições impostas pela JVM.

Swift, observa Burkov, tem tipificação estática e baixa disponibilidade de bibliotecas de aprendizado de máquina / análise de dados. Outras opções sugeridas por colaboradores no mesmo segmento são Golang, Julia e Rust.

Todas as linguagens de programação têm seus proponentes, mas nem todos são igualmente equipados com bibliotecas para ciência de dados e aprendizado de máquina. (Imagem: Igor Stevanovic, Getty Images / iStockphoto)

Todas as linguagens de programação têm seus proponentes, mas nem todos são igualmente equipados 
com bibliotecas para ciência de dados e aprendizado de máquina. (Imagem: Igor Stevanovic, Getty Images / iStockphoto)

Golang tem sido apontado como sendo rápido, pronto para o uso, fácil, limpo, compilado e simples. E tem suporte crescente para bibliotecas de PNL, aprendizado geral de máquina e análise de dados, extração, processamento e visualização.

Julia tem sido apontada como sendo flexível com o uso do tipo e o JIT obedeceu similar ao Java, mas com velocidade de execução comparável a C. É uma linguagem relativamente nova, então sua comunidade não é a maior em volta. No entanto, Julia tem algum suporte para bibliotecas de aprendizado de máquina.

Rust tem sido apontado como compilar nativa e eficientemente como C / C ++ simples, sem coleta de lixo e sendo seguro e rico. É certo que, mesmo pelos seus proponentes, no entanto, não está realmente pronto para o ML devido à falta de bibliotecas específicas do ML.

A escolha da linguagem de programação não é simples, e no final pode nem ser a mais importante também. Como apontado por Luiz Eduardo Le Masson, líder em ciência de dados da Stone Co .:

"Para o 'aprendizado de máquina comum', não importa qual idioma você usa. Mas quando você precisa ter algoritmos e inferências de aprendizado online reais em tempo real para milhões de clusters simultâneos e responder em menos de 500 ms, o tópico não envolve apenas linguagens, mas arquitetura, design, controle de fluxo, tolerância a falhas, resiliência ".

Fonte: zdnet

Tradução: Google


Mais do Blog
Orçamento Online