我正在尝试调整我构建的多类模型,但每次更改超参数时,我的准确率得分都会显着下降。我正在使用 RandomizedSearchCV 和 best_params_ 来确定我需要更改哪些参数。在这种特定情况下,best_params_ 建议学习率为 0.29,同时将准确度分数从 0.6238 降低到 0.6192。我用来调整参数的代码如下:
xgb = XGBClassifier(booster='gbtree', objective='multi:softmax', random_state=42, eval_metric="auc",
num_class=num_of_classes, tree_method='gpu_hist', importance_type='gain')
xgb.fit(X_train,y_train)
params={
"colsample_bytree":[1],
"gamma":[0],
"learning_rate":[0.3,0.29],
"max_delta_step":[0],
"max_depth":[6],
"min_child_weight":[1],
"n_jobs":[12],
"subsample":[1]
}
clf=RandomizedSearchCV(xgb,param_distributions=params,n_iter=1000,scoring='accuracy',cv=10,verbose=3)
clf.fit(X,Y)
这是测量精度的代码:
val = clf.predict(X_test)
lb = preprocessing.LabelBinarizer()
lb.fit(y_test)
y_test_lb = lb.transform(y_test)
val_lb = lb.transform(val)
accuracy_score(y_test_lb, val_lb)
测试精度的波动不一定是问题。由于最佳超参数是根据最佳 CV 分数推荐的,因此它并不总是对应于最佳测试集准确性。在您的示例中,差异很小。
但是,您提供的代码似乎存在多个问题: