Numpy для пользователя R? - PullRequest
       3

Numpy для пользователя R?

8 голосов
/ 23 августа 2010

давний пользователь R и Python здесь.Я использую R для ежедневного анализа данных и Python для задач, более сложных для обработки текста и сценариев оболочки.Я работаю со все большими наборами данных, и эти файлы часто находятся в двоичных или текстовых файлах, когда я их получаю.Обычно я использую статистические / машинные алгоритмы и в большинстве случаев создаю статистическую графику.Я иногда использую R с SQLite и пишу C для задач, требующих больших итераций;Перед тем как заглянуть в Hadoop, я подумываю о том, чтобы потратить некоторое время на NumPy / Scipy, потому что я слышал, что он лучше управляет памятью [и переход на Numpy / Scipy для одного с моим опытом кажется не таким уж большим]используя два и мог бы прокомментировать улучшения в этой области, и если есть идиомы в Numpy, которые занимаются этой проблемой.(Я также знаю о Rpy2, но мне интересно, сможет ли Numpy / Scipy удовлетворить большинство моих потребностей).Спасибо -

Ответы [ 3 ]

11 голосов
/ 23 августа 2010

Я использую NumPy ежедневно, а R почти так.

Для обработки больших чисел я предпочитаю NumPy-R с большим отрывом (включая R-пакеты, такие как 'Matrix'). Я считаю, что синтаксический очиститель, набор функций больше и вычисления выполняются быстрее (хотя я не нахожу R медленно любым способом). Например, функция вещания NumPy, я не думаю, что имеет аналог в R.

Например, для считывания набора данных из файла CSV и «нормализации» его для ввода в алгоритм ML (например, средний центр, а затем масштабирование каждого измерения) требуется только это:

data = NP.loadtxt(data1, delimiter=",")    # 'data' is a NumPy array
data -= NP.mean(data, axis=0)
data /= NP.max(data, axis=0)

Кроме того, я обнаружил, что при кодировании алгоритмов ML мне нужны структуры данных, которые я могу оперировать поэлементно и которые также понимают линейную алгебру (например, умножение матриц, транспонирование и т. Д.). NumPy получает это и позволяет вам легко создавать эти гибридные структуры (без перегрузки или подклассов операторов и т. Д.).

Вы не будете разочарованы NumPy / SciPy, скорее всего, вы будете поражены.

Итак, несколько рекомендаций - в целом и в частности, учитывая факты в вашем вопросе:

  • установить NumPy и Scipy . В качестве приблизительного руководства, NumPy предоставляет основные структуры данных (в частности, ndarray) и SciPy (который является на самом деле в несколько раз больше, чем NumPy) предоставляет домен-специфичный функции (например, статистика, сигнал обработка, интеграция).

  • установить версии репозитория , особенно с N / P NumPy, потому что версия для разработчиков - 2.0. Matplotlib и NumPy тесно интегрированы, вы можете использовать одно без другого, конечно, но оба являются лучшими в своем классе среди библиотек Python. Вы можете получить все три через easy_install , который, я полагаю, вы уже сделали.

  • NumPy / SciPy имеют несколько модулей специально направлено на машину Обучение / Статистика, включая пакет Clustering и пакет Statistics .

  • А также пакеты, направленные на общие вычисления, но которые сделать много алгоритмов кодирования ML быстрее, в частности, Оптимизация и Линейная алгебра .

  • Есть также SciKit s , not , включенные в базовую NumPy или Библиотеки SciPy; вам нужно установить их отдельно. Вообще говоря, каждый SciKit является набор удобных оберток для оптимизировать кодирование в данной области. SciKits, которые вы, вероятно, найдете наиболее подходящими: ann (приблизительный ближайший сосед) и learn (набор алгоритмов регрессии и классификации ML / Statistics, например, Logistic Regression, Multi -Слой перцептрон, машина опорных векторов).

10 голосов
/ 23 августа 2010

Сильной стороной R при поиске среды для машинного обучения и статистики, безусловно, является разнообразие его библиотек. Насколько мне известно, SciPy + SciKits не может заменить CRAN.

Что касается использования памяти, R использует парадигму передачи по значению, в то время как Python использует передачу по ссылке. Передача по значению может привести к более «интуитивному» коду, передача по ссылке может помочь оптимизировать использование памяти. Numpy также позволяет иметь «представления» для массивов (вид подмассивов без копирования).

Что касается скорости, чистый Python быстрее, чем чистый R, для доступа к отдельным элементам в массиве, но это преимущество исчезает, когда имеешь дело с массивными массивами ( benchmark ). К счастью, Cython позволяет легко получить серьезные улучшения скорости.

При работе с большими данными, я считаю, что поддержка Python (HDF5) для массивов хранения лучше.

Я не уверен, что вам следует отбрасывать один за другим, но rpy2 может помочь вам изучить ваши варианты возможного перехода (массивы можно перемещать между R и Numpy без создания копии).

2 голосов
/ 23 августа 2010

Я не могу комментировать R, но вот несколько ссылок на Numpy / Scipy и ML:

И книга (я только посмотрел на ее код ): Marsland, Machine Learning (с numpy), 2009 406p isbn 1420067184

Если бы вы моглисоберите несколько заметок о своем опыте на кривой обучения Numpy / Scipy, которые могут быть полезны другим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...