Python Колесо XGBoost для Linux не работает в среде Tox (Неизвестная целевая функция multi: softprob) - PullRequest
0 голосов
/ 10 января 2020

Я выполняю tox тесты для Python 2.7 на машине Linux с зависимостью xgboost==0.6a2 (предварительно скомпилированной как колесо для Linux).

В тестах я необходимо загрузить предварительно скомпилированную модель XGBClassifier через модуль scikit-learn joblib следующим образом:

from sklearn.externals import joblib
model = joblib.load('path/to/model.pkl')

Когда я запускаю $ nosetests ./tests с моей локальной виртуальной средой, проблема не возникает, и модель загружена правильно.

Я хочу запустить тесты также с tox. Я запускаю следующую команду:

$ tox -v test

Ниже мой tox.ini.

[tox]
envlist = py27

[testenv]
commands =
    nosetests ./tests

Однако тесты не выполняются при загрузке модели XGBClassifier, выдавая следующую ошибку :

  File "/home/********/project/my_project/load_model.py", line 56, in load_model
    model = joblib.load('path/to/model.pkl'))
  File "/home/********/project/.tox/py27/lib/python2.7/site-packages/sklearn/externals/joblib/numpy_pickle.py", line 598, in load
    obj = _unpickle(fobj, filename, mmap_mode)
  File "/home/********/project/.tox/py27/lib/python2.7/site-packages/sklearn/externals/joblib/numpy_pickle.py", line 526, in _unpickle
    obj = unpickler.load()
  File "/opt/********/.pyenv/versions/2.7.12/lib/python2.7/pickle.py", line 864, in load
    dispatch[key](self)
  File "/home/********/project/.tox/py27/lib/python2.7/site-packages/sklearn/externals/joblib/numpy_pickle.py", line 339, in load_build
    Unpickler.load_build(self)
  File "/opt/********/.pyenv/versions/2.7.12/lib/python2.7/pickle.py", line 1223, in load_build
    setstate(state)
  File "/home/********/project/.tox/py27/lib/python2.7/site-packages/xgboost/core.py", line 678, in __setstate__
    _check_call(_LIB.XGBoosterLoadModelFromBuffer(handle, ptr, length))
  File "/home/********/project/.tox/py27/lib/python2.7/site-packages/xgboost/core.py", line 127, in _check_call
    raise XGBoostError(_LIB.XGBGetLastError())
XGBoostError: [10:28:58] src/objective/objective.cc:21: Unknown objective function multi:softprob

Ниже приведены соответствующие зависимости, которые я использую:

"scikit-learn==0.20.4"
"numpy==1.16.6"
"nose==1.3.7"
"tox==3.14.3"
"xgboost==0.6a2"
...