如何解决并行运行 python vaex.ml.catboost.CatBoostModel.fit 数倍的正确方法是什么?
说明
我有一个 python 代码,它顺序调用 vaex.ml.catboost.catboostModel.fit
3 次。
需要很多时间,我想并行运行vaex.ml.catboost.catboostModel.fit
。
问题
按顺序和并行运行 vaex.ml.catboost.catboostModel.fit
时得到不同的结果。当然,我做错了。我希望并行结果非常接近顺序结果(种子不是硬编码的,所以总会有一些小的波动)。顺序和并行版本产生绝对无法比拟的结果。
这是顺序代码。它产生 approved result
estimator = catboostModel(
features=features + features_cat,target=target,num_boost_round=700,prediction_name="catboost_prediction",prediction_type=prediction_type
)
for fold in folds:
logging.info(f"training fold: {fold}") # 1,2,3
df_train = df[df.cv_fold != fold]
df_val = df[df.cv_fold == fold]
estimator.fit(df=df_train,evals=[df_val],early_stopping_rounds=100,verbose_eval=True)
cv_scores[cv_fold == fold] = estimator.predict(df_val)
这是我的并行代码:
import concurrent.futures
with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
future_to_result = {executor.submit(train_fold,fold,cv_scores,df,task,estimator): fold for fold in
folds}
for future in concurrent.futures.as_completed(future_to_result):
res = future_to_result[future]
(fold,result) = future.result()
logging.info(f"completed future for {fold},result: {result.shape}")
cv_scores[cv_fold == fold] = result
def train_fold(fold,estimator: catboostModel):
logging.info(f"training fold: {fold}")
df_train = df[df.cv_fold != fold]
df_val = df[df.cv_fold == fold]
estimator.fit(df=df_train,verbose_eval=True)
result = estimator.predict(df_val)
return (fold,result)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。