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 patsy
per 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 Logit
modello in discreto o come famiglia in modello lineare generalizzato ( GLM
). http://statsmodels.sourceforge.net/devel/glm.html#module-reference
GLM
include le solite famiglie, modelli discreti contiene inoltre Logit
anche Probit
regressione 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