了解 scikit-learn 中用于 XGBoost 排名的组

问题描述

当涉及到 sklearn 数据准备和 XGBoost 回归参数中的组时,我觉得我真的遗漏了一些明显的东西。

我已经阅读了本教程:https://medium.com/predictly-on-tech/learning-to-rank-using-xgboost-83de0166229d

以及 XGBRanker 文档。

究竟什么是组?它是数据集的任意块吗?它提到组对于确保您在教程中具有“数据集中的一列,告诉我们哪些数据点应该与哪些数据点进行比较”很重要,但我的理解是 sklearn 的 train_test_split 保留了训练集和测试集之间的行跨越这两个特征(X) 和标签 (y)。

我的代码使用 train_test_split() 就像您的标准数据准备过程用于分类一样,即:

X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.3,stratify=X[<label column name>].values)

我需要更改什么才能添加群组?它提到我也可以只使用查询 ID,我是否应该在拆分前向数据添加一个随机生成查询 ID 的列?

解决方法

在学习排名中,您只关心在每个组内的排名。这通常在搜索结果的上下文中描述:组是给定查询的匹配项。在您链接的文章中,一个群体是一个给定的种族。

如果您不知道自己的组是什么,那么您可能不会处于学习排名的状态,也许更直接的分类或回归会更适合。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...