我正在研究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
的维相同),但是我从文档中看到这是一个数组列表。我找不到任何使用此示例,所以我很难理解为什么。据我了解,这应该只是验证集中每个元素的权重。数组列表:这是否意味着每个样本有多个权重?谁能解释?
答案 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
的形状。