Panda / Statsmodel / Scikit-learn


41
  1. I panda, i modelli statistici e lo Scikit apprendono diverse implementazioni delle operazioni di apprendimento automatico / statistiche o sono complementari tra loro?

  2. Quale di questi ha la funzionalità più completa?

  3. Quale è attivamente sviluppato e / o supportato?

  4. Devo implementare la regressione logistica. Qualche suggerimento su quale di questi dovrei usare?

Risposte:


33
  1. Scikit-learn (sklearn) è la scelta migliore per l'apprendimento automatico, tra i tre elencati. Mentre i modelli Panda e Stats contengono alcuni algoritmi di apprendimento predittivo, sono nascosti / non ancora pronti per la produzione. Spesso, poiché gli autori lavoreranno su diversi progetti, le biblioteche sono gratuite. Ad esempio, recentemente i Dataframe di Pandas sono stati integrati nei modelli statistici. Una relazione tra sklearn e Panda non è presente (ancora).

  2. Definire la funzionalità. Tutti corrono. Se intendi qual è il più utile, allora dipende dalla tua applicazione. Darei un panda a +1 qui, dato che ha aggiunto una nuova fantastica struttura di dati a Python (dataframes). Panda ha probabilmente anche la migliore API.

  3. Sono tutti attivamente supportati, anche se direi che Pandas ha la migliore base di codice. Sklearn e Panda sono più attivi dei modelli statistici.

  4. La scelta chiara è Sklearn. È facile e chiaro come eseguirlo.

    from sklearn.linear_models import LogisticRegression as LR
    logr = LR()
    logr.fit( X, Y )
    results = logr.predict( test_data)

5
Assicurati di leggere la spiegazione più lunga di seguito!
dartdog,

4
Questa risposta trascura di spiegare che Pandas è principalmente per la manipolazione dei dati (ad es. Indicizzazione, selezione, aggregazione), mentre gli altri due sono per la costruzione di modelli (ad es. Per previsione o inferenza).
Nathan Gould,

Uso sklearn da oltre un anno ed è stato grandioso, ora che il progetto è cresciuto sento il bisogno di usare le eccellenti strutture di dati di Pandas, quindi penso che siano complementari a lungo termine.
dashesy,

Forse questo è cambiato di recente, ma nella dichiarazione di importazione, dovrebbe essere linear_model(singolare) e non linear_models.
Vishal,

75

Vorrei qualificare e chiarire un po 'la risposta accettata.

I tre pacchetti sono complementari tra loro in quanto coprono aree diverse, hanno obiettivi principali diversi o enfatizzano aree diverse dell'apprendimento automatico / delle statistiche.

  • Panda è principalmente un pacchetto per gestire e operare direttamente sui dati.
  • scikit-learn sta facendo machine learning con enfasi sulla modellazione predittiva con dati spesso grandi e sparsi
  • statsmodels sta facendo statistiche "tradizionali" ed econometria, con un'enfasi molto più forte sulla stima dei parametri e sui test (statistici).

statsmodels ha i panda come dipendenza, i panda usano facoltativamente statsmodels per alcune statistiche. statsmodels sta usando patsyper fornire un'interfaccia formula simile ai modelli come R.

Esistono alcune sovrapposizioni nei modelli tra scikit-learn e statsmodels, ma con obiettivi diversi. vedi per esempio The Two Cultures: statistica vs. machine learning?

qualche altro su statsmodels

statsmodels ha l'attività di sviluppo più bassa e il ciclo di rilascio più lungo dei tre. statsmodels ha molti collaboratori ma purtroppo solo due "manutentori" (io sono uno di loro).

Il nucleo di statsmodels è "pronto per la produzione": modelli lineari, robusti modelli lineari, modelli lineari generalizzati e modelli discreti sono in circolazione da diversi anni e sono verificati contro Stata e R. statsmodels ha anche una parte di analisi delle serie temporali che copre AR, ARMA e Regressione VAR (vector autoregressive), che non sono disponibili in nessun altro pacchetto python.

Alcuni esempi per mostrare alcune differenze specifiche tra l'approccio di machine learning in scikit-learn e l'approccio di statistiche ed econometria in statsmodels:

Regressione lineare semplice OLS, ha un gran numero di analisi post-stima http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLSResults.html inclusi test su parametri, misure anomale e test di specifica http: / /statsmodels.sourceforge.net/devel/stats.html#residual-diagnostics-and-specification-tests

La regressione logistica può essere eseguita in statsmodels come Logitmodello in discreto o come famiglia in modello lineare generalizzato ( GLM). http://statsmodels.sourceforge.net/devel/glm.html#module-reference

GLMinclude le solite famiglie, modelli discreti contiene inoltre Logitanche Probitregressione multinomiale e conteggio.

logit

L'uso Logitè semplice come questo 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.