Панды / Statsmodel / Scikit-Learn

41
  1. Являются ли Pandas, Statsmodels и Scikit-learn разными реализациями машинного обучения / статистических операций, или они дополняют друг друга?

  2. Какой из них обладает наиболее полной функциональностью?

  3. Какой из них активно разрабатывается и / или поддерживается?

  4. Я должен осуществить логистическую регрессию. Любые предложения относительно того, что из этого я должен использовать?

Nik
источник

Ответы:

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

  2. Определить функциональность. Они все бегут. Если вы имеете в виду, что является наиболее полезным, то это зависит от вашего приложения. Я определенно дал бы Pandas +1 здесь, поскольку он добавил отличную новую структуру данных в Python (dataframes). Панды также, вероятно, имеет лучший 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)
Cam.Davidson.Pilon
источник
5
Обязательно прочитайте более подробное объяснение ниже!
дартдог
4
Этот ответ пренебрегает объяснением того, что Pandas предназначен главным образом для манипулирования данными (например, индексация, выбор, агрегирование), в то время как два других - для построения моделей (например, для прогнозирования или вывода).
Натан Гулд
Я использую sklearn более года, и это было здорово, теперь, когда этот проект вырос, я чувствую необходимость использовать превосходные структуры данных Pandas, поэтому я считаю, что они дополняют друг друга в долгосрочной перспективе.
Дашеси
Возможно, это недавно изменилось, но в операторе импорта это должно быть linear_model(единственное), а не linear_models.
Вишал
75

Я хотел бы уточнить и немного уточнить принятый ответ.

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

  • Pandas - это, главным образом, пакет для обработки и работы непосредственно с данными.
  • scikit-learn делает машинное обучение с упором на прогнозное моделирование с часто большими и редкими данными
  • statsmodels занимается «традиционной» статистикой и эконометрикой, уделяя гораздо больше внимания оценке параметров и (статистическому) тестированию.

У statsmodels есть панды в качестве зависимости, панды по выбору используют statsmodels для некоторой статистики. statsmodels использует, patsyчтобы обеспечить интерфейс с аналогичной формулой, что и R.

В моделях между scikit-learn и statsmodels существует некоторое совпадение, но с разными целями. посмотрите, например, Две культуры: статистика против машинного обучения?

еще немного о statsmodels

statsmodels имеет самую низкую активность в разработке и самый длинный цикл выпуска из трех. У statsmodels есть много участников, но, к сожалению, только два «сопровождающих» (я один из них.)

Ядро statsmodels «готово к производству»: линейные модели, надежные линейные модели, обобщенные линейные модели и дискретные модели существуют уже несколько лет и проверены на соответствие Stata и R. statsmodels также имеет часть анализа временных рядов, охватывающую AR, ARMA и VAR (векторная авторегрессия) регрессия, недоступная ни в одном другом пакете Python.

Некоторые примеры, демонстрирующие некоторые специфические различия между подходом машинного обучения в scikit-learn и подходом статистики и эконометрики в statsmodels:

Простые линейная регрессия, 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

Логистическая регрессия может быть выполнена в statsmodels либо как 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
Josef
источник