我很难理解weight
中xgb.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_weight
是sumneg
的函数,它是weight
的函数,它是a previously defined weight (column 32)
的函数。所以我很困惑。
作者在以下行中做了什么:weight <- as.numeric(dtrain[[32]]) * testsize / length(label)
在weight
和xgb.DMatrix
中设置sum_pos_weight
有什么区别?
答案 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次,你想要他们的共同响应权重,特别提到事件发生的时间。
以下是使用权重的更多示例:
scale_pos_weight
。例如,假设您有一个分类问题,其中5%的数据为1,95%的数据为0,您希望为每个正“事件”赋予更多权重。所以你可以设置scale_pos_weight = 19(或者作者写的:sumneg/sumpos
)
至于“作者”重新定义体重。如果没有完整的代码我不知道他在那里做了什么,但我认为他正在对权重做一些归一化。