Pandas / Statsmodel / Scikit-learn

41
  1. ¿Son Pandas, Statsmodels y Scikit-learn diferentes implementaciones de aprendizaje automático / operaciones estadísticas, o son complementarias entre sí?

  2. ¿Cuál de estos tiene la funcionalidad más completa?

  3. ¿Cuál se desarrolla y / o apoya activamente?

  4. Tengo que implementar la regresión logística. ¿Alguna sugerencia sobre cuál de estos debo usar?

Nik
fuente

Respuestas:

33
  1. Scikit-learn (sklearn) es la mejor opción para el aprendizaje automático, de los tres enumerados. Si bien los modelos Pandas y Stats contienen algunos algoritmos de aprendizaje predictivo, todavía están ocultos / no están listos para la producción. A menudo, como los autores trabajarán en diferentes proyectos, las bibliotecas son complementarias. Por ejemplo, recientemente los marcos de datos de Pandas se integraron en los modelos de estadísticas. Una relación entre sklearn y Pandas no está presente (todavía).

  2. Definir funcionalidad. Todos corren. Si te refieres a lo que es más útil, entonces depende de tu aplicación. Definitivamente le daría a Pandas un +1 aquí, ya que ha agregado una nueva estructura de datos a Python (marcos de datos). Pandas probablemente también tiene la mejor API.

  3. Todos tienen soporte activo, aunque yo diría que Pandas tiene la mejor base de código. Sklearn y Pandas son más activos que los Statsmodels.

  4. La elección clara es Sklearn. Es fácil y claro cómo realizarlo.

    from sklearn.linear_models import LogisticRegression as LR
    logr = LR()
    logr.fit( X, Y )
    results = logr.predict( test_data)
    
Cam.Davidson.Pilon
fuente
55
¡Asegúrese de leer la explicación más larga a continuación!
dartdog
44
Esta respuesta no explica que Pandas es principalmente para la manipulación de datos (por ejemplo, indexación, selección, agregación), mientras que los otros dos son para construir modelos (por ejemplo, para predicción o inferencia).
Nathan Gould
He estado usando sklearn durante más de un año y ha sido genial, ahora que el proyecto ha crecido, siento la necesidad de usar estructuras de datos excelentes de Pandas, por lo que creo que son complementarias a largo plazo.
guión
Quizás esto cambió recientemente, pero en la declaración de importación, debería ser linear_model(singular) y no linear_models.
Vishal
75

Me gustaría calificar y aclarar un poco la respuesta aceptada.

Los tres paquetes son complementarios entre sí, ya que cubren diferentes áreas, tienen diferentes objetivos principales o enfatizan diferentes áreas en aprendizaje automático / estadísticas.

  • pandas es principalmente un paquete para manejar y operar directamente en datos.
  • scikit-learn está haciendo aprendizaje automático con énfasis en el modelado predictivo con datos a menudo grandes y escasos
  • statsmodels está haciendo estadísticas y econometría "tradicionales", con un énfasis mucho mayor en la estimación de parámetros y las pruebas (estadísticas).

statsmodels tiene pandas como una dependencia, pandas opcionalmente usa statsmodels para algunas estadísticas. statsmodels está utilizando patsypara proporcionar una interfaz de fórmula similar a los modelos como R.

Hay cierta superposición en los modelos entre scikit-learn y statsmodels, pero con objetivos diferentes. ver por ejemplo Las dos culturas: ¿estadísticas vs. aprendizaje automático?

algo más sobre modelos de estadísticas

statsmodels tiene la actividad de desarrollo más baja y el ciclo de lanzamiento más largo de los tres. statsmodels tiene muchos contribuyentes pero desafortunadamente solo dos "mantenedores" (yo soy uno de ellos).

El núcleo de statsmodels está "listo para producción": modelos lineales, modelos lineales robustos, modelos lineales generalizados y modelos discretos han existido durante varios años y se verifican contra Stata y R. statsmodels también tiene una parte de análisis de series de tiempo que cubre AR, ARMA y Regresión VAR (vector autorregresivo), que no están disponibles en ningún otro paquete de Python.

Algunos ejemplos para mostrar algunas diferencias específicas entre el enfoque de aprendizaje automático en scikit-learn y el enfoque de estadísticas y econometría en modelos de estadísticas:

La regresión lineal simple OLStiene una gran cantidad de análisis posteriores a la estimación http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLSResults.html que incluye pruebas de parámetros, medidas atípicas y pruebas de especificación http: / /statsmodels.sourceforge.net/devel/stats.html#residual-diagnostics-and-specification-tests

La regresión logística se puede realizar en modelos de estadísticas, ya sea como Logitmodelo discreto o como familia en modelo lineal generalizado ( GLM). http://statsmodels.sourceforge.net/devel/glm.html#module-reference

GLMincluye las familias habituales, modelos discretos contiene además Logittambién Probit, multinomial y contar regresión.

Logit

El uso Logites tan simple como este http://statsmodels.sourceforge.net/devel/examples/generated/example_discrete.html

>>> import statsmodels.api as sm
>>> x = sm.add_constant(data.exog, prepend=False)
>>> y = data.endog

>>> res1 = sm.Logit(y, x).fit()
Optimization terminated successfully.
         Current function value: 0.402801
         Iterations 7
>>> print res1.summary()
                           Logit Regression Results                           
==============================================================================
Dep. Variable:                      y   No. Observations:                   32
Model:                          Logit   Df Residuals:                       28
Method:                           MLE   Df Model:                            3
Date:                Sat, 26 Jan 2013   Pseudo R-squ.:                  0.3740
Time:                        07:34:59   Log-Likelihood:                -12.890
converged:                       True   LL-Null:                       -20.592
                                        LLR p-value:                  0.001502
==============================================================================
                 coef    std err          z      P>|z|      [95.0% Conf. Int.]
------------------------------------------------------------------------------
x1             2.8261      1.263      2.238      0.025         0.351     5.301
x2             0.0952      0.142      0.672      0.501        -0.182     0.373
x3             2.3787      1.065      2.234      0.025         0.292     4.465
const        -13.0213      4.931     -2.641      0.008       -22.687    -3.356
==============================================================================
>>> dir(res1)
...
>>> res1.predict(x.mean(0))
0.25282026208742708
Josef
fuente