I мой проект Я тренирую BaggingClassifier. Поскольку используемые данные содержат категориальные функции, я использую pandas framework (get_dummies) для их кодирования. После этого я тренирую классификатор.Классификация с sk-learn: обрабатывать отсутствующие категориальные функции при прогнозировании
Теперь я хотел сделать прогноз. Он вернул эту ошибку:
ValueError: Number of features of the model must match the input. Model n_features is 12 and input n_features is 6.
Я понимаю, почему я получаю эту ошибку. Требуемые характеристики от модели: 12
Учитывая особенности внутри набора данных прогнозирования: 6
Из-за кодирования, учебный набор данных был распространяемых до 12 функций в этом случае. Закодированные данные, которые я использую для предсказания, имеют только 6 функций, так как это только одна строка данных, которая вообще не распространяется во время кодирования.
Этот пример показывает проблему:
Оригинальный учебный набор данных
Age| Color
35 |'Orange'
55 |'Black'
75 |'Red'
После панд get_dummies:
X
Age| Orange | Black| Red
35 | 1 | 0 | 0
55 | 0 | 1 | 0
75 | 0 | 0 | 1
Прогнозирование данных набор
X
Age| Orange|
35 | 1 |
ВЭД ture для предсказания не соответствует набору, который требуется от модели, поскольку он пропускает черты «черный» и «красный». И я не могу придумать, как это решить.
Это ошибка неправильного подхода?
Извините за поздний отклик. Проблема заключается в том, что я выбираю подготовленную модель для последующего использования. С OneHotEncode мне нужно будет выбрать другой объект для хранения информации. Это означает, что мне нужно будет привести два данных из файловой системы, когда я сделаю предсказание, которое находится в очень критическом контексте времени и может работать рядом с 1000 другими прогнозами. Что действительно было бы хорошо, если бы вы могли получить список функций прямо от модели, которая каким-то образом должна быть сохранена там. Но, похоже, нет никакого способа для этого –
Нет, список функций не сохраняется в модели. Как модель узнает, какие функции вы ее накормили? OneHotEncoder должен быть крошечным, и вы можете поместить его в тот же файл pickle. Это действительно не должно создавать накладных расходов. –