xgb.DMatrix中的权重参数与超级参数列表中的scale_pos_weight之间的差异?

时间:2018-03-28 12:47:04

标签: machine-learning xgboost

我很难理解weightxgb.DMatrix函数与sum_pos_weight列表中param参数之间的区别。我正在浏览使用希格斯数据的以下code;

由于数据不平衡,作者定义了一个权重参数:

weight <- as.numeric(dtrain[[32]]) * testsize / length(label)

sumwpos <- sum(weight * (label==1.0))
sumwneg <- sum(weight * (label==0.0))

但是第32列已经是weight变量,所以作者正在修改已定义的权重变量?

然后,修改后的weight变量被设置为xgb.DMatrix的“权重”参数:

xgmat <- xgb.DMatrix(data, label = label, weight = weight, missing = -999.0)

此外,在参数列表中,作者具有:"scale_pos_weight" = sumwneg / sumwpos,

因此scale_pos_weightsumneg的函数,它是weight的函数,它是a previously defined weight (column 32)的函数。所以我很困惑。

  1. 作者在以下行中做了什么:weight <- as.numeric(dtrain[[32]]) * testsize / length(label)

  2. weightxgb.DMatrix中设置sum_pos_weight有什么区别?

1 个答案:

答案 0 :(得分:1)

设置

xgmat <- xgb.DMatrix(data, label = label, weight = weight, missing = -999.0)

weight应该是与您的数据行相对应的向量

例如,如果您有以下数据:

  A B C
1 1 1 1
2 2 2 2

您需要将weight设置为2个权重的向量

weight <- c(1, 2)

因此,第一项赛事的权重为1,第二项赛事的权重为2。你问自己为什么这么好?假设事件1发生了1次,事件2发生了2次,你想要他们的共同响应权重,特别提到事件发生的时间。

以下是使用权重的更多示例:

  1. 如果您希望最近的活动有更多“价值”
  2. 您对数据行的信心。您将所有权重设置为0到1之间,权重将表示您对该数据的确定程度。例如,如果权重= 0.88,则表示该行为88%置信度
  3. 如果您有重复性事件。而不是创建更多的行,你可以设置一次,并给他们一个权重作为他们重复的数字
  4. 当您拥有“不平衡数据”时,通常会使用

    scale_pos_weight。例如,假设您有一个分类问题,其中5%的数据为1,95%的数据为0,您希望为每个“事件”赋予更多权重。所以你可以设置scale_pos_weight = 19(或者作者写的:sumneg/sumpos

    至于“作者”重新定义体重。如果没有完整的代码我不知道他在那里做了什么,但我认为他正在对权重做一些归一化。