XGBoost可以帮助用户分析问题,可以在软件解决很多科学问题,您可以在设计数据处理软件以及设计科学统计软件的时候添加XGBoost,让软件帮助用户分析庞大的数据,只要您的内存足够软件就可以处理任意体积的数据,可以对几百万种数据处理,可以解决几十亿问题,无论是数学问题还是科学问题都可以通过这款软件配置相关的算法提升计算能力,您将软件移植到各种环境运行,可以添加到不同的计算平台运行,分布式的运行方案,可以让您在不同的平台处理数据,XGBoost的模型和数据也是可以移植的,这意味着您可以使用R训练模型,同时使用Java或C ++运行,这在生产系统中更为常见!
XGBoost软件功能
XGBoost是经过优化的分布式梯度提升库,旨在高效,灵活且可移植。它在Gradient Boosting框架下实现了机器学习算法。XGBoost提供了并行树增强(也称为GBDT,GBM),可快速准确地解决许多数据科学问题。相同的代码在主要的分布式环境(Hadoop,SGE,MPI)上运行,并且可以解决数十亿个示例之外的问题。
现在,我们提供了一个简单的界面,可通过指定一系列增强来对切片树模型进行切片。可以通过切片接口将树分为多个子。
另外,提早停止的回调现在支持`save_best`选项。启用后,XGBoost将在最佳增强回合中保存(持久)模型,并丢弃最佳回合后适合的树。
特征(列)的加权子采样(#52)
现在可以通过加权子采样对要素(列)进行采样,其中更有可能在样本中选择权重较高的要素。加权二次采样使您可以通过选择树拆分中的一组特定功能来对领域知识进行编码。此外,通过将零权重分配给特定特征,可以防止将其用于任何拆分中。
XGBoost新版特色
能改进
多核CPU上的各种能改进
-将DMatx的构建时间优化了3.7倍。
-CPU能最多可提高3.6倍。
-优化CPU图减少所有稀疏数据
-为BuildHist分配线程本地内存,从而使速度提高了1.7倍。
-禁用用于创建DMatx的超线程(#6386)。这样可以将DMatx创建速度提高2倍。
-中静态表皮的简单修复
统一线程配置,以轻松利用所有CPU内核
[jvm-packages]清除确定分区的计算方式
通过实现侵入指针类(#6129)来加快ON序列化。从而使能提高1.5到2倍。
XGBoost教程
功能交互约束
决策树是发现自变量(功能)之间相互作用的强大工具。由于子节点的条件是根据父节点的条件来确定的,因此遍历路径中一起出现的变量将相互交互。例如,下图中突出显示的红色路径包含三个变量:(x_1), (x_7), 和 (x_{10}),因此突出显示的(在突出显示的叶节点处)是 (x_1), (x_7), 和 (x_{10})。
当树的深度大于1时,许多变量将在最小化训练损失的唯一基上进行交互,并且结果决策树可能捕获了虚假的关系(噪声),而不是概括了不同数据集的合法关系。功能交互约束 使用户可以决定允许哪些变量进行交互,哪些不进行交互。
潜在的好处包括:
通过专注于有效的交互,无论是通过特定领域的知识还是通过对交互进行排名的算法,都能获得更好的能
中的噪音更少;更好的概括
用户可以更好地控制模型的适用范围。例如,由于规章限制,即使交互表现良好,用户也可能希望排除一些交互
一个简单的例子
特征交互约束是根据允许交互的变量组来表达的。例如,约束 表明变量[0, 1](x_0) 和 (x_1)允许彼此交互,但没有其他变量。同样, 表示[2, 3, 4](x_2), (x_3), 和 (x_4)允许彼此交互,但没有其他变量。一组功能交互约束表示为嵌套列表,例如 ,其中每个内部列表是一组允许彼此交互的功能索引。[[0, 1], [2, 3, 4]]
在下面的图中,左侧决策树违反第一约束(的),而正确的决定树符合所述第一和第二约束条件两者(,)。[0, 1][0, 1][2, 3, 4]
执行功能互动的制约作用XGBoost
在XGBoost中强制执行功能交互约束非常简单。在这里,我们将给出一个使用Python的示例,但相同的基本思想可以推广到其他平台。
假设以下代码适合您的模型,但没有要素交互约束:
,使用要素交互约束进行拟合仅需要添加一个参数:
树木构造算法的选择。要使用功能的互动的约束,一定要设定的tree_method参数为以下之一:exact,hist,appx或gpu_hist。支持gpu_hist和appx仅在1.0.0中添加。
高级主题
交互约束背后的直觉很简单。用户具有关于不同特征之间关系的先验知识,并将其编码为模型构建期间的约束。但是围绕指定约束也有一些微妙之处。采取约束作为一个例子,第二特征出现在两个不同的交互集和这样的联合组特征允许与交互,是。在下图中,根在feature处。因为它的所有后代都应该能够与之交互,所以在第二层,所有4个特征都是合法的分割候选者,可以进行进一步的分割,而无需考虑指定的约束集。[[1, 2], [2, 3, 4]][1, 2][2, 3, 4]2{1, 3, 4}2
这导致了特征交互约束的一些有趣的含义。以 作为另一个例子。假设我们的训练数据集中只有3个可用功能用于表示,那么细心的读者可能会发现上述约束与相同。由于无论在根节点中选择哪个功能进行拆分,其所有后代都必须将每个功能都包括在内作为合法的拆分候选,以避免违反交互约束。[[0, 1], [0, 1, 2], [1, 2]][0, 1, 2]
在最后一个示例中,我们使用并选择特征作为根节点的拆分。在构建树的第二层,是唯一合法的拆分候选对象,因为它属于同一约束集,因此它本身就是唯一的候选对象。按照下面示例树的增长路径,第二层的节点在feature处分割。但是由于事实也属于第二约束集,因此在第三层,我们需要将所有要素都包括在内以符合其上升要求。[[0, 1], [1, 3, 4]]01011[1, 3, 4]
近期热门