熊猫/统计模型/ Scikit学习


41
  1. Pandas,Statsmodels和Scikit-learn是机器学习/统计操作的不同实现,还是彼此互补?

  2. 其中哪一个功能最全面?

  3. 积极开发和/或支持的是哪一个?

  4. 我必须实现逻辑回归。关于应该使用其中哪些建议?

Answers:


33
  1. 在列出的三个中,Scikit-learn(sklearn)是机器学习的最佳选择。虽然Pandas和Statsmodels确实包含一些预测性学习算法,但它们是隐藏的/尚未准备好投入生产。通常,由于作者将从事不同的项目,因此图书馆是免费的。例如,最近Pandas的数据框已集成到Statsmodels中。sklearn和Pandas之间的关系尚不存在(尚未)。

  2. 定义功能。他们都跑。如果您说的是最有用的,则取决于您的应用程序。我肯定会在这里给Pandas +1,因为它为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出色的数据结构,因此我认为它们在长期内是互补的。
破旧的

也许这是最近改变的,但是在import语句中,它应该是linear_model(单数)而不是linear_models
维沙尔

75

我想限定并澄清一个可以接受的答案。

这三个软件包彼此互补,因为它们涵盖了不同的领域,具有不同的主要目标或在机器学习/统计中强调了不同的领域。

  • pandas主要是用于处理和直接处理数据的软件包。
  • scikit-learn正在进行机器学习,重点是对经常有大量稀疏数据的预测建模
  • statsmodels正在执行“传统”统计和计量经济学,并且更加注重参数估计和(统计)测试。

statsmodels将pandas作为依赖项,pandas可以选择使用statsmodels进行某些统计。statsmodels patsy用于为模型提供与R类似的公式接口。

scikit-learn模型和stats模型之间的模型有些重叠,但是目标不同。参见例如两种文化:统计与机器学习?

有关statsmodels的更多信息

statsmodels具有最低的开发活动和最长的发布周期。statsmodels有很多贡献者,但不幸的是仍然只有两个“维护者”(我是其中之一)。

statsmodels的核心是“生产准备就绪”:线性模型,鲁棒线性模型,广义线性模型和离散模型已经存在了数年,并已通过Stata和R进行了验证。statsmodels还具有时间序列分析部分,涵盖AR,ARMA和VAR(向量自回归)回归,在任何其他python软件包中均不可用。

一些示例显示scikit-learn中的机器学习方法与statsmodels中的统计和计量经济学方法之间的一些特定区别:

简单的线性回归OLS具有大量的估计后分析 http://statsmodels.sourceforge.net/devel/generation/statsmodels.regression.linear_model.OLSResults.html,包括参数测试,离群度量和规格测试http:/// /statsmodels.sourceforge.net/devel/stats.html#residual-diagnostics-and-specification-tests

Logistic回归可以在stats Logit模型中完成,既可以作为离散模型也可以作为广义线性模型中的族(GLM)。http://statsmodels.sourceforge.net/devel/glm.html#module-reference

GLM包括通常的族,离散模型Logit还包含Probit,多项式和计数回归。

洛吉特

使用Logit就像http://statsmodels.sourceforge.net/devel/examples/genic/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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.