¿Cómo se compara Scikit Learn con R (en términos de velocidad, conveniencia y potencia)?

No creo que haya una respuesta general para la velocidad: probablemente depende de los modelos. Para RandomForests, GBRT y el rendimiento de la mayoría de los modelos lineales deberían ser similares. Además, todavía no existen muchos algoritmos en R (en el archivo CRAN) en scikit-learn, lo contrario a veces también debería ser cierto.

Para mayor comodidad, scikit-learn intenta aplicar una API simple y consistente (ajuste / predicción / transformación) en todos los modelos que deberían facilitar la curva de aprendizaje).

En scikit-learn también tratamos de usar uniformemente estructuras de datos de entrada barebone como matrices numpy y matrices scipy.sparse, mientras que en R es común usar representaciones de nivel superior de los datos y modelos como fórmulas. Pero a veces esto tiene una penalización de rendimiento, por ejemplo: http://www.gregorypark.org/?p=286 y no siempre es útil (por ejemplo, cuando los datos de entrada se derivan de matrices de píxeles sin procesar, como en tareas de visión por computadora).

Además, el uso de estructuras de datos basadas en numpy (fragmentos de memoria contiguos con un tipo de datos, una forma n-dimensional y zancadas) hace posible tener un control más preciso sobre el uso de la memoria y, en ocasiones, hacer cosas más avanzadas con archivos mapeados de memoria para cálculos de múltiples CPU ( aunque este caso de uso en particular aún no está optimizado en scikit-learn) o la serialización / cargadores eficientes a / desde almacenes de datos optimizados como PyTables.

Probablemente depende de tu cultura. Personalmente, también me gusta mucho el hecho de que Python es un lenguaje de programación de propósito general que te permite hacer:

  • recolección de datos sin procesar con rastreadores y raspadores web,
  • limpieza / preprocesamiento de datos (como la limpieza HTML) y almacenamiento en múltiples bases de datos, almacenes NoSQL, almacenes numéricos (HDF5 / PyTables) o indexadores de texto completo,
  • exploración interactiva de datos con pandas y matplotlib,
  • análisis predictivo con scikit-learn,
  • Despliegue de producción de los modelos predictivos como un servicio REST HTTP utilizando matraz, por ejemplo,
  • aplicaciones web para la visualización interactiva de datos django y algún ingenioso kit de herramientas del lado del cliente JS o matplotlib en el lado del servidor, por ejemplo.

Por el poder no estoy seguro de lo que quieres decir. Como se dijo anteriormente, CRAN es mucho más grande que scikit-learn en términos de cobertura.

Son tan diferentes que hacen que la comparación no tenga sentido. En cuanto a la velocidad, las cosas cambian rápido. Por ejemplo, cuando Olivier escribió su respuesta, no había un dominio claro entre los dos. Ahora, creo que scikit-learn es mucho más rápido (a partir de octubre de 2014), pero las cosas podrían cambiar nuevamente, ya que, por ejemplo, R tiene una interfaz para 0xdata (que debería tener una implementación rápida de bosques aleatorios). En general, scikit-learn es una biblioteca desarrollada activamente, generalmente rápida y confiable, y contiene el 90% de lo que necesita para las tareas estadísticas y de aprendizaje automático. Tiene una interfaz consistente y sin duplicación. R toma un enfoque diferente. Los paquetes son mucho más pequeños y, a menudo, se solapan entre ellos. Y, hay un gran número de ellos. La coherencia se garantiza parcialmente mediante el uso de objetos de fórmula y estructuras de datos comunes (como marcos de datos), pero los estilos pueden diferir. Algunas funciones requieren matrices de bajo nivel, otras fórmulas de nivel superior; puede ver la dicotomía incluso en regresión lineal, donde tiene tanto lm () como lm.fit (). Un paquete como caret hace un gran trabajo para hacer que muchos paquetes de API sean consistentes y agrega un marco de confirmación encima.
La duplicación es buena y mala: puede considerar los paquetes de 10K + en R (entre CRAN, Omegahat y github) como una población, cuyo miembro se cruza, muta y muere o florece.
Si ya usa Python o R, no recomiendo cambiar, a menos que esté usando Python pero tenga necesidades estadísticas en áreas específicas como econometría, ecología, quimiometría, etc., en las que la riqueza de R se vuelve esencial; o usar R pero necesita servir de manera confiable servicios analíticos a una escala de mediana a grande (por ejemplo, alguna clasificación / agrupación bajo demanda activada por un servicio web); o en el caso de que tenga una carga computacional intensa, en la que Python es más adecuado que R.

Una de las desventajas de scikit-learn es que se centra menos en las estadísticas que R. Entonces, por ejemplo, si bien puedes calcular fácilmente los coeficientes para una regresión lineal o logística en sklearn, hay mucha más información sobre la regresión que puedes obtener fácilmente en R que no puedes obtener por defecto en sklearn, como los valores p o intervalos de confianza para los coeficientes, R ^ 2, estadísticas F, factores de inflación de varianza, etc.

Sin embargo, hay un módulo de Python llamado statsmodels que implementa parte de esta funcionalidad.

Creo que si uno está resolviendo un problema empresarial complejo, se prefiere R
Si el problema es más simple en la naturaleza, Python también puede hacer lo necesario

También según Kevin “Una de las desventajas de scikit-learn es que se centra menos en las estadísticas que R”

tiene más sentido, aunque la implementación del modo es fácil en Python que R

Gracias

En términos de velocidad. Hice una prueba de regresión logística. Scikit-learn es más rápido que R, pero no mucho.