我有一个非常不平衡的数据集,我需要在该数据集的基础上建立一个用于分类问题的模型。该数据集包含大约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值)来训练和构建模型。
有什么主意吗?如何使用加权类或其他技术处理这些不平衡的数据?
答案 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)