Xgboost: 方法(文档)歧义

创建于 2015-11-25  ·  3评论  ·  资料来源: dmlc/xgboost

嗨,我正在尝试了解 xgboost 模型训练方法。 我的意思如下。 我可以使用 Booster 并调用 xgb.train 或者我可以使用 sklearn API 来使用分类器/回归器。 在以前的方法中(根据 xgboost 文档)我需要指定提升迭代次数并且不指定任何数量的树的问题,而在后来我确实指定了要适合的提升树的数量,但我没有任何选择指定提升迭代的次数。 提升迭代次数是估计器的数量吗? 有人可以澄清这一点吗?

如果我正确阅读代码,sklearn API 使用内部 booster,因此我可以将 clf._Booster 分配给我的 xgb.train,其中 n_estimators 等于 boosted 轮数。 而且,如果已经进行了这样的分配,我不需要调用 clf.fit。 我对吗? 如果是这样,是否可以调整文档以明确说明 n_estimators 是用于 xgb.train 的 num_rounds。

最好有文档来解释低级助推器方法和 sklearn API 之间的确切关系,我知道稍后会调用前一个,但最好了解它是如何完成的并在文档中澄清这一点以避免混淆最终- 用户。

最有用的评论

嗨,弗拉基米尔,

一般来说,Boosting 是一种元算法,它迭代地(或在“轮次”中)训练一系列简单/弱学习器(或估计器),以使整个组合表现更好。 可能有各种弱学习器,而不仅仅是树。 例如,xgboost 有树和(广义)线性模型选项。 奇怪的是,xgboost 中的这些弱学习器被称为“助推器”,整个组合模型被称为“学习器”。 当我最初阅读 xgboost 的文档和代码时,这让我有点困惑,因为它与我自己对术语的心理印象相反。

虽然在与同一主题相关的不同项目之间拥有一致的命名法并拥有一致的高质量交叉链接文档会很好,但这并不总是可行或易于维护,尤其是在开源项目中。 新手用户往往主要使用单一界面。 熟悉主题的用户将能够轻松地映射共性。 无论谁关心底层细节,他们通常都足够关心阅读代码。

至于您的具体问题,您没有看错,sklearn 包装器代码 [1] 中的 n_estimators 参数映射到 train [2] 中的 num_boost_round。 但是,作为最终用户,您为什么要以这种方式破解 sklearn 包装器对象? 要以可控的方式执行此操作,您必须非常了解包装器代码。

[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

所有3条评论

嗨,弗拉基米尔,

一般来说,Boosting 是一种元算法,它迭代地(或在“轮次”中)训练一系列简单/弱学习器(或估计器),以使整个组合表现更好。 可能有各种弱学习器,而不仅仅是树。 例如,xgboost 有树和(广义)线性模型选项。 奇怪的是,xgboost 中的这些弱学习器被称为“助推器”,整个组合模型被称为“学习器”。 当我最初阅读 xgboost 的文档和代码时,这让我有点困惑,因为它与我自己对术语的心理印象相反。

虽然在与同一主题相关的不同项目之间拥有一致的命名法并拥有一致的高质量交叉链接文档会很好,但这并不总是可行或易于维护,尤其是在开源项目中。 新手用户往往主要使用单一界面。 熟悉主题的用户将能够轻松地映射共性。 无论谁关心底层细节,他们通常都足够关心阅读代码。

至于您的具体问题,您没有看错,sklearn 包装器代码 [1] 中的 n_estimators 参数映射到 train [2] 中的 num_boost_round。 但是,作为最终用户,您为什么要以这种方式破解 sklearn 包装器对象? 要以可控的方式执行此操作,您必须非常了解包装器代码。

[1] https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2] https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12

R 有同样的问题吗?

2015 年 11 月 26 日星期四上午 11:39,Vadim Khotilovich <
[email protected]> 写道:

嗨,弗拉基米尔,

一般来说,Boosting 是一种元算法,它迭代地(或在
"rounds") 以这样的方式训练一系列简单/弱学习器(或估计器)
一种使整个组合表现更好的方式。 可以有各种
各种弱学习器,不仅仅是树。 例如,xgboost 有树和
(广义)线性模型选项。 奇怪的是,这些弱学习者在
xgboost被称为“助推器”,整个组合模型是
简称“学习者”。 这让我在最初的时候有点困惑
阅读 xgboost 的文档和代码,因为这与我自己的想法相反
术语的印记。

虽然在不同的术语之间使用一致的命名法会很好
与同一主题相关并具有一致高
高质量的交叉链接文档,这并不总是可行或容易的
可维护,尤其是在开源项目中。 新手用户倾向于
大多使用单一接口。 熟悉主题的用户
物质可以很容易地绘制出共性。 谁在乎
关于底层细节,他们通常足够关心阅读代码。

至于您的具体问题,您正在阅读 n_estimators
sklearn 包装器代码 [1] 中的参数映射到 num_boost_round
火车 [2]。 但是,为什么作为最终用户想要破解 sklearn
包装对象那样? 要以可控的方式做到这一点,您将有
更好地了解包装器代码。

[1]
https://github.com/dmlc/xgboost/blob/2859c190cd0d168df25e2a7ea2b1fd5211ce94f0/python-package/xgboost/sklearn.py#L185
[2]
https://github.com/dmlc/xgboost/blob/83e61bf99ec7d01607867b4e281da283230883b1/python-package/xgboost/training.py#L12


直接回复此邮件或在 GitHub 上查看
https://github.com/dmlc/xgboost/issues/651#issuecomment -159956213。

@khatilov ,感谢您的解释。 这足以满足我的需要,我会关闭票证。

此页面是否有帮助?
0 / 5 - 0 等级