使用加权类在GradientBoostingClassifier中处理不平衡数据?

时间:2019-06-08 10:35:35

标签: python machine-learning scikit-learn training-data boosting

我有一个非常不平衡的数据集,我需要在该数据集的基础上建立一个用于分类问题的模型。该数据集包含大约30000个样本,其中大约1000个样本被标记为“ -1”,其余为0。我通过以下几行来构建模型:

X_train=training_set
y_train=target_value
my_classifier=GradientBoostingClassifier(loss='deviance',learning_rate=0.005)
my_model = my_classifier.fit(X_train, y_train)

由于这是一个不平衡的数据,因此仅像上面的代码那样构建模型是不正确的,因此我尝试如下使用类权重:

class_weights = compute_class_weight('balanced',np.unique(y_train), y_train)

现在,我不知道如何使用class_weights(基本上包括0.5和9.10值)来训练和构建模型。

有什么主意吗?如何使用加权类或其他技术处理这些不平衡的数据?

1 个答案:

答案 0 :(得分:1)

您应该使用样本权重而不是类别权重。换句话说,GradientBoostingClassifier使您可以将权重分配给每个观察值而不是类别。就是这样,假设y = 0对应权重0.5,y = 1对应权重9.1:

import numpy as np
sample_weights = np.zeros(len(y_train))
sample_weights[y_train == 0] = 0.5
sample_weights[y_train == 1] = 9.1

然后将这些权重传递给fit方法:

my_model = my_classifier.fit(X_train, y_train, sample_weight = weights)