У меня есть очень несбалансированные данные (3% положительных), и я использую xgboost, чтобы немного поучиться. Файл довольно большой, и я ранее пробовал логистическую регрессию, randomforest и svm (используя только некоторую подвыборку всех данных, потому что данные слишком большие). Чтобы учесть несбалансированность данных, я попробовал данные о весе классов и балансировке с помощью SMOTE (что делает данные очень большими). Но, похоже, ничего из этого не помогает. Уровень точности ухудшается, когда я использую любой из вышеупомянутых подходов.
Когда я попробовал xgboost и попытался настроить параметр scale-positive-weight, как предлагается в документе, это только ухудшило точность. В целом, все мои модели работают хуже, чем просто предсказывают все нули.
Могу ли я как-то учесть этот дисбаланс данных?
вот мой код для xgboost
x = data[:,3:]
y = data[:,2]
from xgboost import XGBClassifier
model = XGBClassifier(scale_pos_weight = np.sum(y==0)/np.sum(y==1))
model.fit(x, y, eval_metric="auc")
# make predictions for test data
y_pred = model.predict(x)
#predictions = [round(value) for value in y_pred]
# evaluate predictions
accuracy = accuracy_score(y, y_pred)
print("Accuracy: %.2f%%" % (accuracy * 100.0))