由于论文需要判断各个因子对因变量的重要性,因此利用XGBoost构建回归模型,加入SHAP解释各因子对因变量的重要性。在构建过程中遇见以下几个问题:
(1)输入数据过大,运行时间很长。
由于我的数据是栅格数据,读取以后约有500万条数据,我破烂的cpu跑了三天三夜也没出结果。
解决方法:改用GPUTree,调用GPU来构建SHAP模型,速度飞快!!
(2)改用GPU后,出现了一个重大问题,报错:
ImportError: cannot import name '_cext_gpu'
参照知乎大佬方式解决了,链接在这。其中复制仓库过程很慢,因此改为直接从Github下载完整的仓库压缩文件即可,注意登入Github账号才可完整下载
(3)现在GPUTree可以正确运行了,但是迎来了最重要的问题。
在XGBoost训练完毕后,计算SHAP值时会将计算机内存占满,随后才能调用GPU内存,具体原因我也不太清楚,有可能是需要将数据转换至GPU内存运行时占用太多计算机内存了。因此我的anaconda内核会一直挂掉
解决方案有两种 :
1.租用GPU进行计算。我用的是Autodl,租个3080ti只要1.08每小时,还算便宜花不了几个钱。
2.降低模型复杂度!这点很奇怪,将XGB的复杂度适当降低以后就即可,并没有修改数据集的大小,但是会导致XGB拟合效果不理想!
所以最优选仍然是租用一个GPU,但是又要面临重新配置环境的困难,有可能需要重复问题(1)(2)了。