Pandas / Statsmodel / Scikit-learn

41
  1. Os Pandas, Statsmodels e Scikit aprendem implementações diferentes de operações estatísticas / de aprendizado de máquina, ou são complementares entre si?

  2. Qual destes possui a funcionalidade mais abrangente?

  3. Qual deles é desenvolvido e / ou suportado ativamente?

  4. Eu tenho que implementar regressão logística. Alguma sugestão sobre qual delas devo usar?

Nik
fonte

Respostas:

33
  1. O Scikit-learn (sklearn) é a melhor opção para aprendizado de máquina, dentre os três listados. Embora os modelos Pandas e Stats contenham alguns algoritmos preditivos de aprendizado, eles estão ocultos / ainda não estão prontos para produção. Freqüentemente, como os autores trabalharão em diferentes projetos, as bibliotecas são gratuitas. Por exemplo, recentemente os Dataframes do Pandas foram integrados aos modelos Stats. Um relacionamento entre sklearn e Pandas ainda não está presente.

  2. Definir funcionalidade. Todos eles correm. Se você quer dizer o que é mais útil, isso depende do seu aplicativo. Definitivamente, daria um +1 ao Pandas aqui, pois ele adicionou uma ótima nova estrutura de dados ao Python (quadros de dados). O Pandas provavelmente também tem a melhor API.

  3. Todos eles são ativamente suportados, embora eu diria que o Pandas tem a melhor base de código. Sklearn e Pandas são mais ativos que os modelos Stats.

  4. A escolha clara é o Sklearn. É fácil e claro como executá-lo.

    from sklearn.linear_models import LogisticRegression as LR
    logr = LR()
    logr.fit( X, Y )
    results = logr.predict( test_data)
Cam.Davidson.Pilon
fonte
5
Certifique-se de ler a explicação mais longa abaixo!
dartdog
4
Essa resposta deixa de explicar que o Pandas é principalmente para manipulação de dados (por exemplo, indexação, seleção, agregação), enquanto as outras duas são para a construção de modelos (por exemplo, para previsão ou inferência).
Nathan Gould
Eu uso o sklearn há mais de um ano e tem sido ótimo. Agora que o projeto cresceu, sinto a necessidade de usar excelentes estruturas de dados do Pandas, então acho que elas são complementares a longo prazo.
dashesy 16/09/14
Talvez isso tenha mudado recentemente, mas na declaração de importação, deveria ser linear_model(singular) e não linear_models.
Vishal
75

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 patsypara 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,, OLSpossui 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 Logitmodelo em modelo discreto ou como família em modelo linear generalizado ( GLM). http://statsmodels.sourceforge.net/devel/glm.html#module-reference

GLMinclui as famílias de costume, modelos discretos contém além Logittambé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
Josef
fonte