В процессе построения модели машинного обучения предварительная обработка данных является одним из наиболее важных этапов. Обработка категориальных значений играет здесь важную роль.
Категориальные переменные — это переменные, представляющие различные категории, такие как пол, цвет или тип продукта. В машинном обучении большинству алгоритмов требуется числовой ввод, а это означает, что категориальные переменные должны быть преобразованы в числовую форму, прежде чем их можно будет использовать в качестве входных данных для алгоритма. Этот процесс известен как кодирование.
Используя SK-learn, мы можем кодировать категориальные переменные несколькими способами. Давайте обсудим их один за другим с практическими примерами кодирования.
- Кодировщик этикеток
Кодирование меток — это метод, используемый в машинном обучении для преобразования категориальных данных в числовую форму. Это необходимо, потому что модели машинного обучения работают с числовыми данными, и категориальные переменные не могут быть напрямую введены в эти модели.
Например, рассмотрим набор данных, содержащий информацию о фруктах. Набор данных содержит столбец «Цвет» с тремя категориями: «Красный», «Зеленый» и «Желтый». Чтобы использовать эти данные в модели машинного обучения, нам нужно преобразовать категориальные данные в столбце «Цвет» в числовую форму.
Итак, мы сопоставим числовые значения с этими цветами, используя класс LabelEncoder().
#Import Libraries import pandas as pd from sklearn.preprocessing import LabelEncoder #Create Dataset data_raw = pd.DataFrame({'Fruit': ['Apple', 'Banana', 'Orange','Apple', 'Kiwi', 'Grape'], 'Color': ['Red', 'Yellow', 'Orange','Red', 'Green', 'Purple']}) #Encode Color Column data = data_raw.copy() le = LabelEncoder() data['Color_Encoded'] = le.fit_transform(data['Color']) print(data)
Здесь проблема заключается в том, что кодирование меток предполагает порядковое отношение между категориями, а это означает, что назначенные целые числа имеют значимый порядок. Однако это может быть не всегда так, и в этом случае более подходящим может быть однократное кодирование.
2. Горячий энкодер
Горячее кодирование — это еще один метод, используемый в машинном обучении для преобразования категориальных данных в числовую форму. Он часто используется, когда количество категорий в переменной велико или когда категории не имеют внутреннего порядка.
Здесь он создает отдельный столбец для каждой категории и с помощью 0,1 указывает, является ли для конкретной строки категория истинной или ложной. Таким образом, для каждой точки данных один из этих столбцов будет иметь «1», а другие будут иметь «0» в качестве значения.
#Import Libraries from sklearn.preprocessing import OneHotEncoder #Fitting OHE data = data_raw.copy() ohe = OneHotEncoder(handle_unknown='ignore') encoding_col = ['Fruit','Color'] data_encoded = ohe.fit_transform(data[encoding_col]).toarray() data_encoded_df = pd.DataFrame(data_encoded, columns=ohe.get_feature_names(encoding_col)) data_encoded = pd.concat([data, data_encoded_df], axis=1) print(data_encoded)
В Label Encoder размерность набора данных не меняется, но в случае OneHot Encoder размерность набора данных увеличивается в зависимости от количества категориальных столбцов и количества категорий, которые он имеет.
3. Порядковый энкодер
Порядковый кодировщик — это тип метода кодирования признаков, используемый в машинном обучении для преобразования категориальных переменных в числовые переменные. В этом методе каждому уникальному значению в категориальной переменной присваивается уникальное целочисленное значение в зависимости от его порядка или ранга.
Например, если у нас есть категориальная переменная «уровень образования» со значениями «средняя школа», «степень бакалавра», «степень магистра» и «доктор философии», мы можем присвоить значения 1, 2, 3 и 4 соответственно. Порядковое кодирование предполагает наличие некоторого значимого порядка или ранжирования между категориями и использует эту информацию для присвоения числовых значений.
#Import Libraries from sklearn.preprocessing import OrdinalEncoder #Create Dataset data = pd.DataFrame({'education_level':['High School','Bachelor\'s Degree', 'Master\'s Degree','PhD','High School','Master\'s Degree']}) #Define Ranks/Order category_ranks = {'High School': 1, 'Bachelor\'s Degree': 2, 'Master\'s Degree': 3, 'PhD': 4} #Ordinal Encoding ordinal_encoder = OrdinalEncoder(categories=[list(category_ranks.keys())], dtype=int) data['education_level_encoded'] = ordinal_encoder.fit_transform(data[['education_level']]) print(data)
Этот метод кодирования особенно полезен, когда категории имеют значимый порядок или ранжирование, поскольку он может собирать эту информацию и использовать ее в некоторых моделях машинного обучения.
Однако важно соблюдать осторожность при использовании порядкового кодирования, поскольку оно может привести к непреднамеренным смещениям или предположениям о данных. Например, присвоение более высоких числовых значений категориям, которые воспринимаются как «лучшие» или «более важные», может привести к систематической ошибке в модели. Поэтому крайне важно вдумчиво рассмотреть ранжирование категорий и его последствия, прежде чем применять порядковое кодирование к вашим данным.
Вы можете найти Блокнот для этой статьи здесь: Нажмите здесь
Спасибо за прочтение :)