Google Colab下XGBoost转Core ML报xgboost not found错误如何解决
问题场景
在Google Colab环境中尝试将训练好的XGBoost多分类模型转换为Core ML格式,使用的实现代码如下:
import pandas as pd from sklearn.model_selection import train_test_split import xgboost as xgb import coremltools as ct data = pd.read_csv('/content/Rugby Position Requirements Updated - Rugby Position Requirements.csv') from sklearn.preprocessing import LabelEncoder label_encoder = LabelEncoder() data_copy = data.copy() data_copy['Position_Numerical'] = label_encoder.fit_transform(data['Position']) data = data_copy data features = ['Weight_KG', 'Height_CM', 'EBF', 'L_Run_S', '40m_Sprint_S', 'Speed_KMPH', 'Endurance', '1RM_Bench_Press_KG', 'Vertical_Jump_CM'] X = data[features].values y = data.Position_Numerical X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.1, random_state = 11) train = xgb.DMatrix(X_train, label = y_train) test = xgb.DMatrix(X_test, label = y_test) param = { 'max_depth': 4, 'eta': 0.3, 'objective': 'multi:softmax', 'num_class': 15 } epochs = 10 xgb_model = xgb.train(param, train, epochs) coreml_model = ct.converters.xgboost.convert(xgb_model) coreml_model.save('my_model.mlmodel')
运行代码时抛出如下完整报错:
--------------------------------------------------------------------------- RuntimeError Traceback (most recent call last) <ipython-input-61-d5b7e2c517d7> in <module>() 1 import coremltools as ct 2 ----> 3 coreml_model = ct.converters.xgboost.convert(xgb_model) 4 1 frames /usr/local/lib/python3.7/dist-packages/coremltools/converters/xgboost/_tree_ensemble.py in convert_tree_ensemble(model, feature_names, target, force_32bit_float, mode, class_labels, n_classes) 151 """ 152 if not (_HAS_XGBOOST): --> 153 raise RuntimeError("xgboost not found. xgboost conversion API is disabled.") 154 accepted_modes = ["regressor", "classifier"] 155 if mode not in accepted_modes: RuntimeError: xgboost not found. xgboost conversion API is disabled.
此前查找相关修复方案未找到有效解决方法。
解决方法
这个报错由两个原因共同导致,按以下步骤操作即可修复:
- 修复依赖兼容问题
Colab默认预装的coremltools版本与内置XGBoost版本存在导入检测bug,先执行以下命令重装兼容版本组合:- 卸载现有不兼容版本:
!pip uninstall -y coremltools xgboost- 安装经过验证的适配版本:
!pip install coremltools==5.2 xgboost==1.6.2- 安装完成后必须重启Colab运行时(点击顶部菜单栏「运行时」→「重启运行时」),清空旧版本的模块缓存,否则报错不会消失。
- 补全模型转换的必填参数
原代码的转换调用缺少多分类任务必需的参数,即使解决依赖问题也会触发后续校验错误,将转换部分的代码修改为:
其中coreml_model = ct.converters.xgboost.convert( xgb_model, mode="classifier", class_labels=label_encoder.classes_, n_classes=15 )mode="classifier"显式指定当前模型为分类模型,class_labels传入标签编码器存储的原始类别名,n_classes指定分类类别总数,和之前XGBoost训练时的num_class参数保持一致即可。
内容的提问来源于stack exchange,提问作者Abdullah Ajmal
相关产品推荐
相关产品推荐

