Pandas / Statsmodel / Scikit-learn


41
  1. Чи різні програми Pandas, Statsmodels та Scikit вчаться в машинному навчанні / статистичних операціях, або вони доповнюють одна одну?

  2. Який із них має найповніший функціонал?

  3. Який із них активно розробляється та / або підтримується?

  4. Я маю здійснити логістичну регресію. Будь-які пропозиції щодо того, який із них я повинен використовувати?

Відповіді:


33
  1. Scikit-learn (sklearn) - найкращий вибір для машинного навчання з трьох перерахованих. Хоча Pandas і Statsmodels містять деякі алгоритми прогнозування навчання, вони приховані / ще не готові до виробництва. Часто, оскільки автори працюватимуть над різними проектами, бібліотеки є безкоштовними. Наприклад, нещодавно рамки даних Pandas були інтегровані в Statsmodels. Зв'язку між склеарном та Пандами поки що немає.

  2. Визначте функціональність. Всі вони біжать. Якщо ви маєте на увазі те, що є найкориснішим, то це залежить від вашої заявки. Я б напевно дав тут Pandas +1, оскільки він додав нову структуру даних Python (dataframes). Pandas також, мабуть, має найкращий API.

  3. Всі вони активно підтримуються, хоча, я б сказав, Pandas має найкращу базу коду. Sklearn і Pandas активніші, ніж Statsmodels.

  4. Ясний вибір - Склеарн. Легко і зрозуміло, як це виконати.

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

5
Обов’язково прочитайте довше пояснення нижче!
дартдог

4
Ця відповідь нехтує поясненням, що Pandas - це головним чином для обробки даних (наприклад, індексація, вибір, агрегація), тоді як інші два - для побудови моделей (наприклад, для прогнозування або умовиводу).
Натан Гулд,

Я використовую sklearn вже більше року, і це було чудово, тепер, коли проект розростається, я відчуваю необхідність використовувати відмінні структури даних Pandas, тому я думаю, що вони доповнюють себе в довгостроковій перспективі.
тире

Можливо, це нещодавно змінилося, але в заяві про імпорт це має бути linear_model(сингулярно), а не linear_models.
Вішал

75

Я хотів би кваліфікувати та трохи уточнити прийняту відповідь.

Три пакети є взаємодоповнюючими один одного, оскільки охоплюють різні сфери, мають різні основні цілі або наголошують на різних областях машинного навчання / статистики.

  • панди - це в основному пакет для обробки та керування безпосередньо над даними.
  • scikit-learn - це машинне навчання з акцентом на прогностичному моделюванні з часто великими і розрідженими даними
  • statsmodels займається "традиційною" статистикою та економетрикою, при цьому значно сильніше акцентується на оцінці параметрів та (статистичному) тестуванні.

statsmodels має панди як залежність, pandas необов'язково використовує статистичні моделі для деяких статистичних даних. statsmodels використовує patsyдля надання аналогічного інтерфейсу формули для моделей, як Р.

Існує деяке перекриття в моделях між науками і навчальними моделями, але з різними цілями. див. для прикладу Дві культури: статистика проти машинного навчання?

ще кілька про статистичні моделі

statsmodels має найнижчу активність розробки та найдовший цикл випуску з цих трьох. statsmodels має багато учасників, але, на жаль, досі лише два "обслуговуючі" (я один з них.)

Основою статистичних моделей є «готові до виробництва»: лінійні моделі, надійні лінійні моделі, узагальнені лінійні моделі та дискретні моделі існують вже декілька років, і вони перевірені щодо Stata та R. Statsmodels також має частину аналізу часових рядів, що охоплює AR, ARMA та VAR (вектор авторегресивної) регресії, які відсутні в будь-якому іншому пакеті python.

Деякі приклади, які показують деякі специфічні відмінності між підходом до машинного навчання у науковому навчанні та підходом статистики та економетрики в статистичних моделях:

Проста лінійна регресія, 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само просто, як це 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.