XGB-7: 特征交互约束

2024-02-20 21:04
文章标签 特征 交互 约束 xgb

本文主要是介绍XGB-7: 特征交互约束,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

决策树是发现自变量(特征)之间交互关系的强大工具。在遍历路径中一起出现的变量是相互交互的,因为子节点的条件取决于父节点的条件。例如,在下图中,红色突出显示的路径包含三个变量: x 1 x_1 x1 x 7 x_7 x7 x 10 x_{10} x10,因此突出显示的预测值(在突出显示的叶节点处)是 x 1 x_1 x1 x 7 x_7 x7 x 10 x_{10} x10 之间交互的产物。

在这里插入图片描述

当树的深度大于1时,许多变量仅基于最小化训练损失相互作用,导致的决策树可能捕捉到虚假关系(噪音),而不是跨不同数据集泛化的合法关系。特征交互约束允许用户决定哪些变量可以相互作用,哪些不能。

潜在的好处包括:

  • 通过专业领域知识或对交互作用进行排名的算法,更好的预测性能
  • 预测中更少的噪音;更好的泛化效果
  • 用户对模型能够拟合的内容有更多控制。例如,用户可能希望排除一些交互作用,即使它们表现良好,也受到监管约束的影响。

简单示例

特征交互约束以允许相互作用的变量组的形式表达。例如,约束[0, 1]表示变量 x 0 x_0 x0 x 1 x_1 x1
允许相互作用,但不能与其他变量相互作用。类似地,[2, 3, 4]表示 , x 2 , x 3 x_2,x_3 x2,x3 x 4 x_4 x4
可以相互作用,但不能与其他变量相互作用。一组特征交互约束表示为一个嵌套列表,例如[[0, 1], [2, 3, 4]],其中每个内部列表是允许相互作用的特征的索引组

在下图中,左侧的决策树违反了第一个约束([0, 1]),而右侧的决策树遵守了第一个和第二个约束([0, 1],[2, 3, 4])。

KozgJ.png

在 XGBoost 中实施特征交互约束

强制执行特征交互约束在XGBoost中非常简单。在这里,将使用Python给出一个示例,但相同的思想可以推广到其他平台。

假设以下代码适应模型而没有特征交互约束:

model_no_constraints = xgb.train(params,dtrain,num_boost_round=1000,evals=evallist,early_stopping_rounds=10)

然后,仅需要添加一个参数即可使用特征交互约束进行拟合:

params_constrained = params.copy()
# Use nested list to define feature interaction constraints
params_constrained['interaction_constraints'] = '[[0, 2], [1, 3, 4], [5, 6]]'
# Features 0 and 2 are allowed to interact with each other but with no other feature
# Features 1, 3, 4 are allowed to interact with one another but with no other feature
# Features 5 and 6 are allowed to interact with each other but with no other featuremodel_with_constraints = xgb.train(params_constrained,dtrain,num_boost_round=1000,evals=evallist,early_stopping_rounds=10)

使用特征名称代替

XGBoost的Python包支持使用特征名称而不是特征索引来指定约束条件。假设你有一个包含列["f0", "f1", "f2"]的数据框,可以将特征交互约束指定为[["f0", "f2"]]

高级主题

交互约束背后的直觉很简单。用户可能对不同特征之间的关系有先验知识,并在模型构建过程中将其编码为约束。但在指定约束方面也有一些微妙之处。以约束[[1, 2], [2, 3, 4]]为例。第二个特征出现在两个不同的交互集中,[1, 2][2, 3, 4]。因此,与2允许互动的特征的并集是{1, 3, 4}。在以下图表中,根在特征2处分裂。因为所有后代都应该能够与它互动,所以在第二层,所有4个特征都是合法的分裂候选项。乍一看,这可能看起来像是忽略了指定的约束集,但实际上并非如此。

https://xgboost.readthedocs.io/en/latest/_images/feature_interaction_illustration4.png

{1,2,3,4}表示合法的分割特征集。

这导致了特征交互约束的一些有趣影响。以[[0, 1], [0, 1, 2], [1, 2]]为例。假设训练数据集中只有3个可用特征以便演示,仔细的读者可能已经发现上述约束与简单的[[0, 1, 2]]相同。因为无论选择哪个特征进行根节点的分裂,所有后代都被允许将每个特征作为合法的分裂候选项,而不违反交互约束。

最后一个例子,使用[[0, 1], [1, 3, 4]],并选择特征0作为根节点的分裂。在构建树的第二层,1是唯一的合法分裂候选项,除了0本身,因为它们属于相同的约束集。根据我们示例树的生长路径,第二层的节点在特征1处分裂。但由于1也属于第二个约束集[1, 3, 4],在第三层,允许将所有特征包括为分裂候选项,仍然符合其祖先的交互约束。

https://xgboost.readthedocs.io/en/latest/_images/feature_interaction_illustration6.png

{0, 1, 3, 4} 表示合法分割特征的集合。

参考

  • https://xgboost.readthedocs.io/en/latest/tutorials/feature_interaction_constraint.html

这篇关于XGB-7: 特征交互约束的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/729532

相关文章

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

poj 3159 (spfa差分约束最短路) poj 1201

poj 3159: 题意: 每次给出b比a多不多于c个糖果,求n最多比1多多少个糖果。 解析: 差分约束。 这个博客讲差分约束讲的比较好: http://www.cnblogs.com/void/archive/2011/08/26/2153928.html 套个spfa。 代码: #include <iostream>#include <cstdio>#i

poj 3169 spfa 差分约束

题意: 给n只牛,这些牛有些关系。 ml个关系:fr 与 to 牛间的距离要小于等于 cost。 md个关系:fr 与 to 牛间的距离要大于等于 cost。 隐含关系: d[ i ] <= d[ i + 1 ] 解析: 用以上关系建图,求1-n间最短路即可。 新学了一种建图的方法。。。。。。 代码: #include <iostream>#include

POJ 1364差分约束

给出n个变量,m个约束公式 Sa + Sa+1 + .... + Sa+b < ki or > ki ,叫你判断是否存在着解满足这m组约束公式。 Sa + Sa+1   +   .+ Sa+b =  Sum[a+b] - Sum[a-1]  . 注意加入源点n+1 。 public class Main {public static void main(Strin

uniapp设置微信小程序的交互反馈

链接:uni.showToast(OBJECT) | uni-app官网 (dcloud.net.cn) 设置操作成功的弹窗: title是我们弹窗提示的文字 showToast是我们在加载的时候进入就会弹出的提示。 2.设置失败的提示窗口和标签 icon:'error'是设置我们失败的logo 设置的文字上限是7个文字,如果需要设置的提示文字过长就需要设置icon并给

OmniGlue论文详解(特征匹配)

OmniGlue论文详解(特征匹配) 摘要1. 引言2. 相关工作2.1. 广义局部特征匹配2.2. 稀疏可学习匹配2.3. 半稠密可学习匹配2.4. 与其他图像表示匹配 3. OmniGlue3.1. 模型概述3.2. OmniGlue 细节3.2.1. 特征提取3.2.2. 利用DINOv2构建图形。3.2.3. 信息传播与新的指导3.2.4. 匹配层和损失函数3.2.5. 与Super

创建表时添加约束

查询表中的约束信息: SHOW KEYS FROM 表名; 示例: 创建depts表包含department_id该列为主键自动增长,department_name列不允许重复,location_id列不允许有空值。 create table depts(department_id int primary key auto_increment,department_name varcha

《计算机视觉工程师养成计划》 ·数字图像处理·数字图像处理特征·概述~

1 定义         从哲学角度看:特征是从事物当中抽象出来用于区别其他类别事物的属性集合,图像特征则是从图像中抽取出来用于区别其他类别图像的属性集合。         从获取方式看:图像特征是通过对图像进行测量或借助算法计算得到的一组表达特性集合的向量。 2 认识         有些特征是视觉直观感受到的自然特征,例如亮度、边缘轮廓、纹理、色彩等。         有些特征需要通

HalconDotNet中的图像特征与提取详解

文章目录 简介一、边缘特征提取二、角点特征提取三、区域特征提取四、纹理特征提取五、形状特征提取 简介   图像特征提取是图像处理中的一个重要步骤,用于从图像中提取有意义的特征,以便进行进一步的分析和处理。HalconDotNet提供了多种图像特征提取方法,每种方法都有其特定的应用场景和优缺点。 一、边缘特征提取   边缘特征提取是图像处理中最基本的特征提取方法之一,通过检

Kubernetes 之 kubelet 与 CRI、CNI 的交互过程

序言 当一个新的 Pod 被提交创建之后,Kubelet、CRI、CNI 这三个组件之间进行了哪些交互? Kubelet -> CRI -> CNI 如上图所示: Kubelet 从 kube-api-server 处监听到有新的 pod 被调度到了自己的节点且需要创建。Kubelet 创建 sandbox 并配置好 Pod 的环境,其中包括: Kubelet 通过 gRPC 调用 C