从sklearn-style API of XGBClassifier,我们可以提供早期停止的评估示例。
eval_set (列表,可选) - 用作“X,y”对的列表 早期停止的验证集
但是,格式只提到了一对功能和标签。因此,如果文档准确无误,则无法为这些评估示例提供权重。
我错过了什么吗?
如果在sklearn风格中无法实现,是否支持原始(即非sklearn)XGBClassifier API?一个简短的例子会很好,因为我从未使用过那个版本的API。
答案 0 :(得分:1)
编辑 - 评论中的每次对话更新
鉴于您有一个目标变量代表实值增益/损失值,您希望将其归类为"增益"或者"损失",并且您希望确保分类器的验证集权衡最大的绝对值增益/损失,这里有两种可能的方法:
创建一个自定义分类器,它只是XGBoostRegressor提供给一个阈值,其中实值回归预测转换为1/0或"增益" /"损失"分类。此分类器的.fit()方法只调用xgbregressor的.fit(),而此分类器的.predict()方法将调用回归量的.predict(),然后返回阈值类别预测。
< / LI>你提到你想尝试加权验证集中记录的处理,但xgboost中没有这个选项。实现此方法的方法是实现自定义eval-metric
。但是,您指出eval_metric
必须能够一次返回单个标签/预测记录的分数,因此它不能接受所有行值并在eval指标中执行加权。您在评论中提到的解决方案是&#34;创建一个可调用的,它具有对所有验证示例的引用,将索引(而不是标签和分数)传递到eval_set,使用索引从内部获取标签和分数每个验证示例的可调用和返回指标。&#34;这也应该有效。
我倾向于选择选项1更直接,但尝试两种不同的方法并比较结果通常是一个好主意,如果你有时间,所以对这些结果感兴趣。
答案 1 :(得分:0)
截至几周前,fit
方法有一个新参数sample_weight_eval_set
,您可以执行此操作。它采用权重变量的列表,即每个评估集一个。我认为此功能尚未使其成为稳定版本,但是如果您从源代码编译xgboost,则现在可以使用。