นุ่น / Statsmodel / Scikit เรียนรู้


41
  1. Pandas, Statsmodels และ Scikit เรียนรู้การใช้งานที่แตกต่างกันของการเรียนรู้ด้วยเครื่องจักร / การดำเนินการทางสถิติหรือเป็นส่วนเสริมเหล่านี้หรือไม่?

  2. ข้อใดต่อไปนี้มีฟังก์ชันการทำงานที่ครอบคลุมที่สุด

  3. สิ่งใดที่ได้รับการพัฒนาและ / หรือสนับสนุนอย่างแข็งขัน

  4. ฉันต้องใช้การถดถอยโลจิสติก ข้อเสนอแนะใดที่ฉันควรใช้กับสิ่งเหล่านี้?

คำตอบ:


33
  1. Scikit-learn (sklearn) เป็นตัวเลือกที่ดีที่สุดสำหรับการเรียนรู้ของเครื่องจากทั้งหมดสามรายการ แม้ว่า Pandas และ Statsmodels จะมีอัลกอริธึมการเรียนรู้เชิงคาดการณ์บางอย่าง แต่ก็ยังซ่อนอยู่ / ยังไม่พร้อมการผลิต บ่อยครั้งที่ผู้เขียนจะทำงานในโครงการที่แตกต่างกันห้องสมุดมีอิสระ ตัวอย่างเช่น Dataframes ของ Pandas เพิ่งรวมเข้ากับ Statsmodels ไม่มีความสัมพันธ์ระหว่าง sklearn และ Pandas (ยัง)

  2. กำหนดฟังก์ชั่น พวกเขาทั้งหมดทำงาน ถ้าคุณหมายถึงสิ่งที่มีประโยชน์ที่สุดมันก็ขึ้นอยู่กับใบสมัครของคุณ ฉันจะให้ +1 ของ Pandas กับที่นี่อย่างแน่นอนเนื่องจากมันได้เพิ่มโครงสร้างข้อมูลใหม่ที่ยอดเยี่ยมให้กับ Python (ดาต้าเฟรม) หมีแพนด้าก็น่าจะมี API ที่ดีที่สุด

  3. พวกเขาทั้งหมดได้รับการสนับสนุนอย่างแข็งขันแม้ว่าฉันจะบอกว่า Pandas มีฐานรหัสที่ดีที่สุด Sklearn และ Pandas นั้นคล่องแคล่วกว่า Statsmodels

  4. ตัวเลือกที่ชัดเจนคือ Sklearn เป็นวิธีที่ง่ายและชัดเจน

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

5
อย่าลืมอ่านคำอธิบายที่ยาวขึ้นด้านล่าง!
dartdog

4
คำตอบนี้ละเลยที่จะอธิบายว่า Pandas ส่วนใหญ่สำหรับการจัดการข้อมูล (เช่นการจัดทำดัชนีการเลือกการรวม) ในขณะที่อีกสองแบบสำหรับการสร้างแบบจำลอง (เช่นการทำนายหรือการอนุมาน)
นาธานโกลด์

ฉันใช้ sklearn มานานกว่าหนึ่งปีแล้วและมันก็ยอดเยี่ยมมากตอนนี้โปรเจ็กต์นั้นโตขึ้นฉันรู้สึกว่าจำเป็นต้องใช้โครงสร้างข้อมูลที่ยอดเยี่ยมของ Pandas ดังนั้นฉันคิดว่ามันสมบูรณ์ในระยะยาว
dashesy

บางทีนี่อาจจะมีการเปลี่ยนแปลงเมื่อเร็ว ๆ นี้ แต่ในคำสั่งนำเข้ามันควรจะเป็นlinear_model(เอกพจน์) linear_modelsและไม่ใช่
Vishal

75

ฉันต้องการที่จะมีคุณสมบัติและชี้แจงคำตอบที่ได้รับการยอมรับเล็กน้อย

แพ็คเกจทั้งสามนั้นเสริมซึ่งกันและกันเนื่องจากครอบคลุมพื้นที่ต่าง ๆ มีวัตถุประสงค์หลักที่แตกต่างกันหรือเน้นพื้นที่ต่าง ๆ ในการเรียนรู้ / สถิติของเครื่อง

  • แพนด้าเป็นแพคเกจเพื่อจัดการและดำเนินการกับข้อมูลโดยตรง
  • scikit-learning กำลังทำการเรียนรู้ด้วยเครื่องโดยเน้นการสร้างแบบจำลองการทำนายด้วยข้อมูลที่มีขนาดใหญ่และห่าง
  • statsmodels กำลังทำสถิติและเศรษฐมิติ "แบบดั้งเดิม" โดยเน้นการประเมินพารามิเตอร์และการทดสอบทางสถิติ

statsmodels มี pandas เป็นการพึ่งพา pandas เลือกใช้ statsmodels สำหรับสถิติบางอย่าง statsmodels ใช้patsyเพื่อจัดทำอินเทอร์เฟซสูตรคล้ายกับโมเดลเป็น R

มีเหลื่อมซ้อนกันในแบบจำลองระหว่าง scikit-learn และ statsmodels แต่มีวัตถุประสงค์ที่แตกต่างกัน ดูตัวอย่างThe Two Cultures: สถิติกับการเรียนรู้ของเครื่อง?

เพิ่มเติมเกี่ยวกับสถิติรุ่น

statsmodels มีกิจกรรมการพัฒนาที่ต่ำที่สุดและรอบการปล่อยที่ยาวที่สุดของทั้งสาม statsmodels มีผู้สนับสนุนมากมาย แต่น่าเสียดายที่ยังมี "ผู้ดูแล" เพียงสองคนเท่านั้น (ฉันเป็นหนึ่งในนั้น)

แกนหลักของสเตตัสโมเดลคือ "การเตรียมการผลิต": โมเดลเชิงเส้น, โมเดลเชิงเส้นที่แข็งแกร่ง, โมเดลเชิงเส้นทั่วไปและโมเดลที่ไม่ต่อเนื่องได้รับมาหลายปีแล้วและได้รับการตรวจสอบกับ Stata และอาร์ส การถดถอย VAR (vector autoregressive) ซึ่งไม่สามารถใช้ได้ในแพ็คเกจหลามอื่น ๆ

ตัวอย่างบางส่วนที่จะแสดงความแตกต่างเฉพาะระหว่างวิธีการเรียนรู้ของเครื่องใน Scikit-Learn และวิธีการทางสถิติและเศรษฐมิติในรูปแบบสถิติ:

การถดถอยเชิงเส้นอย่างง่ายOLSมีจำนวนมากของการวิเคราะห์หลังการประเมิน http://statsmodels.sourceforge.net/devel/generated/statsmodels.regression.linear_model.OLSResults.htmlรวมถึงการทดสอบเกี่ยวกับพารามิเตอร์มาตรการนอกและการทดสอบคุณสมบัติhttp: / /statsmodels.sourceforge.net/devel/stats.html#residual-diagnostics-and-specification-tests

การถดถอยโลจิสติกสามารถทำได้ในLogitรูปแบบสถิติไม่ว่าจะเป็นรูปแบบในการแยกหรือเป็นครอบครัวในรูปแบบเชิงเส้นทั่วไป ( GLM) http://statsmodels.sourceforge.net/devel/glm.html#module-reference

GLMรวมถึงครอบครัวปกติรุ่นที่ไม่ต่อเนื่องประกอบด้วยนอกจากLogitนี้Probitการถดถอยหลายส่วนและการนับ

logit

การใช้Logitนั้นง่ายเหมือน 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.