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

相关文章

Python与Java交互出现乱码的问题解决

《Python与Java交互出现乱码的问题解决》在现代软件开发中,跨语言系统的集成已经成为日常工作的一部分,特别是当Python和Java之间进行交互时,编码问题往往会成为导致数据传输错误、乱码以及难... 目录背景:为什么会出现乱码问题产生的场景解决方案:确保统一的UTF-8编码完整代码示例总结在现代软件

MySQL数据库约束深入详解

《MySQL数据库约束深入详解》:本文主要介绍MySQL数据库约束,在MySQL数据库中,约束是用来限制进入表中的数据类型的一种技术,通过使用约束,可以确保数据的准确性、完整性和可靠性,需要的朋友... 目录一、数据库约束的概念二、约束类型三、NOT NULL 非空约束四、DEFAULT 默认值约束五、UN

SpringMVC 通过ajax 前后端数据交互的实现方法

《SpringMVC通过ajax前后端数据交互的实现方法》:本文主要介绍SpringMVC通过ajax前后端数据交互的实现方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价... 在前端的开发过程中,经常在html页面通过AJAX进行前后端数据的交互,SpringMVC的controll

C# Where 泛型约束的实现

《C#Where泛型约束的实现》本文主要介绍了C#Where泛型约束的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录使用的对象约束分类where T : structwhere T : classwhere T : ne

SpringValidation数据校验之约束注解与分组校验方式

《SpringValidation数据校验之约束注解与分组校验方式》本文将深入探讨SpringValidation的核心功能,帮助开发者掌握约束注解的使用技巧和分组校验的高级应用,从而构建更加健壮和可... 目录引言一、Spring Validation基础架构1.1 jsR-380标准与Spring整合1

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

基于WinForm+Halcon实现图像缩放与交互功能

《基于WinForm+Halcon实现图像缩放与交互功能》本文主要讲述在WinForm中结合Halcon实现图像缩放、平移及实时显示灰度值等交互功能,包括初始化窗口的不同方式,以及通过特定事件添加相应... 目录前言初始化窗口添加图像缩放功能添加图像平移功能添加实时显示灰度值功能示例代码总结最后前言本文将

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