Pandas / Statsmodel / Scikit-learn

41
  1. Les pandas, modèles de statistiques et Scikit-learn sont-ils des implémentations différentes d'opérations d'apprentissage automatique / statistiques, ou sont-ils complémentaires les uns des autres?

  2. Lequel de ceux-ci a la fonctionnalité la plus complète?

  3. Lequel est activement développé et / ou soutenu?

  4. Je dois mettre en œuvre la régression logistique. Avez-vous des suggestions quant à celles que je devrais utiliser?

Nik
la source

Réponses:

33
  1. Scikit-learn (sklearn) est le meilleur choix pour l'apprentissage automatique, parmi les trois répertoriés. Les modèles Pandas et Stats contiennent certains algorithmes d’apprentissage prédictif, mais ils ne sont pas encore prêts pour la production. Souvent, les auteurs travaillant sur différents projets, les bibliothèques sont complémentaires. Par exemple, des Dataframes de Pandas ont récemment été intégrés dans les modèles de Stats. Une relation entre sklearn et Pandas n’est pas (encore) présente.

  2. Définir la fonctionnalité. Ils courent tous. Si vous parlez de ce qui est le plus utile, cela dépend de votre application. Je donnerais certainement un +1 à Pandas ici, car il a ajouté une nouvelle structure de données géniale à Python (cadres de données). Les pandas ont probablement aussi la meilleure API.

  3. Ils sont tous activement soutenus, même si je dirais que Pandas possède la meilleure base de code. Sklearn et les pandas sont plus actifs que Statsmodels.

  4. Le choix évident est Sklearn. Il est facile et clair comment le réaliser.

    from sklearn.linear_models import LogisticRegression as LR
    logr = LR()
    logr.fit( X, Y )
    results = logr.predict( test_data)
    
Cam.Davidson.Pilon
la source
5
Assurez-vous de lire l'explication plus longue ci-dessous!
dartdog
4
Cette réponse néglige d'expliquer que Pandas est principalement destiné à la manipulation de données (par exemple, indexation, sélection, agrégation), tandis que les deux autres sont destinés à la construction de modèles (par exemple, pour la prédiction ou l'inférence).
Nathan Gould
J'utilise sklearn depuis plus d'un an et c'était formidable. Maintenant que ce projet est développé, je ressens le besoin d'utiliser d'excellentes structures de données Pandas. Je pense donc qu'elles sont complémentaires à long terme.
Dashesy
Cela a peut-être changé récemment, mais dans la déclaration d'importation, ce devrait être linear_model(singulier) et non linear_models.
Vishal
75

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 patsypour 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 OLScomporte 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 Logitmodè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

GLMcomprend les familles habituelles, des modèles discrets contient en plus Logitaussi Probit, multinomial et compter la régression.

Logit

Utiliser Logitest 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
Josef
la source