Кодирование категориальных столбцов II: OneHotEncoder
Итак, категориальные столбцы закодированы числовыми значениями. Можно ли теперь перейти к использованию конвейеров и XGBoost? Пока нет! В категориальных столбцах этого набора данных нет естественного порядка между значениями. Например: с помощью LabelEncoder район CollgCr (Neighborhood) был закодирован как 5, район Veenker — как 24, а Crawfor — как 6. Означает ли это, что Veenker «больше», чем Crawfor и CollgCr? Нет — и если позволить модели предполагать такой порядок, это может негативно сказаться на её качестве.
Поэтому необходим ещё один шаг: нужно применить унитарное кодирование (one-hot encoding), чтобы создать бинарные, или «фиктивные», переменные. Для этого воспользуйтесь классом OneHotEncoder из scikit-learn.
Это упражнение является частью курса
Экстремальный градиентный бустинг с XGBoost
Инструкции к упражнению
- Импортируйте
OneHotEncoderизsklearn.preprocessing. - Создайте объект
OneHotEncoderс именемohe. Укажите именованный аргументsparse=False. - Применив метод
.fit_transform(), преобразуйтеdfс помощьюOneHotEncoderи сохраните результат в переменнуюdf_encoded. Результатом будет массив NumPy. - Выведите первые 5 строк
df_encoded, а затем форму (shape) объектовdfиdf_encoded, чтобы сравнить разницу.
Интерактивное практическое упражнение
Попробуйте выполнить это упражнение, дополнив этот пример кода.
# Import OneHotEncoder
____
# Create OneHotEncoder: ohe
ohe = ____
# Apply OneHotEncoder to categorical columns - output is no longer a dataframe: df_encoded
df_encoded = ____
# Print first 5 rows of the resulting dataset - again, this will no longer be a pandas dataframe
print(df_encoded[:5, :])
# Print the shape of the original DataFrame
print(df.shape)
# Print the shape of the transformed array
print(df_encoded.shape)