gpt4 book ai didi

xgboost - 如何在xgboost的多类分类中为不平衡数据设置权重?

转载 作者:行者123 更新时间:2023-12-04 02:03:16 28 4
gpt4 key购买 nike

我知道您可以为不平衡的数据集设置 scale_pos_weight。然而,如何处理不平衡数据集中的多分类问题。我经历过https://datascience.stackexchange.com/questions/16342/unbalanced-multiclass-data-with-xgboost/18823但不太明白如何在Dmatrix中设置权重参数。

谁能详细解释一下?

最佳答案

对于不平衡的数据集,我使用了 Xgboost 中的“权重”参数,其中权重是根据数据所属的类分配的权重数组。

def CreateBalancedSampleWeights(y_train, largest_class_weight_coef):
classes = np.unique(y_train, axis = 0)
classes.sort()
class_samples = np.bincount(y_train)
total_samples = class_samples.sum()
n_classes = len(class_samples)
weights = total_samples / (n_classes * class_samples * 1.0)
class_weight_dict = {key : value for (key, value) in zip(classes, weights)}
class_weight_dict[classes[1]] = class_weight_dict[classes[1]] *
largest_class_weight_coef
sample_weights = [class_weight_dict[y] for y in y_train]
return sample_weights
只需传递目标列和最频繁类别的出现率(如果最频繁类别在 100 个样本中有 75 个,则其为 0.75)
    largest_class_weight_coef = 
max(df_copy['Category'].value_counts().values)/df.shape[0]

#pass y_train as numpy array
weight = CreateBalancedSampleWeights(y_train, largest_class_weight_coef)

#And then use it like this
xg = XGBClassifier(n_estimators=1000, weights = weight, max_depth=20)
就是这样 :)

关于xgboost - 如何在xgboost的多类分类中为不平衡数据设置权重?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45811201/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com