我正在为一场比赛开发一个高度不平衡的数据集。
训练数据的形状为:(166573,14)
train['outcome'].value_counts()
0 159730
1 6843我使用XGBClassifier构建模型,我手动设置的唯一参数是scale_pos_weight : 23.34 (0值计数/1值计数)
在AUC指标下,这个数字大约是82%。
我想,如果我超调所有其他参数,我就能得到很高的精度。
XGBClassifier(base_score=0.5, booster='gbtree', colsample_bylevel=1,
colsample_bytree=1, gamma=0, learning_rate=0.1, max_delta_step=0,
max_depth=3, min_child_weight=1, missing=None, n_estimators=100,
n_jobs=1, nthread=None, objective='binary:logistic', random_state=0,
reg_alpha=0, reg_lambda=1, scale_pos_weight=23.4, seed=None,
silent=True, subsample=1)我尝试了GridSearchCV,但是在我的本地机器上完成它需要很长时间,我无法得到任何结果。
clf = XGBClassifier()
grid = GridSearchCV(clf,
params, n_jobs=-1,
scoring="roc_auc",
cv=3)
grid.fit(X_train, y_train)
print("Best: %f using %s" % (grid.best_score_, grid.best_params_))考虑到严重不平衡的数据集,我应该针对哪些其他参数进行调优,以及如何运行它,这样我才能真正地获得一些结果?
发布于 2019-07-18 17:35:24
1)随机搜索如果通常优于网格https://www.analyticsindiamag.com/why-is-random-search-better-than-grid-search-for-machine-learning/,请尝试:
#clf = RandomizedSearchCV(clf ,param_distributions = params, cv=kfold, scoring="accuracy", n_jobs= 10, verbose = 1)2)对于不平衡的数据集:
https://towardsdatascience.com/methods-for-dealing-with-imbalanced-data-5b761be45a18
发布于 2019-04-23 06:42:35
我认为你正在处理两个不同的问题:
有许多处理不平衡数据集的技术,其中之一可能是向您的小类添加更高的权重,或者另一种方法可能是重新分配您的数据,从而给小类提供更多的机会。
对于XGBoost,我建议固定学习速率,使树的早期停止数达到300左右,然后先处理树数和最小子体重,这是最重要的参数。
https://datascience.stackexchange.com/questions/49746
复制相似问题