Pandas / Statsmodel / Scikit-lernen

41
  1. Lernen Pandas, Statsmodels und Scikit unterschiedliche Implementierungen von maschinellem Lernen / statistischen Operationen oder ergänzen sich diese?

  2. Welche davon bietet die umfassendste Funktionalität?

  3. Welches wird aktiv entwickelt und / oder unterstützt?

  4. Ich muss eine logistische Regression implementieren. Irgendwelche Vorschläge, welche davon ich verwenden soll?

Nik
quelle

Antworten:

33
  1. Scikit-learn (sklearn) ist die beste Wahl für maschinelles Lernen unter den drei aufgeführten. Pandas und Stats-Modelle enthalten zwar einige prädiktive Lernalgorithmen, sie sind jedoch noch nicht für die Produktion bereit. Da Autoren an verschiedenen Projekten arbeiten, sind die Bibliotheken häufig kostenlos. Beispielsweise wurden kürzlich die Datenrahmen von Pandas in Statsmodels integriert. Eine Beziehung zwischen sklearn und Pandas ist (noch) nicht vorhanden.

  2. Funktionalität definieren. Sie alle rennen. Wenn Sie meinen, was am nützlichsten ist, dann hängt es von Ihrer Anwendung ab. Ich würde Pandas hier definitiv eine +1 geben, da es Python (Datenrahmen) eine großartige neue Datenstruktur hinzugefügt hat. Pandas hat wahrscheinlich auch die beste API.

  3. Sie werden alle aktiv unterstützt, obwohl ich sagen würde, dass Pandas die beste Codebasis hat. Sklearn und Pandas sind aktiver als Statsmodels.

  4. Die klare Wahl ist Sklearn. Es ist einfach und klar, wie es durchzuführen ist.

    from sklearn.linear_models import LogisticRegression as LR
    logr = LR()
    logr.fit( X, Y )
    results = logr.predict( test_data)
Cam.Davidson.Pilon
quelle
5
Lesen Sie unbedingt die längere Erklärung weiter unten!
Dartdog
4
In dieser Antwort wird vernachlässigt, zu erklären, dass Pandas hauptsächlich für die Datenmanipulation (z. B. Indizieren, Auswählen, Aggregieren) vorgesehen ist, während die beiden anderen zum Erstellen von Modellen (z. B. zur Vorhersage oder Schlussfolgerung) dienen.
Nathan Gould
Ich benutze sklearn seit über einem Jahr und es war großartig, jetzt, da das Projekt gewachsen ist, habe ich das Bedürfnis, die hervorragenden Datenstrukturen von Pandas zu nutzen. Ich denke, dass sie sich langfristig ergänzen.
Dashesy
Vielleicht hat sich dies kürzlich geändert, aber in der import-Anweisung sollte es linear_model(singulär) sein und nicht linear_models.
Vishal
75

Ich möchte die akzeptierte Antwort ein wenig näher erläutern.

Die drei Pakete ergänzen sich gegenseitig, da sie unterschiedliche Bereiche abdecken, unterschiedliche Hauptziele verfolgen oder unterschiedliche Bereiche des maschinellen Lernens / der Statistik hervorheben.

  • pandas ist hauptsächlich ein Paket, um Daten direkt zu verarbeiten und zu verarbeiten.
  • scikit-learn macht maschinelles Lernen mit Schwerpunkt auf prädiktiver Modellierung mit oft großen und spärlichen Daten
  • statsmodels betreibt "traditionelle" Statistik und Ökonometrie, wobei der Schwerpunkt auf Parameterschätzung und (statistischen) Tests liegt.

statsmodels hat pandas als abhängigkeit, pandas verwendet für einige statistiken optional statsmodels. statsmodels verwendet patsy, um eine ähnliche Formelschnittstelle für die Modelle wie R bereitzustellen.

In den Modellen gibt es einige Überschneidungen zwischen Scikit-Learn- und Statistikmodellen, jedoch mit unterschiedlichen Zielen. siehe zum Beispiel Die zwei Kulturen: Statistik vs. maschinelles Lernen?

mehr über statsmodels

statsmodels hat die niedrigste Entwicklungsaktivität und den längsten Veröffentlichungszyklus der drei. statsmodels hat viele Mitwirkende, aber leider immer noch nur zwei "Betreuer" (ich bin einer von ihnen.)

Der Kern von Statistikmodellen ist "produktionsbereit": Lineare Modelle, robuste lineare Modelle, verallgemeinerte lineare Modelle und diskrete Modelle gibt es seit mehreren Jahren und sie werden mit Stata verifiziert. R. Statistikmodelle umfassen auch einen Teil zur Zeitreihenanalyse, der AR, ARMA und VAR-Regression (Vector Autoregressive), die in keinem anderen Python-Paket verfügbar ist.

Einige Beispiele, um einige spezifische Unterschiede zwischen dem Ansatz des maschinellen Lernens beim Scikit-Lernen und dem Ansatz der Statistik und Ökonometrie bei Statistikmodellen aufzuzeigen:

Einfache lineare Regression, OLShat eine große Anzahl von Post-Schätzungsanalyse http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLSResults.html einschließlich Tests auf Parameter, Ausreißer Maßnahmen und Spezifikationstests http: / /statsmodels.sourceforge.net/devel/stats.html#residual-diagnostics-and-specification-tests

Die logistische Regression kann in Statistikmodellen entweder als LogitModell in diskreten oder als Familie in verallgemeinerten linearen Modellen ( GLM) durchgeführt werden. http://statsmodels.sourceforge.net/devel/glm.html#module-reference

GLMUmfasst die üblichen Familien, diskrete Modelle enthält zudem Logitauch ProbitMultinomial- und Count-Regression.

Logit

Die Verwendung Logitist so einfach wie diese 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
quelle