Это для фанатов 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()
как к нашим обучающим, так и к тестовым наборам данных.