2010-08-23 13 views
6

usuario de larga duración de R y Python aquí. Uso R para mi análisis diario de datos y Python para tareas más pesadas en el procesamiento de texto y shell-scripting. Estoy trabajando con conjuntos de datos cada vez más grandes, y estos archivos suelen estar en archivos binarios o de texto cuando los obtengo. El tipo de cosas que hago normalmente es aplicar algoritmos estadísticos/de aprendizaje automático y crear gráficos estadísticos en la mayoría de los casos. Uso R con SQLite algunas veces y escribo C para tareas de iteración intensiva; Antes de investigar Hadoop, estoy considerando invertir algo de tiempo en NumPy/Scipy porque he oído que tiene una mejor administración de la memoria [y la transición a Numpy/Scipy para una con mi historial no parece tan grande] - Me pregunto si alguien tiene experiencia usando los dos y podría comentar sobre las mejoras en esta área, y si hay modismos en Numpy que se ocupan de este problema. (También estoy al tanto de Rpy2, pero me pregunto si Numpy/Scipy puede manejar la mayoría de mis necesidades). Gracias -Numpy for R user?

+0

Votación para cerrar según la opinión. –

Respuesta

10

La fuerza de R al buscar un entorno para hacer aprendizaje automático y estadísticas es ciertamente la diversidad de sus bibliotecas. Que yo sepa, SciPy + SciKits no pueden reemplazar a CRAN.

En cuanto al uso de la memoria, R está utilizando un paradigma de paso por valor mientras Python está utilizando pass-by-reference. Pass-by-value puede conducir a un código más "intuitivo", pass-by-reference puede ayudar a optimizar el uso de la memoria. Numpy también permite tener "vistas" en matrices (tipo de submatrices sin una copia).

En cuanto a velocidad, Python puro es más rápido que R puro para acceder a elementos individuales en una matriz, pero esta ventaja desaparece cuando se trata de matrices numpy (benchmark). Afortunadamente, Cython te permite obtener mejoras de velocidad serias con facilidad.

Si trabajo con Big Data, el soporte para matrices basadas en almacenamiento es mejor con Python (HDF5).

No estoy seguro de que deba abandonar una por la otra, pero rpy2 puede ayudarlo a explorar sus opciones sobre una posible transición (las matrices pueden enviarse entre R y Numpy sin que se realice una copia).

+0

Sí, la semántica de copiar por valor es un asesino. Aunque entiendo que es más como una copia en la modificación ... También ha querido ver Big Data. Pero como dices, el camino puede estar abriéndose paso en SciPy. – hatmatrix

+0

Sí. El mundo funcional se ha movido rápidamente a trucos de optimización como la modificación de copia (en el caso de R, llamado "promesas" (para copiar si se modifica)). Sin embargo, esto solo ayuda cuando los objetos no se modifican (no ayuda si se cambian los nombres de fila de una matriz muy grande mientras se pasa como un parámetro a la función). – lgautier

+1

En realidad, el aprendizaje automático es un área que cubierto bastante bien en Python, por ejemplo http://mdp-toolkit.sourceforge.net/ y un listado más completo en http://mloss.org/software/language/python/ – user333700

11

Uso NumPy a diario y R casi.

Para un gran número de crujidos, prefiero NumPy a R por un margen grande (incluyendo paquetes R, como 'Matrix'). La sintaxis es más clara, la función es más grande y el cálculo es más rápido (aunque no encuentro R lento de ninguna manera). Funcionalidad de NumPy's Broadcasting, por ejemplo, no creo que tenga un análogo en R.

Por ejemplo, para leer en un conjunto de datos de un archivo csv y 'normalizarlo' para ingresar a un algoritmo ML (por ejemplo, mean center then re-escala cada dimensión) requiere sólo esta:

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

también, me parece que cuando la codificación de algoritmos mL, necesito estructuras de datos que i puede operar sobre el elemento-sabia y que también entienden álgebra lineal (por ejemplo, la multiplicación de matrices , transponer, etc.). NumPy obtiene esto y le permite crear fácilmente estas estructuras híbridas (sin sobrecarga ni subclases de operador, etc.).

No te decepcionará NumPy/SciPy, es más que probable que te sorprenda.

Por lo tanto, algunas recomendaciones - en general y en particular, teniendo en cuenta los hechos en su pregunta:

  • instalar tanto NumPy y Scipy. Como una guía general, NumPy proporciona las estructuras de datos centrales (en particular la ndarray) y SciPy (que es realmente varias veces más grande que NumPy) proporciona las funciones de dominio específico (por ejemplo, las estadísticas, la señal de procesamiento, la integración)

  • instalar las versiones del repositorio, particularmente w/t NumPy/r porque la versión dev es 2,0. Matplotlib y NumPy están estrechamente integrados, puede usar uno sin el otro, por supuesto, pero ambos son los mejores en su clase respectiva entre las bibliotecas de Python. Puede obtener los tres a través de easy_install, que ya lo asumo.

  • NumPy/SciPy tiene varias modules dirigida específicamente a la máquina de aprendizaje /Estadísticas, incluyendo el La agrupación paquete y el Estadísticas paquete.

  • , así como paquetes dirigidos a cómputo general, sino que se hacen de codificación ML Algoritmos mucho más rápido , en particular, Optimización y Álgebra Lineal.

  • También están los SciKit s, no incluidos en la base NumPy o bibliotecas SciPy; necesita instalarlos por separado. En términos generales, cada SciKit es un conjunto de contenedores de conveniencia con codificación de línea de corriente en un dominio dado. Los SciKits que probablemente encuentres más relevantes son: ann (vecino aproximado aproximado) y learn (un conjunto de algoritmos de regresión y clasificación ML/Statistics, por ejemplo, Regresión logística, Perceptron multicapa, Máquina de vectores de soporte) .

+0

no debería/= np.max() ser/= np.std()? – denis

+1

no, no debería.Di un ejemplo más arriba, no una enumeración exhaustiva de datos de procesamiento previo para la entrada de ML. A veces, cambiar de escala para que cada dimensión tenga una unidad de variación es lo que quiero, otras veces no. En cualquier caso, mi ejemplo describe una técnica muy común para preparar datos como entrada de ML, pero hay bastantes otros (véase, por ejemplo, "Machine Learning: An Algorithmic Perspective", Stephen Marsland, Ch 3., 2009, que utiliza el método en mi respuesta). – doug

+0

Gracias por todas las referencias. Les daré una oportunidad ... – hatmatrix

2

No puedo comentar en I, pero aquí hay un par de enlaces en Numpy/Scipy y ML:

Y un libro (solo he visto algunos de sus code): Marsland, Machine Learning (con numpy), 2009 406p ISBN 1420067184

Si se pudiera recoger algunas notas sobre su experiencia en la curva de aprendizaje Numpy/Scipy, que podría ser útil a los demás.

+0

¡Gracias por las referencias! – hatmatrix