Обработка несбалансированных данных в GradientBoostingClassifier с использованием весового класса? - PullRequest
2 голосов
/ 08 июня 2019

У меня очень несбалансированный набор данных, который мне нужен, чтобы построить модель поверх проблемы классификации. В наборе данных содержится около 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.

Есть идеи? Как мне справиться с этими несбалансированными данными с помощью взвешенного класса или других методов?

1 Ответ

1 голос
/ 09 июня 2019

Вы должны использовать выборочные веса вместо весов классов. Другими словами, GradientBoostingClassifier позволяет назначать веса каждому наблюдению, а не классам. Вот как вы можете это сделать, предположив, что у = 0 соответствует весу 0,5, а у = 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)
...