Это для фанатов pd.get_dummies

Привет народ 🤠

Хорошо, я понимаю. Один из самых простых способов преобразовать категориальный массив в массив манекенов в Python — использовать метод Pandas pd.get_dummies(). Зачем вам тратить время на импорт OneHotEncoderиз sklearn, выполнение .fit_transform() и т. д. и т. д. и т. д.? Разговор о утомительно!

В этой статье сначала будет представлен простой набор данных для демонстрационных целей, состоящий из тестового набора, который содержит категориальные значения, отсутствующие в обучающем наборе. Затем будет показано, как использование pd.get_dummies() может привести к проблемам с демонстрационными данными. И, наконец, покажите, как избежать этой проблемы с помощью sklearn OneHotEncoder.

Простой набор данных для демонстрации

Здесь у нас есть простой набор данных, который включает категориальный признак под названием ОС. В столбце ОС перечислены операционные системы компьютера. Мы будем использовать эти вымышленные данные для демонстрации. В train_df будут вымышленные демонстрационные обучающие данные. В то время как в test_df у нас есть вымышленные данные демонстрационного тестирования.

В нашем вымышленном демонстрационном примере тестовый набор содержит категориальные значения, отсутствующие в обучающем наборе. Это несоответствие вызовет проблемы.

import pandas as pd

train_df = pd.DataFrame({'OS': ['Windows', 'MacOS', 
                                'Linux', 'Windows', 'MacOS']})
test_df = pd.DataFrame({'OS': ['Windows', 'MacOS', 
                               'Android', 'Unix' 'iOS']})

В наших обучающих данных у нас есть три операционные системы: Windows, MacOS и Linux. Но в наших данных тестирования у нас есть дополнительные категории, включая Android, Unix и iOS.

Модель, подходящая для train_df.get_dummies(), не будет работать с данными тестирования из test_df.get_dummies(). Результаты не совпадают.

Проблема с pd.get_dummies()

Вот что вы получите, применяя функцию pd.get_dummies() как к нашим обучающим, так и к тестовым наборам данных.