使用加权类在梯度提升分类器中处理不平衡数据



我有一个非常不平衡的数据集,我需要在此基础上为分类问题构建一个模型。数据集有大约 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 个值(来使用 GradientBoostingClassifier 训练和构建模型。

知道吗?如何使用加权类或其他技术处理这些不平衡的数据?

您应该使用样本权重而不是类权重。换句话说,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)

最新更新