Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python coremltools无法将XGBoost分类器转换为coreML模型_Python_Ios_Xcode9_Xgboost_Coremltools - Fatal编程技术网

Python coremltools无法将XGBoost分类器转换为coreML模型

Python coremltools无法将XGBoost分类器转换为coreML模型,python,ios,xcode9,xgboost,coremltools,Python,Ios,Xcode9,Xgboost,Coremltools,我有一个关于coremltools的问题 我想将经过训练的xgboost分类器模型转换为coreML模型 import coremltools import xgboost as xgb X, y = get_data() xgb_model = xgb.XGBClassifier() xib_model.train(X, y) coreml_model = coremltools.converters.xgboost.convert(xgb_model) coremltools.save

我有一个关于coremltools的问题

我想将经过训练的
xgboost
分类器模型转换为
coreML
模型

import coremltools
import xgboost as xgb


X, y = get_data()

xgb_model = xgb.XGBClassifier()
xib_model.train(X, y)
coreml_model = coremltools.converters.xgboost.convert(xgb_model)
coremltools.save('my_model.mlmodel')
错误如下:

>>> coremltools.converters.xgboost.convert(xgb_model)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Users/karas/.pyenv/versions/anaconda2-4.3.0/lib/python2.7/site-packages/coremltools/converters/xgboost/_tree.py", line 51, in convert
    return _MLModel(_convert_tree_ensemble(model, feature_names, target, force_32bit_float = force_32bit_float))
  File "/Users/karas/.pyenv/versions/anaconda2-4.3.0/lib/python2.7/site-packages/coremltools/converters/xgboost/_tree_ensemble.py", line 143, in convert_tree_ensemble
    raise TypeError("Unexpected type. Expecting XGBoost model.")
TypeError: Unexpected type. Expecting XGBoost model.
>>coremltools.converters.xgboost.convert(xgb\u型号)
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“/Users/karas/.pyenv/versions/anaconda2-4.3.0/lib/python2.7/site packages/coremltools/converters/xgboost/_tree.py”,第51行,在convert中
返回MLModel(转换树集合(模型、特征名称、目标、强制32位浮点=强制32位浮点))
文件“/Users/karas/.pyenv/versions/anaconda2-4.3.0/lib/python2.7/site packages/coremltools/converts/xgboost/\u tree\u employ.py”,第143行,在convert\u tree\u employ中
raise TypeError(“意外类型。应为XGBoost模型。”)
TypeError:意外的类型。应为XGBoost模型。
快速解决方案:

coreml_model = coremltools.converters.xgboost.convert(xgb_model._Booster)
有关此转换器的详细信息: 我刚刚遇到了这个问题,所以我调试到
\u tree\u employ.py
,下面是我的发现:

第一个参数“model”应该是前两个数据的.json文件的路径。此外,如果使用.json文件,则必须提供第二个参数
feature\u names

此外,根据,还有另一种方法可以获得模型:

import numpy as np
import scipy.sparse
import pickle
import xgboost as xgb

### simple example
# load file from text file, also binary buffer generated by xgboost
dtrain = xgb.DMatrix('../data/agaricus.txt.train')
dtest = xgb.DMatrix('../data/agaricus.txt.test')

# specify parameters via map, definition are same as c++ version
param = {'max_depth':2, 'eta':1, 'silent':1, 'objective':'binary:logistic'}

# specify validations set to watch performance
watchlist = [(dtest, 'eval'), (dtrain, 'train')]
num_round = 2
booster = xgb.train(param, dtrain, num_round, watchlist)
注意
增压器
这里是
\u xgboost.core.booster

那你就可以了

import coremltools
coreml_model = coremltools.converters.xgboost.convert(booster)
coreml_model.save('my_model.mlmodel')

我使用了你的第一种方法,但现在的问题是,它需要100个不同的输入,而我希望它得到一个特征向量。我怎么办?你知道吗?就像f00,f01。。。谢谢你找到解决办法了吗?