Я R
программист по языку. Я также вхожу в группу людей, которые считаются специалистами по данным, но приходят из академических дисциплин, отличных от CS.
Это хорошо работает в моей роли Data Scientist, однако, начав свою карьеру R
и имея только базовые знания других скриптовых / веб-языков, я чувствовал себя несколько неадекватно в 2 ключевых областях:
- Отсутствие глубоких знаний теории программирования.
- Отсутствие конкурентного уровня навыков в более быстрых и более широко используемых языках, таких как
C
,C++
иJava
, которые могут быть использованы для увеличения скорости конвейера и вычислений больших данных, а также для создания продуктов DS / данных, которые могут быть более быстро превращены в быстрые серверные скрипты или автономные приложения.
Решение, конечно, простое - изучите программирование, и это то, чем я занимаюсь, записавшись на некоторые классы (в настоящее время программирование на Си).
Однако теперь, когда я начинаю решать проблемы № 1 и № 2 выше, я задаюсь вопросом: « Насколько жизнеспособны такие языки, как C
и C++
для Data Science? ».
Например, я могу очень быстро перемещать данные и отлично взаимодействовать с пользователями, но как насчет расширенной регрессии, машинного обучения, интеллектуального анализа текста и других более сложных статистических операций?
Так. может C
сделать работу - какие инструменты доступны для расширенной статистики, ML, AI и другие области науки данных? Или я должен потерять большую часть эффективности, получаемой при программировании, C
используя R
скрипты или другие языки?
Лучший ресурс, который я нашел до сих пор в C, - это библиотека под названием Shark , которая дает C
/ C++
возможность использовать машины опорных векторов, линейную регрессию (не нелинейную и другие продвинутые регрессии, такие как многочленный пробит и т. Д.) И краткий список других (здорово, но) статистические функции.
Ответы:
Сделайте обратное: изучите C / C ++ для написания R-расширений. Используйте C / C ++ только для критических с точки зрения производительности разделов ваших новых алгоритмов, используйте R для построения анализа, импорта данных, составления графиков и т. Д.
Если вы хотите выйти за рамки R, я бы порекомендовал изучать Python. Доступно много библиотек, таких как scikit-learn для алгоритмов машинного обучения или PyBrain для построения нейронных сетей и т. Д. (И используйте pylab / matplotlib для построения графиков и записные книжки iPython для разработки анализа). Опять же, C / C ++ полезен для реализации критичных ко времени алгоритмов в качестве расширений Python.
источник
Как сказал Андре Хольцнер, расширение R с расширением C / C ++ - это очень хороший способ воспользоваться преимуществами обеих сторон. Также вы можете попробовать обратное, работая с C ++ и иногда вызывая функцию R с пакетом RInside o R. Здесь вы можете найти как
http://cran.r-project.org/web/packages/RInside/index.html http://dirk.eddelbuettel.com/code/rinside.html
Когда вы работаете в C ++, у вас есть много библиотек, многие из которых созданы для конкретных задач, другие - более общие.
http://www.shogun-toolbox.org/page/features/ http://image.diku.dk/shark/sphinx_pages/build/html/index.html
http://mlpack.org/
источник
Я согласен с тем, что в настоящее время существует тенденция использовать Python / R и привязывать его к некоторым расширениям C / C ++ для вычислительно дорогостоящих задач.
Однако, если вы хотите остаться в C / C ++, вы можете взглянуть на Dlib :
источник
На мой взгляд, в идеале, чтобы быть более разносторонним профессионалом, было бы неплохо знать хотя бы один язык программирования для самых популярных парадигм программирования ( процедурный , объектно-ориентированный , функциональный ). Конечно, я считаю R и Python двумя наиболее популярными языками программирования и средами для науки о данных и, следовательно, основными инструментами для обработки данных.
Джулия впечатляет в определенных аспектах, но она пытается догнать этих двоих и зарекомендовать себя в качестве основного инструмента для обработки данных. Тем не менее, я не вижу это происходит в ближайшее время, просто из - за R / Python «s популярности , очень крупные сообщества , а также огромные экосистемы существующего и вновь разработанные пакеты / библиотеки , покрывая очень широкий спектр областей / полей изучение.
Сказав это, многие пакеты и библиотеки, ориентированные на науку о данных, области ML и AI, реализованы и / или предоставляют API-интерфейсы на языках, отличных от R или Python (для доказательства см. Этот список кураторов и этот список кураторов , оба из которых превосходны и дают твердое представление о разнообразии в этой области). Это особенно верно для ориентированного на производительность или специализированного программного обеспечения. Для этого программного обеспечения я видел проекты с реализациями и / или API, в основном на Java, C и C ++ (Java особенно популярна в сегменте больших данных в области науки о данных - из-за своей близости к Hadoop и его экосистеме - и в NLPсегмент), но доступны и другие варианты, хотя и в гораздо более ограниченном, доменном масштабе. Ни один из этих языков не является пустой тратой времени, однако вы должны расставить приоритеты в освоении любого или всех из них с учетом текущей рабочей ситуации, проектов и интересов. Итак, отвечая на ваш вопрос о жизнеспособности C / C ++ (и Java), я бы сказал, что все они жизнеспособны , но не как первичные инструменты для обработки данных, а как вторичные .
Отвечая на ваши вопросы по 1) C как потенциальному инструменту науки о данных и 2) его эффективности , я бы сказал, что: 1) хотя можно использовать C для науки о данных, я бы рекомендовал не делать этого, потому что у вас было бы очень трудно найти соответствующие библиотеки или, тем более, попытаться реализовать соответствующие алгоритмы самостоятельно; 2) вам не нужно беспокоиться об эффективности, поскольку многие критически важные для производительности сегменты кода реализованы на низкоуровневых языках, таких как C, плюс есть опции для взаимодействия популярных языков науки с, скажем, C (например,
Rcpp
пакет для интеграция R с C / C ++: http://dirk.eddelbuettel.com/code/rcpp.html). Это в дополнение к более простым, но часто довольно эффективным подходам к производительности, таким как последовательное использование векторизации в R, а также использование различных сред параллельного программирования, пакетов и библиотек. Примеры экосистемы R см. В представлении задач CRAN «Высокопроизводительные и параллельные вычисления с R» .Говоря о науке данных , я думаю, что имеет смысл упомянуть о важности воспроизводимого подхода к исследованиям, а также о наличии различных инструментов , поддерживающих эту концепцию (более подробную информацию см. В моем соответствующем ответе ). Я надеюсь, что мой ответ полезен.
источник
R является одним из ключевых инструментов для исследователя данных, что бы вы ни делали, не прекращайте его использовать.
Теперь говорим о C, C ++ или даже Java. Это хорошие популярные языки. Вне зависимости от того, какая у вас работа или какие проекты вам нужны, нужны они вам или понадобятся. Из личного опыта, существует так много инструментов для исследователя данных, что вы всегда будете чувствовать, что вам постоянно нужно учиться.
Вы можете добавить Python или Matlab, чтобы узнать, если хотите, и продолжать добавлять. Лучший способ научиться - это работать над проектом, используя другие инструменты, которые вам не нравятся. На вашем месте я бы изучал Python до C. Он более используется в сообществе, чем C. Но изучение C не является пустой тратой вашего времени.
источник
Как специалист по данным, другие языки (C ++ / Java) пригодятся, когда вам нужно включить машинное обучение в существующий производственный механизм.
Waffles - это хорошо поддерживаемая библиотека классов C ++ и пакет анализа командной строки. Здесь есть контролируемое и неконтролируемое обучение, тонны инструментов манипулирования данными, инструменты разреженных данных и другие вещи, такие как обработка аудио. Поскольку это также библиотека классов, вы можете расширять ее по мере необходимости. Даже если вы не тот, кто разрабатывает движок C ++ (скорее всего, вы этого не сделаете), это позволит вам создавать прототипы, тестировать и передавать что-то разработчикам.
Самое главное, я считаю, что мои знания C ++ и Java действительно помогают мне понять, как работают Python и R. Любой язык используется правильно только тогда, когда вы немного понимаете, что происходит под ним. Изучая различия между языками, вы можете научиться использовать сильные стороны вашего основного языка.
Обновить
Для коммерческих приложений с большими наборами данных важен Apache Spark - MLLib. Здесь вы можете использовать Scala, Java или Python.
источник
Я бы хотел понять, зачем вам нужен другой язык (кроме Python), если ваша цель - «а как насчет продвинутой регрессии, машинного обучения, интеллектуального анализа текста и других более сложных статистических операций».
Для такого рода вещей С - пустая трата времени. Это хороший инструмент, но за ~ 20 лет с момента появления Java я редко кодировал C.
Если вы предпочитаете более функционально-программирующую сторону R, изучите Scala, прежде чем вы начнете слишком много процедурных вредных привычек, кодирующих с помощью C . И
наконец научиться использовать библиотеки Hadley Викхов - они сэкономят вам много времени на выполнении манипуляции с данными.
источник
Существует несколько инструментов C ++ для статистики и науки о данных, таких как ROOT https://root.cern.ch/drupal/ , BAT https://www.mppmu.mpg.de/bat/ , boost или OpenCV.
источник
Не уверен, было ли это упомянуто, но есть также ваубальный вапбит, но он может быть специфичным только для определенных видов проблем.
источник
Взгляните на Intel DAAL, который идет полным ходом. Он высоко оптимизирован для архитектуры процессоров Intel и поддерживает распределенные вычисления.
источник
Масштабируемые решения для машинного обучения для больших данных:
Я добавлю свои $ .02, потому что есть ключевая область, которая, кажется, не была рассмотрена во всех предыдущих постах - машинное обучение на больших данных !
Для больших данных важна масштабируемость, а R недостаточно. Кроме того, такие языки, как Python и R, полезны только для взаимодействия с масштабируемыми решениями, которые обычно пишутся на других языках. Я делаю это различие не потому, что хочу пренебрегать теми, кто их использует, а только потому, что для членов сообщества специалистов по науке очень важно понять, как выглядят действительно масштабируемые решения для машинного обучения.
Я делаю большую часть своей работы с большими данными на кластерах распределенной памяти . То есть я не просто использую одну 16-ядерную машину (4 четырехъядерных процессора на одной материнской плате, разделяющей память этой материнской платы), я использую небольшой кластер из 64 16-ядерных машин. Требования для этих кластеров распределенной памяти сильно отличаются от требований к средам с общей памятью, и машинное обучение с большими данными во многих случаях требует масштабируемых решений в средах распределенной памяти.
Мы также используем C и C ++ везде в рамках проприетарного продукта базы данных. Все наши высокоуровневые вещи обрабатываются в C ++ и MPI, но низкоуровневые вещи, которые касаются данных, - это все longs и массивы символов в стиле C, чтобы поддерживать продукт очень очень быстрым. Удобство строк std просто не стоит вычислительных затрат.
Существует не так много доступных библиотек C ++, которые предлагают распределенные, масштабируемые возможности машинного обучения - MLPACK .
Однако есть и другие масштабируемые решения с API:
Apache Spark имеет масштабируемую библиотеку машинного обучения MLib, с которой вы можете взаимодействовать.
Также Tensorflow теперь имеет распределенный тензор потока и имеет API C ++ .
Надеюсь это поможет!
источник