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 patsy
para 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 OLS
tiene 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 Logit
modelo discreto o como familia en modelo lineal generalizado ( GLM
). http://statsmodels.sourceforge.net/devel/glm.html#module-reference
GLM
incluye las familias habituales, modelos discretos contiene además Logit
también Probit
, multinomial y contar regresión.
Logit
El uso Logit
es 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