提问人:Mohamed Niyaz 提问时间:10/24/2023 最后编辑:Mohamed Niyaz 更新时间:10/24/2023 访问量:35
XGBClassifier 在不同机器的类似环境中给出不同的结果
XGBClassifier gives different results on similar environments of different machines
问:
我使用 Grid-Search 和以下参数训练了一个 XGBoost 分类器模型:
params = {
'max_depth':[5,6],
'min_child_weight': [1, 2, 3],
'subsample': [0.6, 0.8, 1.0],
'colsample_bytree': [0.6, 0.8, 1.0]
}
xgb = XGBClassifier(device="cuda",learning_rate=0.02, n_estimators=1000, objective='binary:logistic', verbosity=0, tree_method="gpu_hist")
skf = StratifiedKFold(n_splits=folds, shuffle = True, random_state = 1001)
grid_search = GridSearchCV(estimator=xgb, param_grid=params, scoring='roc_auc', n_jobs=-1, cv=skf.split(x_train,y_train), verbose=100, return_train_score=True)
grid_search.fit(x_train, y_train)
然后我保存了最好的模型,如下所示:
from joblib import dump
joblib.dump(grid_search.best_estimator_, 'xgboost_grid_search.joblib')
当我再次加载模型时,predict_proba给出不同的结果,这就是我加载模型以获得预测的方式:
import joblib
model = joblib.load("xgboost_grid_search.joblib")
model.predict_proba(x_test)
这里的x_train和x_test包含数字特征。y_train 和 y_test 是分类值(0 或 1)
通过阅读相当多的博客、文章、堆栈溢出答案,我确保在这两种环境中都满足以下条件:
1. Correct python version - 3.11.5
2. Same/consistent joblib and xgboost pip versions - 1.2.0 and 2.0.0 respectively
3. Correct ordering of features in x_test as x_train and model.feature_names_in_
但是,我要指出的是,这两种环境的操作系统是不同的:Mac M1 和 Ubuntu(不确定这是否是一个问题)。
任何帮助都是值得赞赏的,如果我做错了什么,请告诉我。
提前致谢!
答:
1赞
seralouk
10/24/2023
#1
要重现结果,您还需要设置随机种子,即random_state
xgboost.XGBClassifier
params = {
'max_depth':[5,6],
'min_child_weight': [1, 2, 3],
'subsample': [0.6, 0.8, 1.0],
'colsample_bytree': [0.6, 0.8, 1.0]
}
xgb = XGBClassifier(device="cuda",learning_rate=0.02,
n_estimators=1000,
objective='binary:logistic',
verbosity=0,
tree_method="gpu_hist",
random_state= 1001) # HERE!
skf = StratifiedKFold(n_splits=folds, shuffle = True, random_state = 1001)
grid_search = GridSearchCV(estimator=xgb, param_grid=params, scoring='roc_auc', n_jobs=-1, cv=skf.split(x_train,y_train), verbose=100, return_train_score=True)
grid_search.fit(x_train, y_train)
评论
0赞
Mohamed Niyaz
10/24/2023
在训练期间设置random_state如何帮助在保存和加载模型后获得一致的预测结果?
0赞
seralouk
10/26/2023
它总是使用相同的权重随机初始化等进行训练,因此您始终拥有相同的模型。
0赞
Mohamed Niyaz
10/26/2023
但不知何故,我没有掌握它。我只训练了一次模型并保存了它。我将其加载到不同的环境/机器上,最终得到了不同的预测结果。我相信在我们重新训练模型之前,我们不需要寻找random_state对吧?
评论