scikit-garden的RandomForestQuantileRegressor.fit训练最后一棵树时冻结如何解决
问题解决方案
- 优先验证多进程死锁问题:scikit-garden的
RandomForestQuantileRegressor多进程实现存在已知的兼容性bug,适配的是早期版本的scikit-learn,和新版依赖的joblib通信逻辑不兼容,极易在最后几棵树训练时出现进程挂死。你可以先将n_jobs设置为1跑单进程测试,如果能正常完成训练即可确认该问题。 - 增加树生长限制参数:默认参数未限制树的生长逻辑,可能出现单棵树无限制分裂的极端情况,占用无限计算资源。可以先添加参数限制测试:
xtrain, xtest, ytrain, ytest = train_test_split(features, target, test_size=testsize) model = RandomForestQuantileRegressor( verbose=2, n_jobs=1, max_depth=15, min_samples_split=20, min_samples_leaf=10, n_estimators=10 ).fit(xtrain, ytrain) ypred = model.predict(xtest)
- 手动实现多进程提速:如果确认是自带多进程的问题,不要用内置的
n_jobs参数,自己通过joblib或者concurrent.futures并行训练多个单树模型,最后手动聚合预测结果即可,修改成本远低于改scikit-garden源码。 - 换用更稳定的实现方案:scikit-garden已经停止维护多年,有大量未修复的bug。你可以直接换用scikit-learn 1.4及以上版本自带的分位数回归实现,或者用lightgbm、xgboost的分位数损失函数实现对应逻辑,200万样本的训练速度比scikit-garden快至少一个量级,多进程逻辑也稳定很多。
内容的提问来源于stack exchange,提问作者ozmanda
相关产品推荐
相关产品推荐

