Panda / Statsmodel / Scikit-belajar

41
  1. Apakah Pandas, Statsmodels, dan Scikit-mempelajari berbagai implementasi pembelajaran mesin / statistik yang berbeda, atau apakah ini saling melengkapi satu sama lain?

  2. Manakah dari ini yang memiliki fungsi paling komprehensif?

  3. Yang mana yang dikembangkan dan / atau didukung secara aktif?

  4. Saya harus menerapkan regresi logistik. Adakah saran untuk yang mana yang harus saya gunakan?

Nik
sumber

Jawaban:

33
  1. Scikit-learning (sklearn) adalah pilihan terbaik untuk pembelajaran mesin, dari tiga yang terdaftar. Sementara Pandas dan Statsmodels memang mengandung beberapa algoritma pembelajaran prediktif, mereka tersembunyi / belum siap-produksi. Seringkali, karena penulis akan mengerjakan proyek yang berbeda, perpustakaannya gratis. Sebagai contoh, baru-baru ini kerangka data Pandas diintegrasikan ke dalam Statsmodels. Hubungan antara sklearn dan Pandas belum ada (belum).

  2. Tentukan fungsionalitas. Mereka semua lari. Jika yang Anda maksud adalah apa yang paling berguna, maka itu tergantung pada aplikasi Anda. Saya pasti akan memberikan Pandas +1 di sini, karena telah menambahkan struktur data baru yang hebat ke Python (dataframe). Panda juga mungkin memiliki API terbaik.

  3. Mereka semua didukung secara aktif, meskipun saya akan mengatakan Pandas memiliki basis kode terbaik. Sklearn dan Panda lebih aktif daripada Statsmodels.

  4. Pilihan yang jelas adalah Sklearn. Mudah dan jelas cara melakukannya.

    from sklearn.linear_models import LogisticRegression as LR
    logr = LR()
    logr.fit( X, Y )
    results = logr.predict( test_data)
Cam.Davidson.Pilon
sumber
5
Pastikan untuk membaca penjelasan yang lebih panjang di bawah ini!
Dartdog
4
Jawaban ini lalai menjelaskan bahwa Pandas pada prinsipnya untuk manipulasi data (misalnya pengindeksan, pemilihan, pengumpulan), sedangkan dua lainnya untuk membangun model (misalnya untuk prediksi atau inferensi).
Nathan Gould
Saya telah menggunakan sklearn selama lebih dari satu tahun dan itu sangat bagus, sekarang setelah proyek ini berkembang, saya merasa perlu menggunakan struktur data Pandas yang sangat baik, jadi saya pikir mereka saling melengkapi dalam jangka panjang.
dashesy
Mungkin ini berubah baru-baru ini, tetapi dalam pernyataan impor, itu harus linear_model(tunggal) dan tidak linear_models.
Vishal
75

Saya ingin memenuhi syarat dan mengklarifikasi sedikit jawaban yang diterima.

Tiga paket saling melengkapi karena mereka mencakup bidang yang berbeda, memiliki tujuan utama yang berbeda, atau menekankan bidang yang berbeda dalam pembelajaran mesin / statistik.

  • panda terutama merupakan paket untuk menangani dan beroperasi secara langsung pada data.
  • scikit-belajar adalah melakukan pembelajaran mesin dengan penekanan pada pemodelan prediktif dengan data yang sering besar dan jarang
  • statsmodels melakukan statistik dan ekonometrik "tradisional", dengan penekanan yang lebih kuat pada estimasi parameter dan pengujian (statistik).

statsmodel memiliki panda sebagai dependensi, panda secara opsional menggunakan statsmodel untuk beberapa statistik. statsmodels digunakan patsyuntuk menyediakan antarmuka rumus yang mirip dengan model sebagai R.

Ada beberapa model yang tumpang tindih antara scikit-learn dan statsmodels, tetapi dengan tujuan yang berbeda. lihat misalnya Dua Budaya: statistik vs. pembelajaran mesin?

lagi tentang statsmodels

statsmodels memiliki aktivitas pengembangan terendah dan siklus rilis terpanjang dari ketiganya. statsmodels memiliki banyak kontributor tetapi sayangnya hanya dua "pengelola" (saya salah satunya.)

Inti dari statsmodels adalah "siap produksi": model linier, model linier kuat, model linier umum dan model diskrit telah ada selama beberapa tahun dan diverifikasi terhadap Stata dan R. statsmodels juga memiliki bagian analisis deret waktu yang mencakup AR, ARMA dan Regresi VAR (vector autoregressive), yang tidak tersedia dalam paket python lainnya.

Beberapa contoh untuk menunjukkan beberapa perbedaan spesifik antara pendekatan pembelajaran mesin dalam scikit-belajar dan pendekatan statistik dan ekonometrik dalam statsmodels:

Regresi linier sederhana OLS,, memiliki sejumlah besar analisis pasca estimasi dengan http://statsmodels.sourceforge.net/devel/generated/statsmodels.regress.linear_model.OLSResults.html termasuk tes pada parameter, tindakan outlier dan tes spesifikasi http: / /statsmodels.sourceforge.net/devel/stats.html#residual-diagnostics-and-specification-tests

Regresi Logistik dapat dilakukan dalam statsmodels baik sebagai Logitmodel dalam diskrit atau sebagai keluarga dalam model linier umum ( GLM). http://statsmodels.sourceforge.net/devel/glm.html#module-reference

GLMtermasuk keluarga biasa, model diskrit berisi selain Logitjuga Probit, multinomial dan regresi jumlah.

Logit

Penggunaannya Logitsesederhana http://statsmodels.sourceforge.net/devel/examples/generated/example_discrete.html ini

>>> 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
sumber