Je voudrais qualifier et clarifier un peu la réponse acceptée.
Les trois packages sont complémentaires car ils couvrent des domaines différents, ont des objectifs principaux différents ou mettent l’accent sur différents domaines de l’apprentissage / des statistiques.
- pandas est principalement un paquet pour manipuler et opérer directement sur des données.
- scikit-learn effectue un apprentissage automatique en mettant l’accent sur la modélisation prédictive avec des données souvent volumineuses et rares.
- statsmodels est en train de faire de la statistique et de l'économétrie "traditionnelles", en mettant davantage l'accent sur l'estimation de paramètres et le test (statistique).
statsmodels a des pandas en tant que dépendance, les pandas utilisent éventuellement statsmodels pour certaines statistiques. statsmodels utilise patsy
pour fournir une interface de formule similaire aux modèles en tant que R.
Il existe un certain chevauchement des modèles entre scikit-learn et statsmodels, mais avec des objectifs différents. voir par exemple Les deux cultures: statistiques vs apprentissage automatique?
un peu plus sur statsmodels
statsmodels a l'activité de développement la plus basse et le cycle de publication le plus long des trois. statsmodels a beaucoup de contributeurs mais malheureusement toujours deux "mainteneurs" (je suis l'un d'eux.)
Le «core product» de la statistique est «prêt pour la production»: modèles linéaires, modèles linéaires robustes, modèles linéaires généralisés et modèles discrets existent depuis plusieurs années et sont vérifiés par rapport à Stata. R. Régression VAR (vecteur autorégressif), qui ne sont disponibles dans aucun autre package python.
Quelques exemples montrant les différences spécifiques entre l'approche d'apprentissage automatique dans scikit-learn et l'approche statistique et économétrique dans les modèles de statistiques:
La régression linéaire simple OLS
comporte un grand nombre d’analyses post-estimation
http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLSResults.html, y compris des tests de paramètres, des mesures des valeurs aberrantes et des tests de spécification http: / /statsmodels.sourceforge.net/devel/stats.html#diagnostics-de-residual-and-specification-
La régression logistique peut être effectuée dans les modèles de statistiques, en tant que Logit
modèle discret ou en tant que famille dans un modèle linéaire généralisé ( GLM
). http://statsmodels.sourceforge.net/devel/glm.html#module-reference
GLM
comprend les familles habituelles, des modèles discrets contient en plus Logit
aussi Probit
, multinomial et compter la régression.
Logit
Utiliser Logit
est aussi simple que cela
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