Gostaria de qualificar e esclarecer um pouco a resposta aceita.
Os três pacotes são complementares, pois cobrem áreas diferentes, têm objetivos principais diferentes ou enfatizam áreas diferentes no aprendizado de máquina / estatística.
- O pandas é principalmente um pacote para lidar e operar diretamente com dados.
- O scikit-learn está fazendo aprendizado de máquina com ênfase na modelagem preditiva com dados geralmente grandes e esparsos
- O statsmodels está fazendo estatística e econometria "tradicionais", com ênfase muito mais forte na estimativa de parâmetros e no teste (estatístico).
O statsmodels tem pandas como uma dependência, opcionalmente o pandas usa o statsmodels para algumas estatísticas. o statsmodels está usando patsy
para fornecer uma interface de fórmula semelhante aos modelos como R.
Há alguma sobreposição nos modelos entre os modelos scikit-learn e stats, mas com objetivos diferentes. veja, por exemplo, As duas culturas: estatística versus aprendizado de máquina?
um pouco mais sobre o statsmodels
O statsmodels tem a menor atividade de desenvolvimento e o ciclo de liberação mais longo dos três. O statsmodels tem muitos colaboradores, mas infelizmente ainda possui apenas dois "mantenedores" (eu sou um deles).
O núcleo do statsmodels é "pronto para produção": modelos lineares, modelos lineares robustos, modelos lineares generalizados e modelos discretos existem há vários anos e são verificados em relação ao Stata e R. statsmodels também possui uma parte de análise de séries temporais que abrange AR, ARMA e Regressão VAR (vetor autoregressiva), que não está disponível em nenhum outro pacote python.
Alguns exemplos para mostrar algumas diferenças específicas entre a abordagem de aprendizado de máquina no scikit-learn e a abordagem de estatística e econometria nos modelos de estatísticas:
A Regressão linear simples,, OLS
possui um grande número de análises pós-estimativa
http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLSResults.html, incluindo testes de parâmetros, medidas externas e testes de especificação http: / /statsmodels.sourceforge.net/devel/stats.html#residual-diagnostics-and-specification-tests
A regressão logística pode ser feita nos modelos estatísticos, como Logit
modelo em modelo discreto ou como família em modelo linear generalizado ( GLM
). http://statsmodels.sourceforge.net/devel/glm.html#module-reference
GLM
inclui as famílias de costume, modelos discretos contém além Logit
também Probit
, multinomial e contar regressão.
Logit
O uso Logit
é tão simples quanto este
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