Answers:
在列出的三个中,Scikit-learn(sklearn)是机器学习的最佳选择。虽然Pandas和Statsmodels确实包含一些预测性学习算法,但它们是隐藏的/尚未准备好投入生产。通常,由于作者将从事不同的项目,因此图书馆是免费的。例如,最近Pandas的数据框已集成到Statsmodels中。sklearn和Pandas之间的关系尚不存在(尚未)。
定义功能。他们都跑。如果您说的是最有用的,则取决于您的应用程序。我肯定会在这里给Pandas +1,因为它为Python(数据帧)添加了一个很棒的新数据结构。熊猫可能还拥有最好的API。
他们都得到了积极的支持,尽管我会说Pandas具有最好的代码库。Sklearn和Pandas比Statsmodels更活跃。
明确的选择是Sklearn。这很容易并且清楚如何执行。
from sklearn.linear_models import LogisticRegression as LR
logr = LR()
logr.fit( X, Y )
results = logr.predict( test_data)
linear_model
(单数)而不是linear_models
。
我想限定并澄清一个可以接受的答案。
这三个软件包彼此互补,因为它们涵盖了不同的领域,具有不同的主要目标或在机器学习/统计中强调了不同的领域。
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