3

我有一个非常不平衡的数据集,我需要在此基础上构建一个模型来解决分类问题。该数据集有大约 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.

任何想法?如何使用加权类或其他技术处理这些不平衡数据?

4

1 回答 1

4

您应该使用样本权重而不是班级权重。换句话说,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)
于 2019-06-08T21:05:02.957 回答