Gấu trúc / Statsmodel / Scikit-learn


41
  1. Là Pandas, Statsmodels và Scikit-learn các triển khai khác nhau của hoạt động học máy / thống kê, hay chúng là bổ sung cho nhau?

  2. Cái nào trong số này có chức năng toàn diện nhất?

  3. Cái nào được tích cực phát triển và / hoặc hỗ trợ?

  4. Tôi phải thực hiện hồi quy logistic. Tôi có nên sử dụng gợi ý nào trong số này không?

Câu trả lời:


33
  1. Scikit-learn (sklearn) là lựa chọn tốt nhất cho máy học, trong số ba danh sách được liệt kê. Mặc dù Pandas và Statsmodels có chứa một số thuật toán học dự đoán, chúng vẫn bị ẩn / chưa sẵn sàng sản xuất. Thông thường, vì các tác giả sẽ làm việc trên các dự án khác nhau, các thư viện là miễn phí. Ví dụ, gần đây Dataframes của Pandas đã được tích hợp vào Statsmodels. Một mối quan hệ giữa sklearn và Pandas không có mặt (chưa).

  2. Xác định chức năng. Tất cả đều chạy. Nếu bạn có nghĩa là những gì hữu ích nhất, thì nó phụ thuộc vào ứng dụng của bạn. Tôi chắc chắn sẽ cho Pandas +1 ở đây, vì nó đã thêm một cấu trúc dữ liệu mới tuyệt vời cho Python (dataframes). Gấu trúc có lẽ cũng có API tốt nhất.

  3. Tất cả đều được hỗ trợ tích cực, mặc dù tôi sẽ nói Pandas có cơ sở mã tốt nhất. Sklearn và Pandas hoạt động nhiều hơn Statsmodels.

  4. Sự lựa chọn rõ ràng là Sklearn. Thật dễ dàng và rõ ràng làm thế nào để thực hiện nó.

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

5
Hãy chắc chắn để đọc lời giải thích dài hơn dưới đây!
phi tiêu

4
Câu trả lời này bỏ qua để giải thích rằng Pandas chủ yếu để thao tác dữ liệu (ví dụ: lập chỉ mục, chọn, tổng hợp), trong khi hai cái còn lại dành cho các mô hình xây dựng (ví dụ để dự đoán hoặc suy luận).
Nathan Gould

Tôi đã sử dụng sklearn được hơn một năm và thật tuyệt vời, bây giờ dự án đó đã phát triển Tôi cảm thấy cần phải sử dụng các cấu trúc dữ liệu tuyệt vời của Pandas, vì vậy tôi nghĩ rằng chúng là bổ sung trong dài hạn.
bảnh bao

Có lẽ điều này đã thay đổi gần đây, nhưng trong báo cáo nhập khẩu, nó phải là linear_model(số ít) và không linear_models.
Vishal

75

Tôi muốn đủ điều kiện và làm rõ một chút câu trả lời được chấp nhận.

Ba gói này bổ sung cho nhau vì chúng bao gồm các lĩnh vực khác nhau, có các mục tiêu chính khác nhau hoặc nhấn mạnh các lĩnh vực khác nhau trong học máy / thống kê.

  • gấu trúc chủ yếu là một gói để xử lý và vận hành trực tiếp trên dữ liệu.
  • scikit-learn đang thực hiện học máy với sự nhấn mạnh vào mô hình dự đoán với dữ liệu thường lớn và thưa thớt
  • statsmodels đang thực hiện thống kê và kinh tế lượng "truyền thống", với sự nhấn mạnh hơn nhiều vào ước tính tham số và kiểm tra (thống kê).

statsmodels có gấu trúc như một sự phụ thuộc, gấu trúc tùy ý sử dụng số liệu thống kê cho một số thống kê. statsmodels đang sử dụng patsyđể cung cấp giao diện công thức tương tự cho các mô hình như R.

Có một số sự chồng chéo trong các mô hình giữa scikit-learn và statsmodels, nhưng với các mục tiêu khác nhau. xem ví dụ Hai nền văn hóa: thống kê so với học máy?

thêm một số thông tin về thống kê

statsmodels có hoạt động phát triển thấp nhất và chu kỳ phát hành dài nhất trong ba. statsmodels có nhiều người đóng góp nhưng tiếc là vẫn chỉ có hai "người bảo trì" (tôi là một trong số họ.)

Cốt lõi của statsmodels là "sẵn sàng sản xuất": mô hình tuyến tính, mô hình tuyến tính mạnh mẽ, mô hình tuyến tính tổng quát và mô hình rời rạc đã tồn tại vài năm và được xác minh chống lại Stata và R. statsmodels cũng có phần phân tích chuỗi thời gian bao gồm AR, ARMA và Hồi quy VAR (vector autoreTHERive), không có sẵn trong bất kỳ gói python nào khác.

Một số ví dụ để chỉ ra một số khác biệt cụ thể giữa phương pháp học máy trong scikit-learn và phương pháp thống kê và kinh tế lượng trong thống kê mô hình:

Hồi quy tuyến tính đơn giản OLS, có số lượng lớn phân tích sau ước lượng http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLSResults.html bao gồm các thử nghiệm về tham số, các biện pháp ngoại lệ và kiểm tra thông số kỹ thuật http: / /statsmodels.sourceforge.net/devel/stats.html#residual-diagnostics-and-specification-tests

Hồi quy logistic có thể được thực hiện trong các Logitmô hình thống kê hoặc là mô hình rời rạc hoặc như một gia đình trong mô hình tuyến tính tổng quát ( GLM). http://statsmodels.sourceforge.net/devel/glm.html#module-reference

GLMbao gồm các gia đình thông thường, các mô hình rời rạc Logitcũng có bên cạnh đó Probit, hồi quy đa biến và đếm.

Đăng nhập

Việc sử dụng Logitrất đơn giản như http://statsmodels.sourceforge.net/devel/examples/generated/example_discittle.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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.