XGBoost, features_names mismatch
При использовании моеделей XGBoost может появляться ошибка вида:
ValueError: feature_names mismatch: [массив с названиями столбцов данных модели] [столбцы вида 'f0', 'f1', 'f2' и так далее]
expected [перечисление признаков модели] in input data
training data did not have the following fields: f61, f16, f5, [и так далее]
Причин ее появления может быть несколько. В моем случае эта ошибка возникла из-за того, что данные при фиттинге модели использовались в виде датафрейма Pandas
, а при предикции в виде массива Numpy
.
Для исправления ситуации необходимо передавать данные на этапах обучения и использования модели с унифицированным типом, например как массивы Numpy
. Чтобы получить представление датафрейма Pandas
в виде массива Numpy
можно воспользоваться методом to_numpy().
Отдельно стоит отметить, что реализации алгоритмов на базе деревьев решений в Scikit-learn
, такие как GradientBoostingClassifier
, RandomForestClassifier
или ExtraTreesClassifier
подобной "проблемой" не страдают и корректно работают вне зависимости от типа данных на этапах обучения и использования модели.