iPhoneとApple製品で機械学習モデルを動かすにはApple製の機械学習モデル運用環境のCoreMLを使う必要があります。ONNXを使うこともできないことはないですが、Objective-Cしかサポートされてないみたいですし、あまり使われている方法じゃないみたいです。

ONNXはMicrosoftが推しているので、Apple的には開発にやる気がでないのではないでしょうか?ちなみにCoreMLでLightGBMもサポートされていませんが、それもLightGBMがMSが開発元なことを意識したものかもしれません。

ただ、ONNXと違って各機械学習モデル(ライブラリ)の最新バージョンにCoreML(というかCoreMLモデルをpythonで生成するcoremltools 8.1)が対応してないことが困ったところなんですよね。

現時点(2025年1月)ではscikit-learnは0.17.から1.5.1.まで、XGBoostは1.4.2までしか動かないみたいですね。

scikit-learn version 1.6.1 is not supported. Minimum required version: 0.17. Maximum required version: 1.5.1. Disabling scikit-learn conversion API.
XGBoost version 2.1.3 has not been tested with coremltools. You may run into unexpected errors. XGBoost 1.4.2 is the most recent version that has been tested.

ということでscikit-learnとXGBoostをダウングレードする方法を記録しておきます。

pip uninstall scikit-learn  
pip uninstall xgboost  
pip install scikit-learn==1.5.1  
pip install xgboost==1.4.2  

ちなみに、xgboostのバージョンに合わせるとpandasやpandasもダウングレードする必要があります。

pip install pandas==1.5.3  
pip install numpy==1.26.4

ONNXへの変換に必要なこと

CoreMLを使う型はONNXのモデルも作ると思いますが、xgboostのモデルをONNXに変換するときも、2025年1月現在だとPythonのモデルを3.10まで落とさないとonnxmltoolsが入らずxgboostのモデルをONNXに変換できません。

# 特徴量の列数を指定
ncols = X.shape[1]
  
# ターゲットのONNX opsetバージョンを取得(15までしか動かない)
TARGET_OPSET = 15
  
# モデルをONNXに変換  
onnx_model_converted = convert_xgboost(  
    model_,                   # XGBoostモデル  
    'tree-based regressor',          # モデルの種類 (回帰: 'tree-based regressor', 分類: 'tree-based classifier')  
    [('input', FloatTensorType([None, ncols]))],  # 入力データ型 (特徴量数を指定)  
    target_opset=TARGET_OPSET        # ターゲットのONNX opsetバージョン  
)  
  
# ONNXモデルを保存  
onnx.save_model(onnx_model_converted, "example.onnx")  

それでは。