LightGbm:如何使用eval_sample_weight

时间:2018-08-24 13:26:14

标签: lightgbm

我正在研究LightGbm(Scikit-learn API)中的二进制分类问题,并且在理解如何包括样本权重方面遇到问题。我的代码目前看起来像这样

classifier = LGBMClassifier(n_estimators=100, learning_rate = 0.1, num_leaves = 15)    
classifier.fit(X_train, y_train, sample_weight = w_train, eval_set = (X_val, y_val))

这里w_train是一个与y_train尺寸相同的numpy数组。但是我需要LightGbm在验证集上也使用sample_weights,因此我在eval_sample_weight函数中设置了fit。我希望它也是一个数组w_val(与y_val的维相同),但是我从文档中看到这是一个数组列表。我找不到任何使用此示例,所以我很难理解为什么。据我了解,这应该只是验证集中每个元素的权重。数组列表:这是否意味着每个样本有多个权重?谁能解释?

2 个答案:

答案 0 :(得分:1)

我自己弄清楚了。 LightGbm接受验证集列表。因此,它当然也接受重量列表。每个验证集都有一组权重。

答案 1 :(得分:0)

Petter T 没错,应该是一个数组列表,每个数组对应每个eval_set。 所以代码应该如下所示:

classifier.fit(X_train, y_train, sample_weight = w_train, eval_set = (X_val, y_val), eval_sample_weight = [w_val])

其中,如前所述,w_val 形状等于 y_val 的形状。