Sou R
programador de idiomas. Também faço parte do grupo de pessoas que são consideradas cientistas de dados, mas que vêm de outras disciplinas acadêmicas que não a CS.
Isso funciona bem no meu papel de cientista de dados, no entanto, ao iniciar minha carreira R
e ter apenas o conhecimento básico de outras linguagens de script / web, me senti um tanto inadequado em duas áreas principais:
- Falta de um sólido conhecimento da teoria da programação.
- Falta de um nível competitivo de habilidades em linguagens mais rápidas e amplamente usadas, como
C
,C++
eJava
, que poderiam ser utilizadas para aumentar a velocidade do pipeline e os cálculos de Big Data, além de criar produtos de DS / dados que podem ser mais rapidamente desenvolvidos em rápido scripts de back-end ou aplicativos independentes.
A solução é simples, é claro - aprenda sobre programação, que é o que tenho feito ao me matricular em algumas aulas (atualmente em programação C).
No entanto, agora que estou começando a resolver os problemas 1 e 2 acima, fico me perguntando " quão viáveis são as linguagens C
e C++
a Ciência de Dados? ".
Por exemplo, posso mover dados muito rapidamente e interagir muito bem com os usuários, mas e quanto à regressão avançada, Machine Learning, mineração de texto e outras operações estatísticas mais avançadas?
Tão. pode C
fazer o trabalho - quais ferramentas estão disponíveis para estatísticas avançadas, ML, AI e outras áreas da ciência de dados? Ou devo perder a maior parte da eficiência obtida com a programação C
chamando R
scripts ou outros idiomas?
O melhor recurso que encontrei até agora em C é uma biblioteca chamada Shark , que oferece C
/ C++
a capacidade de usar Máquinas de Vetor de Suporte, regressão linear (não-linear e outra regressão avançada como probit multinomial, etc.) e uma lista restrita de outras (ótimas, mas) funções estatísticas.
Respostas:
Faça o oposto: aprenda C / C ++ para escrever extensões R. Use C / C ++ apenas para as seções críticas de desempenho de seus novos algoritmos, use R para criar sua análise, importar dados, fazer gráficos etc.
Se você quiser ir além do R, recomendo aprender python. Existem muitas bibliotecas disponíveis, como o scikit-learn para algoritmos de aprendizado de máquina ou o PyBrain para construção de redes neurais etc. (e use pylab / matplotlib para plotagem e notebooks iPython para desenvolver suas análises). Novamente, o C / C ++ é útil para implementar algoritmos de tempo crítico como extensões python.
fonte
Como Andre Holzner disse, estender o R com extensão C / C ++ é uma maneira muito boa de aproveitar o melhor dos dois lados. Além disso, você pode tentar o inverso, trabalhando com C ++ e ocasionalmente chamando a função de R com o pacote RInside o R. Aqui você pode descobrir como
http://cran.r-project.org/web/packages/RInside/index.html http://dirk.eddelbuettel.com/code/rinside.html
Quando você trabalha em C ++, você tem muitas bibliotecas, muitas delas criadas para problemas específicos, outras mais gerais.
http://www.shogun-toolbox.org/page/features/ http://image.diku.dk/shark/sphinx_pages/build/html/index.html
http://mlpack.org/
fonte
Concordo que a tendência atual é usar Python / R e vinculá-lo a algumas extensões C / C ++ para tarefas computacionalmente caras.
No entanto, se você quiser permanecer no C / C ++, poderá dar uma olhada no Dlib :
fonte
Na minha opinião, idealmente, para ser um profissional mais completo , seria bom conhecer pelo menos uma linguagem de programação para os paradigmas de programação mais populares ( processual , orientado a objetos , funcional ). Certamente, considero R e Python as duas linguagens e ambientes de programação mais populares para ciência de dados e, portanto, ferramentas primárias de ciência de dados.
Julia é impressionante em certos aspectos, mas tenta alcançá-los e se estabelecer como uma importante ferramenta de ciência de dados. No entanto, eu não vejo isso acontecendo tão cedo, simplesmente devido ao R / Python 's popularidade , muito grandes comunidades , bem como enormes ecossistemas de existentes e recentemente desenvolvidos pacotes / bibliotecas , cobrindo uma vasta gama de domínios / campos de estude.
Dito isto, muitos pacotes e bibliotecas, focados nas áreas de ciência de dados, ML e AI, são implementados e / ou fornecem APIs em linguagens diferentes de R ou Python (para a prova, veja esta lista com curadoria e esta lista com curadoria , ambas as quais são excelentes e oferecem uma perspectiva sólida sobre a variedade no campo). Isto é especialmente verdade para software especializado ou orientado para o desempenho . Para esse software, eu vi projetos com implementação e / ou APIs principalmente em Java, C e C ++ (Java é especialmente popular no segmento de big data da ciência de dados - devido à sua proximidade com o Hadoop e seu ecossistema - e na PNLsegmento), mas outras opções estão disponíveis, embora em uma extensão muito mais limitada, baseada em domínio. Nenhum desses idiomas é uma perda de tempo; no entanto, é necessário priorizar o domínio de um ou de todos eles com a sua situação de trabalho, projetos e interesses atuais. Portanto, para responder sua pergunta sobre a viabilidade do C / C ++ (e Java), eu diria que todos eles são viáveis , mas não como ferramentas primárias de ciência de dados, mas como ferramentas secundárias .
Respondendo às suas perguntas sobre 1) C como uma ferramenta potencial de ciência de dados e 2) sua eficiência , eu diria que: 1) embora seja possível usar C para ciência de dados, eu recomendaria não fazê-lo, porque você teria muito dificuldade em encontrar bibliotecas correspondentes ou, ainda mais, tentando implementar os algoritmos correspondentes por si mesmo; 2) você não deve se preocupar com eficiência, pois muitos segmentos de código críticos para o desempenho são implementados em linguagens de baixo nível como C, além disso, existem opções para fazer a interface de linguagens populares de ciência de dados com, digamos, C (por exemplo,
Rcpp
pacote para integração R com C / C ++: http://dirk.eddelbuettel.com/code/rcpp.html) Além de abordagens mais simples, mas geralmente bastante eficazes, ao desempenho, como o uso consistente de vetorização em R e o uso de várias estruturas de programação paralela, pacotes e bibliotecas. Para obter exemplos de ecossistema R, consulte Visão da tarefa CRAN "Computação paralela e de alto desempenho com R" .Falando sobre ciência de dados , acho que faz muito sentido mencionar a importância da abordagem de pesquisa reproduzível , bem como a disponibilidade de várias ferramentas , suportando esse conceito (para mais detalhes, consulte minha resposta relevante ). Espero que minha resposta seja útil.
fonte
R é uma das principais ferramentas para o cientista de dados, o que quer que você faça não para de usá-lo.
Agora falando sobre C, C ++ ou mesmo Java. São boas línguas populares. Se você precisa ou vai depender do tipo de trabalho ou projeto que possui. Por experiência pessoal, existem tantas ferramentas disponíveis para o cientista de dados que você sempre sentirá que precisa constantemente aprender.
Você pode adicionar Python ou Matlab a coisas para aprender se quiser e continuar adicionando. A melhor maneira de aprender é assumir um projeto de trabalho usando outras ferramentas com as quais você não se sente confortável. Se eu fosse você, aprenderia Python antes do C. É mais usado na comunidade do que C. Mas aprender C não é uma perda de tempo.
fonte
Como cientista de dados, as outras linguagens (C ++ / Java) são úteis quando você precisa incorporar o aprendizado de máquina a um mecanismo de produção existente.
Waffles é uma biblioteca de classes C ++ bem mantida e um pacote de análise de linha de comando. Possui aprendizado supervisionado e não supervisionado, toneladas de ferramentas de manipulação de dados, ferramentas de dados esparsas e outras coisas, como processamento de áudio. Como também é uma biblioteca de classes, você pode estendê-la conforme necessário. Mesmo que você não desenvolva o mecanismo C ++ (é provável que não o seja), isso permitirá que você protótipo, teste e entregue algo aos desenvolvedores.
Mais importante, acredito que meu conhecimento de C ++ e Java realmente me ajuda a entender como o Python e o R funcionam. Qualquer idioma é usado apenas corretamente quando você entende um pouco sobre o que está acontecendo por baixo. Ao aprender as diferenças entre os idiomas, você pode aprender a explorar os pontos fortes do seu idioma principal.
Atualizar
Para aplicativos comerciais com grandes conjuntos de dados, o Apache Spark - MLLib é importante. Aqui você pode usar Scala, Java ou Python.
fonte
Eu gostaria de entender por que você precisaria de outra linguagem (além do Python) se seu objetivo for "mas o que dizer de regressão avançada, aprendizado de máquina, mineração de texto e outras operações estatísticas mais avançadas".
Para esse tipo de coisa, C é uma perda de tempo. É uma boa ferramenta para se ter, mas nos ~ 20 anos desde que o Java foi lançado, eu raramente codifiquei C.
Se você prefere o lado da programação mais funcional do R, aprenda o Scala antes de entrar em muitos maus hábitos de procedimento codificando com C .
Finalmente aprender a usar as bibliotecas do Hadley Wickham - que vai lhe poupar uma grande quantidade de tempo fazendo manipulação de dados.
fonte
Existem algumas ferramentas C ++ para estatística e ciência de dados como ROOT https://root.cern.ch/drupal/ , BAT https://www.mppmu.mpg.de/bat/ , boost ou OpenCV
fonte
Não tenho certeza se isso já foi mencionado, mas também há o wabbit vowpal, mas pode ser específico apenas a certos tipos de problemas.
fonte
Dê uma olhada no Intel DAAL, que está em andamento. É altamente otimizado para a arquitetura de CPU Intel e suporta cálculos distribuídos.
fonte
Soluções escaláveis de aprendizado de máquina para Big Data:
Adicionarei meu $ .02 porque há uma área-chave que parece não ter sido abordada em todas as postagens anteriores - aprendizado de máquina em big data !
Para big data, a escalabilidade é essencial e R é insuficiente. Além disso, linguagens como Python e R são úteis apenas para interface com soluções escalonáveis que geralmente são escritas em outras linguagens. Faço essa distinção não porque quero menosprezar quem os usa, mas apenas porque é tão importante para os membros da comunidade de ciência de dados entender como são as soluções de aprendizado de máquina verdadeiramente escaláveis.
Eu faço a maior parte do meu trabalho com big data em clusters de memória distribuída . Ou seja, eu não uso apenas uma máquina de 16 núcleos (4 processadores quad core em uma única placa-mãe compartilhando a memória dessa placa-mãe), uso um pequeno cluster de 64 máquinas de 16 núcleos. Os requisitos são muito diferentes para esses clusters de memória distribuída e para ambientes de memória compartilhada, e o aprendizado de máquina de big data requer soluções escaláveis em ambientes de memória distribuída em muitos casos.
Também usamos C e C ++ em qualquer lugar dentro de um produto de banco de dados proprietário. Todas as nossas coisas de alto nível são tratadas em C ++ e MPI, mas as coisas de baixo nível que tocam nos dados são longas e matrizes de caracteres no estilo C para manter o produto muito rapidamente. A conveniência das strings std simplesmente não vale o custo computacional.
Não há muitas bibliotecas C ++ disponíveis que ofereçam recursos de aprendizado de máquina escalonáveis e distribuídos - MLPACK .
No entanto, existem outras soluções escaláveis com APIs:
O Apache Spark possui uma biblioteca de aprendizado de máquina escalável chamada MLib com a qual você pode interagir.
Além disso, o Tensorflow agora distribuiu o tensorflow e possui uma API C ++ .
Espero que isto ajude!
fonte