Python vs R para aprendizado de máquina

101

Estou apenas começando a desenvolver um aplicativo de aprendizado de máquina para fins acadêmicos. Atualmente, estou usando R e me treinando nele. No entanto, em muitos lugares, vi pessoas usando Python .

O que as pessoas estão usando na academia e na indústria e qual é a recomendação?

Peter Mortensen
fonte
3
Bem, que tipo de aprendizado de máquina (imagem / vídeo? PNL? Financeiro? Astronomia?), Quais classificadores, qual tamanho de conjuntos de dados (Mb? Gb? Tb?), Qual escala, qual latência, em que plataforma (móvel / computador único) / multicore / cluster / nuvem) ...? Quais bibliotecas específicas seu aplicativo usará / precisará e você verificou o que está disponível em cada idioma? Você está apenas criando um aplicativo de brinquedo para seu aprendizado pessoal ou importa se algum dia for produtivo? Usando código-fonte aberto ou proprietário? Você trabalhará com outras pessoas ou aplicativos existentes e o que eles usam / suportam? Interface da Web / GUI? etc
smci
1
Uma observação é que o Python é mais usado por pessoas que aprendem a trabalhar com grandes conjuntos de dados, enquanto R é mais usado pelos "estatísticos" tradicionais, por exemplo, aqueles que trabalham com experimentos de psicologia com centenas de pontos de dados. Embora essa diferença possa estar diminuindo.
Xj6
python todo o caminho, cara! Faço 4 vezes o que meus colegas fazem em um dia. E você pode usar python para todos os tipos de tarefas de programação, não apenas para aprendizado de máquina.
Francesco Pegoraro

Respostas:

91

Algumas diferenças realmente importantes a serem consideradas ao escolher R ou Python :

  • O Machine Learning tem 2 fases. Fase de construção e previsão de modelos. Normalmente, a construção do modelo é realizada como um processo em lote e as previsões são feitas em tempo real . O processo de construção do modelo é um processo intensivo de computação, enquanto a previsão ocorre em um instante. Portanto, o desempenho de um algoritmo em Python ou R realmente não afeta o tempo de resposta do usuário. Python 1, R 1.
  • Produção: A verdadeira diferença entre Python e R vem de estar pronto para produção. O Python, como tal, é uma linguagem de programação completa e muitas organizações o utilizam em seus sistemas de produção. R é um software de programação estatística preferido por muitos acadêmicos e, devido ao aumento da ciência de dados e da disponibilidade de bibliotecas, e por ser de código aberto, o setor começou a usar o R. Muitas dessas organizações têm seus sistemas de produção em Java, C ++, C #, Então, idealmente, eles gostariam de ter o sistema de previsão na mesma linguagem para reduzir os problemas de latência e manutenção. Python 2, R1.
  • Bibliotecas: os dois idiomas têm bibliotecas enormes e confiáveis. O R possui mais de 5000 bibliotecas que atendem a muitos domínios, enquanto o Python possui alguns pacotes incríveis, como Pandas, NumPy, SciPy, Scikit Learn, Matplotlib . Python 3, R2.
  • Desenvolvimento: Ambos os idiomas são idiomas interpretados. Muitos dizem que o python é fácil de aprender, é quase como ler inglês (para simplificar), mas R exige mais esforço inicial de estudo. Além disso, ambos têm bons IDEs (Spyder etc para Python e RStudio para R). Python 4, R2.
  • Velocidade: O software R inicialmente teve problemas com grandes cálculos (por exemplo, como multiplicações matriciais nxn). Mas, esse problema foi solucionado com a introdução do R pelo Revolution Analytics. Eles reescreveram operações intensivas de computação em C, o que é incrivelmente rápido. Python sendo uma linguagem de alto nível é relativamente lenta. Python 4, R3.
  • Visualizações: na ciência de dados, costumamos plotar dados para mostrar padrões aos usuários. Portanto, as visualizações se tornam um critério importante na escolha de um software e R mata completamente o Python a esse respeito. Agradecemos a Hadley Wickham pelo incrível pacote ggplot2. R ganha as mãos para baixo. Python 4, R 4.
  • Lidando com Big Data: Uma das restrições do R é que ele armazena os dados na memória do sistema (RAM). Portanto, a capacidade da RAM se torna uma restrição ao lidar com Big Data. O Python se sai bem, mas eu diria que, como o R e o Python têm conectores HDFS, aproveitar a infraestrutura do Hadoop daria uma melhoria substancial no desempenho. Então, Python 5, R 5.

Então, os dois idiomas são igualmente bons. Portanto, dependendo do seu domínio e do local em que você trabalha, você deve escolher com inteligência o idioma certo. O mundo da tecnologia geralmente prefere usar um único idioma. Os usuários de negócios (análise de marketing, análise de varejo) geralmente usam linguagens de programação estatística como R, pois frequentemente fazem prototipagem rápida e criam visualizações (o que é mais rápido em R que em Python).

binga
fonte
15
R dificilmente supera python na visualização. Eu acho que é o contrário; o python não apenas possui o ggplot (que eu não uso por conta própria, pois há mais opções pitônicas, como o seaborn ), como também pode fazer a visualização interativa no navegador com pacotes como o bokeh .
Emre
10
Também o R tem a capacidade de viz interativo com o Shiny.
stanekam
13
Bibliotecários - eu não concordo nada com isso. R é de longe o conjunto de ferramentas mais rico e, mais do que isso, fornece as informações de maneira adequada, em parte herdando S, em parte por uma das maiores comunidades de especialistas de renome.
Rapaio
34
"O software Speed: R inicialmente teve problemas com grandes computações (digamos, como multiplicações de matrizes nxn). Mas, esse problema foi solucionado com a introdução do R pela Revolution Analytics. Eles reescreveram operações intensivas de computação em C, que são extremamente rápidas. Python sendo uma linguagem de alto nível é relativamente lento ". Eu não sou um usuário R experiente, mas tanto quanto eu sei que tudo com implementações de baixo nível no R também tem uma implementação de baixo nível semelhante em numpy / scipy / pandas / scikit-learn / o que seja. Python também possui numba e cython. Este ponto deve ser um empate.
Dougal 03/04
8
Para o seu comentário "Lidando com Big Data", eu acrescentaria que o python é uma das três linguagens suportadas pelo apache spark, que possui velocidades extremamente rápidas. Seu comentário sobre o fato de R ter um back-end em C é verdadeiro, mas o python, a biblioteca do scikitlearn, também é muito rápido. Acho que seu post tem um bom equilíbrio, mas afirmo que a velocidade é pelo menos um empate e a escalabilidade (por exemplo, lidar com big data) é certamente a favor do python.
Jagartner
23

Não há nada como "python é melhor" ou "R é muito melhor que x".

O único fato que sei é que, na indústria, muitas pessoas aderem ao python, porque foi o que aprenderam na universidade. A comunidade python é realmente ativa e possui ótimas estruturas para mineração de dados e ML, etc.

Mas, para ser sincero, se você tem um bom programador c, ele pode fazer o mesmo que as pessoas fazem em python ou r, se você tem um bom programador java, ele também pode fazer (quase) tudo em java.

Então, fique com o idioma com o qual você se sente confortável.

Johnny000
fonte
5
Mas e as bibliotecas? Há pacotes R avançadas (acho Ranfom Floresta ou Caret) que seria totalmente impraticável para reimplementar em uma linguagem de propósito geral como nós C ou Java
Santiago Cepas
mahout ie suporta floresta aleatória para java
Johnny000 13/06
1
Sim, talvez, mas o R não oferece o desempenho necessário para o processamento de grandes conjuntos de dados e, na maioria das vezes, você tem grandes conjuntos de dados em uso industrial.
Johnny000
1
Sim, um bom programador pode fazer o mesmo em C. Mas um programador ruim pode fazê-lo em Python tão rápido quanto um programador experiente pode fazê-lo em C.
Pithikos
1
Eu não acho que isso seja sempre verdade @Pithikos Dadas as fórmulas matemáticas subjacentes, geralmente eu posso implementá-las mais rapidamente com VB / T-SQL do que com a velocidade de percorrer a sintaxe desnecessariamente misteriosa das bibliotecas R ou Python. E, no processo, torne o código resultante muito mais escalável. Fico feliz que essas bibliotecas existam, mas há desvantagens embutidas nelas; em algumas situações e projetos específicos, é melhor ignorá-los.
SQLServerSteve
16

Alguns pensamentos adicionais.

A linguagem de programação 'em si' é apenas uma ferramenta. Todos os idiomas foram projetados para facilitar a construção de alguns tipos de construções do que outros. E o conhecimento e domínio de uma linguagem de programação é mais importante e eficaz do que os recursos dessa linguagem em comparação com outros.

Tanto quanto posso ver, existem duas dimensões dessa questão. A primeira dimensão é a capacidade de explorar, construir provas de conceitos ou modelos em um ritmo acelerado, tendo eventualmente à mão ferramentas suficientes para estudar o que está acontecendo (como testes estatísticos, gráficos, ferramentas de medição etc.). Esse tipo de atividade é geralmente preferido por pesquisadores e cientistas de dados (eu sempre me pergunto o que isso significa, mas uso esse termo para sua definição vaga). Eles tendem a confiar em instrumentos conhecidos e verificados, que podem ser usados ​​para provas ou argumentos.

A segunda dimensão é a capacidade de estender, alterar, melhorar ou mesmo criar ferramentas, algoritmos ou modelos. Para conseguir isso, você precisa de uma linguagem de programação adequada. Aproximadamente todos eles são iguais. Se você trabalha para uma empresa, depende muito da infraestrutura da empresa, sua cultura interna e suas escolhas diminuem significativamente. Além disso, quando você deseja implementar um algoritmo para uso em produção, precisa confiar na implementação. E implementar em outro idioma que você não domina não o ajudará muito.

Costumo favorecer o primeiro tipo de atividade no ecossistema R. Você tem uma grande comunidade, um enorme conjunto de ferramentas, provas de que essas ferramentas funcionam conforme o esperado. Além disso, você pode considerar Python, Octave (para citar alguns), que são candidatos confiáveis.

Para a segunda tarefa, você deve pensar antes no que realmente deseja. Se você deseja ferramentas robustas prontas para produção, C / C ++, Java e C # são ótimos candidatos. Considero o Python como um segundo cidadão nesta categoria, junto com Scala e amigos. Não quero iniciar uma guerra de chamas, é apenas minha opinião. Mas depois de mais de 17 anos como desenvolvedor, tenho a tendência de preferir um contrato estrito e meu conhecimento do que a liberdade de fazer o que você pensa (como acontece com muitas linguagens dinâmicas).

Pessoalmente, quero aprender o máximo possível. Decidi que tenho que escolher da maneira mais difícil, o que significa implementar tudo do zero. Eu uso R como modelo e inspiração. Possui grandes tesouros em bibliotecas e muita experiência destilada. No entanto, R como linguagem de programação é um pesadelo para mim. Por isso, decidi usar Java e não utilizei nenhuma biblioteca adicional. Isso é apenas por causa da minha experiência, e nada mais.

Se você tiver tempo, a melhor coisa a fazer é passar algum tempo com todas essas coisas. Dessa maneira, você obterá a melhor resposta possível, adequada para você. Dijkstra disse uma vez que as ferramentas influenciam a maneira como você pensa, por isso é aconselhável conhecê-las antes de permitir que elas modelem como você pensa. Você pode ler mais sobre isso em seu famoso artigo chamado The Humble Programmer

rapaio
fonte
15

Eu acrescentaria o que outros disseram até agora. Não existe uma resposta única de que um idioma seja melhor que outro.

Dito isto, R tem uma comunidade melhor para exploração e aprendizado de dados. Possui amplos recursos de visualização. O Python, por outro lado, tornou-se melhor no tratamento de dados desde a introdução dos pandas. O tempo de aprendizado e desenvolvimento é muito menor no Python, comparado ao R (R é uma linguagem de baixo nível).

Acho que tudo se resume ao ecossistema em que você está e às preferências pessoais. Para mais detalhes, você pode ver essa comparação aqui .

Kunal
fonte
2
"R tem uma comunidade melhor para [...] aprender" - acho que isso depende muito do tipo de aprendizado. Quanto está acontecendo com redes neurais (arquiteturas arbitrárias de feed-forward, CNNs, RNNs) em R?
Martin Thoma
1
R não é realmente esse IMO de "baixo nível". É também uma linguagem dinâmica.
Xji
12

Não existe uma linguagem de marcador de prata que possa ser usada para resolver todos os problemas relacionados a dados. A escolha do idioma depende do contexto do problema, tamanho dos dados e, se você estiver trabalhando em um local de trabalho, terá que se ater ao que eles usam.

Pessoalmente, uso R com mais frequência do que Python devido às suas bibliotecas de visualização e estilo interativo. Mas se eu precisar de mais desempenho ou código estruturado, definitivamente utilizarei o Python, pois ele possui algumas das melhores bibliotecas como SciKit-Learn, numpy, scipy etc. Eu uso R e Python nos meus projetos de forma intercambiável.

Portanto, se você está começando um trabalho de ciência de dados, sugiro que você aprenda os dois e não é difícil, pois o Python também fornece uma interface semelhante ao R com o Pandas .

Se você precisar lidar com conjuntos de dados muito maiores, não poderá escapar dos ecossistemas criados com Java (Hadoop, Pig, Hbase etc.).

Kaushalya
fonte
8

Não há linguagem "melhor". Eu tentei os dois e me sinto confortável com o Python, por isso trabalho apenas com o Python. Embora eu ainda esteja aprendendo coisas, mas não encontrei nenhum obstáculo com o Python até agora. O bom do Python é que a comunidade é boa demais e você pode obter muita ajuda na Internet facilmente. Fora isso, eu diria que vá com o idioma que você não gosta do que as pessoas recomendam.

Pensu
fonte
8

Na minha experiência, a resposta depende do projeto em questão. Para pesquisa pura, prefiro R por dois motivos: 1) grande variedade de bibliotecas e 2) grande parte da literatura de ciência de dados inclui amostras de R.

Se o projeto exige que uma interface interativa seja usada por leigos, achei R muito restrito. O brilhante é um ótimo começo, mas ainda não é flexível o suficiente. Nesses casos, começarei a olhar para portar meu trabalho de R para Python ou js.

Rglish
fonte
8

Um problema que todas as outras respostas não conseguem resolver é o licenciamento .

A maioria das bibliotecas de R maravilhas acima mencionados são GPL (por exemplo ggplot2 , data.table ). Isso impede que você distribua seu software de forma proprietária.

Embora muitos usos dessas bibliotecas não impliquem a distribuição do software (por exemplo, para treinar modelos offline), a GPL pode, por si só, atrair empresas para não usá-los. Pelo menos na minha experiência.

Por outro lado, no domínio python, a maioria das bibliotecas possui licenças de distribuição amigáveis ​​aos negócios, como BSD ou MIT.

Na academia, os problemas de licenciamento normalmente não são problemas.

ncasas
fonte
6

Um dos desafios reais que eu enfrentei com o R são diferentes pacotes compatíveis com versões diferentes .. muitos pacotes R não estão disponíveis para a versão mais recente do R .. E R há bastante tempo dá erro devido à biblioteca ou ao pacote ter sido escrito para versões mais antigas versão..

RAM
fonte
3
Não tenho certeza se esse é um problema específico com o R ou se ele responde à pergunta sobre como o Python e o R diferem.
Sean Owen
5

Eu não tentei R (bem, um pouco, mas não o suficiente para fazer uma boa comparação). No entanto, aqui estão alguns dos pontos fortes de Pythons:

  • Sintaxe muito intuitivo : tupla descompactação, element in a_list, for element in sequence, matrix_a * matrix_b(para multiplicação de matrizes), ...
  • Muitas bibliotecas :
    • scipy : cálculos científicos; muitas partes dele são apenas invólucros para o código Fortran bem rápido
    • theano > Lasanha > nolearn : Bibliotecas para redes neurais - elas podem ser treinadas em GPU (nvidia, CUDA é necessária) sem nenhum ajuste
    • sklearn : Algoritmos gerais de aprendizado
  • Boa comunidade :
  • Cadernos IPython
  • Outros :
    • Matrizes 0-indexadas ... Cometi esse erro o tempo todo com R.
    • Estruturas de pacotes estabelecidas
    • Bom suporte para testar seu código
Martin Thoma
fonte
3

Prefiro o Python ao R, porque o Python é uma linguagem de programação completa, para que eu possa executar tarefas de aprendizado de máquina de ponta a ponta, como reunir dados usando um servidor HTTP escrito em Python, executar tarefas avançadas de ML e publicar os resultados on-line. Tudo isso pode ser feito em Python. Na verdade, achei R mais difícil de aprender e as recompensas pelo aprendizado de Python são muito maiores porque podem ser usadas para praticamente qualquer tarefa de programação.

Dave Julian
fonte
2
Você pode fazer todas essas 3 coisas muito facilmente em R
Gaius
2

R: R é a contraparte de código aberto. que tem sido tradicionalmente usado em estudos e pesquisas. Devido à sua natureza de código aberto, as técnicas mais recentes são lançadas rapidamente. Há muita documentação disponível na Internet e é uma opção muito econômica. Python: com a origem como uma linguagem de script de código aberto, o uso do Python aumentou com o tempo. Hoje, ele possui bibliotecas (numpy, scipy e matplotlib) e funciona para praticamente qualquer operação estatística / construção de modelo que você queira fazer. Desde a introdução dos pandas, ele se tornou muito forte nas operações de dados estruturados.

Código Python

Biblioteca de Importação

Importe outras bibliotecas necessárias, como pandas, numpy ...

sklearn import linear_model

Carregar conjuntos de dados de trem e teste

Identificar variável (s) de recurso e resposta e valores devem ser matrizes numéricas e numpy

x_train = input_variables_values_training_datasets y_train = target_variables_values_training_datasets x_test = input_variables_values_test_datasets

Criar objeto de regressão linear

linear = linear_model.LinearRegression ()

Treine o modelo usando os conjuntos de treinamento e verifique a pontuação

linear.fit (x_train, y_train) linear.score (x_train, y_train)

Coeficiente de equação e interceptação

print ('Coeficiente: \ n', linear.coef_) print ('Interceptação: \ n', linear.intercept_)

Prever Saída

predito = linear.predict (x_test) Código R

Carregar conjuntos de dados de trem e teste

Identificar variável (s) de recurso e resposta e valores devem ser matrizes numéricas e numpy

x_train <- valores_de_variáveis_de entrada_training_datasets y_train <- valores_de_variedades_de_variáveis_training_datasets x_test <- valores_de_ variáveis ​​de entrada_dadosets_datasets x_ - cbind (x_train, y_train)

Treine o modelo usando os conjuntos de treinamento e verifique a pontuação

linear <- lm (y_train ~., dados = x) resumo (linear)

Prever Saída

previsto = prever (linear, x_test)

dileep balineni
fonte
0

Eu não acho que o Python aponte com um clique na GUI que o transforma em SPSS e SAS. Brincar com eles é genuinamente divertido.

ran8
fonte
0

insira a descrição da imagem aqui

Consegui essa imagem em um post do linkedin. Sempre que tenho dúvidas sobre o uso de python ou R, olho para ele e isso se mostra muito útil.

Uma corrida
fonte
Então o que você escolhe?
Serhii Polishchuk