假设我们有一个高度不平衡的二进制分类问题。现在,XGBoost为我们提供了2个选项来管理培训期间的班级失衡。一种是使用参数scale_pos_weight,而另一种是使用DMatrix的weights参数。
例如-我可以使用-params = {'scale_pos_weight':某些值}或者我可以在创建DMatrix时给类权重,例如-xgb = xgb.DMatrix(功能,目标,权重)
有人能解释一下这两种情况之间的区别吗?两种情况下的分数有何不同?
如the (python) documentation中所述,scale_pos_weight
是浮点数(即单个值),可用于调整分类阈值。即调整模型在整个数据集中预测正值或负值的趋势。
DMatrix
的weight
参数需要一个类似数组的对象,并用于指定“ 每个实例的重量”。这允许对分类器如何进行预测进行更多控制,因为每个权重都用于缩放正在优化的损失函数。
为了使这种区别更具体,假设我们正在尝试预测两种情况下图片中猫的存在。
在这种情况下,我们的数据集由只带有猫或完全没有动物的图像组成。数据集不平衡,大多数图像没有动物。在这里,我们可以使用scale_pos_weight
来增加正(带猫)图像的权重以应对不平衡。
[通常,我们倾向于将scale_pos_weight
设置为与不平衡成比例。例如,如果20%的图像包含猫,则可以将scale_positive_weight
设置为4
。
在这种情况下,我们的数据集再次受到猫和无猫图像比例相似的失衡。但是,这次它还包含一些与狗有关的图像。潜在地,我们的分类器可能倾向于将狗误认为猫,从而降低其性能,且假阳性率更高。在这种情况下,我们可能希望使用DMatrix
的weight
参数指定每个样本的权重。实际上,我们将尝试惩罚与狗相关的假阳性,如果将单个因素应用于总分类阈值,这是不可能的。