Pandy / Statsmodel / Scikit-learn


41
  1. Czy Pandy, Statsmodels i Scikit-learning uczą się różnych wdrożeń uczenia maszynowego / operacji statystycznych, czy też wzajemnie się uzupełniają?

  2. Który z nich ma najbardziej kompleksową funkcjonalność?

  3. Który jest aktywnie rozwijany i / lub wspierany?

  4. Muszę wdrożyć regresję logistyczną. Wszelkie sugestie, które z nich powinienem zastosować?

Odpowiedzi:


33
  1. Scikit-learn (sklearn) to najlepszy wybór do uczenia maszynowego, spośród trzech wymienionych. Chociaż Pandy i Statsmodele zawierają pewne algorytmy uczenia predykcyjnego, są one ukryte / jeszcze nie są gotowe do produkcji. Często, ponieważ autorzy będą pracować nad różnymi projektami, biblioteki są komplementarne. Na przykład ostatnio Ramki danych Pandas zostały zintegrowane z Statsmodels. Związek między sklearn a Pandami nie jest (jeszcze) obecny.

  2. Zdefiniuj funkcjonalność. Wszystkie biegną. Jeśli masz na myśli to, co jest najbardziej przydatne, zależy to od twojej aplikacji. Na pewno dałbym Pandas +1 tutaj, ponieważ dodało świetną nową strukturę danych do Pythona (ramki danych). Pandy prawdopodobnie mają również najlepsze API.

  3. Wszystkie są aktywnie wspierane, choć powiedziałbym, że Pandas ma najlepszą bazę kodu. Sklearn i Pandy są bardziej aktywne niż Statsmodels.

  4. Oczywistym wyborem jest Sklearn. Jest to łatwe i jasne, jak to zrobić.

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

5
Przeczytaj dłuższe wyjaśnienie poniżej!
— dartdog

4
Ta odpowiedź pomija wyjaśnienie, że Pandy służą głównie do manipulacji danymi (np. Indeksowanie, wybieranie, agregowanie), podczas gdy pozostałe dwa służą do budowania modeli (np. Do przewidywania lub wnioskowania).
— Nathan Gould

Używam sklearn od ponad roku i było świetnie, teraz, gdy projekt się rozwija, czuję potrzebę korzystania z doskonałych struktur danych Pandas, więc myślę, że uzupełniają się one w dłuższej perspektywie.
— dashy

Być może ostatnio się to zmieniło, ale w instrukcji import powinno być linear_model(pojedyncze), a nie linear_models.
— Vishal,

75

Chciałbym zakwalifikować i nieco wyjaśnić przyjętą odpowiedź.

Te trzy pakiety wzajemnie się uzupełniają, ponieważ obejmują różne obszary, mają różne główne cele lub podkreślają różne obszary uczenia maszynowego / statystyki.

  • pandy to głównie pakiet do obsługi i obsługi danych bezpośrednio.
  • scikit-learn to uczenie maszynowe z naciskiem na modelowanie predykcyjne z często dużymi i rzadkimi danymi
  • statsmodels wykonuje „tradycyjne” statystyki i ekonometrię, ze znacznie większym naciskiem na estymację parametrów i testy (statystyczne).

statsmodels ma zależność pand, pandas opcjonalnie używa statsmodels do niektórych statystyk. statsmodels patsyzapewnia interfejs podobny do modeli jak R.

Modele między scikit-learn i statsmodels pokrywają się, ale z różnymi celami. patrz na przykład Dwie kultury: statystyki czy uczenie maszynowe?

trochę więcej o statsmodels

statsmodels ma najniższą aktywność rozwojową i najdłuższy cykl uwalniania spośród wszystkich trzech. statsmodels ma wielu współpracowników, ale niestety wciąż tylko dwóch „opiekunów” (jestem jednym z nich).

Rdzeń statsmodels jest „gotowy do produkcji”: modele liniowe, solidne modele liniowe, uogólnione modele liniowe i modele dyskretne istnieją już od kilku lat i są weryfikowane względem Staty, a R. statsmodels ma również część analizy szeregów czasowych obejmującą AR, ARMA i Regresja VAR (wektorowa autoregresja), które nie są dostępne w żadnym innym pakiecie Pythona.

Kilka przykładów pokazujących pewne specyficzne różnice między podejściem uczenia maszynowego w scikit-learn a podejściem statystycznym i ekonometrycznym w statsmodels:

Prosta regresja liniowa OLS, ma dużą liczbę analiz po oszacowaniu http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLSResults.html w tym testy parametrów, wartości odstających i testy specyfikacji http: / /statsmodels.sourceforge.net/devel/stats.html#residual-diagnostics-and-specification-tests

Regresję logistyczną można wykonać w modelach statystycznych jako Logitmodel dyskretny lub jako rodzina w uogólnionym modelu liniowym ( GLM). http://statsmodels.sourceforge.net/devel/glm.html#module-reference

GLMobejmuje zwykłe rodziny, dyskretne modele zawiera oprócz Logittakże Probit, wielomianu i liczyć regresji.

Logit

Korzystanie Logitjest tak proste, jak to 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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.