超参数列表中 xgb.DMatrix 和 scale_pos_weight 中权重参数的区别?
Difference between the weight parameter in xgb.DMatrix and scale_pos_weight in hyper params list?
我有点难以理解 xgb.DMatrix
中的 weight
函数和 param
列表中的 sum_pos_weight
参数之间的区别。我正在浏览以下使用希格斯数据的 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
的"weight"参数:
xgmat <- xgb.DMatrix(data, label = label, weight = weight, missing = -999.0)
此外,作者在参数列表中有:"scale_pos_weight" = sumwneg / sumwpos,
.
所以 scale_pos_weight
是 sumneg
的函数,sumneg
是 weight
的函数,weight
是 a previously defined weight (column 32)
的函数。所以我很困惑。
作者在以下行中做了什么:weight <- as.numeric(dtrain[[32]]) * testsize / length(label)
在 xgb.DMatrix
和 sum_pos_weight
中设置 weight
有什么区别?
当你设置
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 次,您希望对它们进行共同响应权重,特别是提及事件发生的时间量。
以下是使用权重的更多示例:
- 如果你想让最近的活动有更多"value"
- 您对数据行的信心程度。您会将所有权重设置在 0 到 1 之间,权重将代表您对该数据的确定程度。例如,如果 weight = 0.88 你给了那行 88% 的置信度
- 如果您有重复性事件。无需创建更多行,您可以将它们设置一次并赋予它们一个权重作为它们重复的次数
scale_pos_weight
通常在你有"imbalanced data"时使用。例如,假设您有一个分类问题,其中 5% 的数据为 1,95% 的数据为 0,您希望为每个 positive "event"。所以你可以设置 scale_pos_weight = 19(或者像作者写的那样:sumneg/sumpos
)
至于"author"重新定义权重。如果没有完整的代码,我无法知道他在那里做了什么,但我假设他正在对权重进行某种标准化。
我有点难以理解 xgb.DMatrix
中的 weight
函数和 param
列表中的 sum_pos_weight
参数之间的区别。我正在浏览以下使用希格斯数据的 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
的"weight"参数:
xgmat <- xgb.DMatrix(data, label = label, weight = weight, missing = -999.0)
此外,作者在参数列表中有:"scale_pos_weight" = sumwneg / sumwpos,
.
所以 scale_pos_weight
是 sumneg
的函数,sumneg
是 weight
的函数,weight
是 a previously defined weight (column 32)
的函数。所以我很困惑。
作者在以下行中做了什么:
weight <- as.numeric(dtrain[[32]]) * testsize / length(label)
在
xgb.DMatrix
和sum_pos_weight
中设置weight
有什么区别?
当你设置
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 次,您希望对它们进行共同响应权重,特别是提及事件发生的时间量。
以下是使用权重的更多示例:
- 如果你想让最近的活动有更多"value"
- 您对数据行的信心程度。您会将所有权重设置在 0 到 1 之间,权重将代表您对该数据的确定程度。例如,如果 weight = 0.88 你给了那行 88% 的置信度
- 如果您有重复性事件。无需创建更多行,您可以将它们设置一次并赋予它们一个权重作为它们重复的次数
scale_pos_weight
通常在你有"imbalanced data"时使用。例如,假设您有一个分类问题,其中 5% 的数据为 1,95% 的数据为 0,您希望为每个 positive "event"。所以你可以设置 scale_pos_weight = 19(或者像作者写的那样:sumneg/sumpos
)
至于"author"重新定义权重。如果没有完整的代码,我无法知道他在那里做了什么,但我假设他正在对权重进行某种标准化。