2015-05-06 1 views
2

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 для предсказания не соответствует набору, который требуется от модели, поскольку он пропускает черты «черный» и «красный». И я не могу придумать, как это решить.

Это ошибка неправильного подхода?

ответ

0

Для этого приложения, вы должны попробовать sklearn.preprocessing.OneHotEncoder. Он в основном делает то же самое, что и фиктивные переменные в пандах, но при вызове fit на ваши данные обучения он будет помнить, какие значения есть там, где и какие столбцы соответствуют. Если после этого вы получите transform свои тестовые данные, он создаст массив с таким же количеством функций для данных обучения.

+0

Извините за поздний отклик. Проблема заключается в том, что я выбираю подготовленную модель для последующего использования. С OneHotEncode мне нужно будет выбрать другой объект для хранения информации. Это означает, что мне нужно будет привести два данных из файловой системы, когда я сделаю предсказание, которое находится в очень критическом контексте времени и может работать рядом с 1000 другими прогнозами. Что действительно было бы хорошо, если бы вы могли получить список функций прямо от модели, которая каким-то образом должна быть сохранена там. Но, похоже, нет никакого способа для этого –

+0

Нет, список функций не сохраняется в модели. Как модель узнает, какие функции вы ее накормили? OneHotEncoder должен быть крошечным, и вы можете поместить его в тот же файл pickle. Это действительно не должно создавать накладных расходов. –

Смежные вопросы