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

Номинальное кодирование и порядковое кодирование — это два распространенных метода, используемых для кодирования категориальных данных. Номинальная кодировка присваивает каждой категории уникальное числовое значение, тогда как порядковая кодировка присваивает номера на основе их порядка или ранга. .

  1. Номинальная кодировка –›Пример: пол (женщина, мужчина), страна (США, Великобритания, Австралия)
  2. Порядковое кодирование –›Пример: образование (бакалавр, бакалавр технических наук, магистр технических наук, магистр технических наук, докторская степень)

1. Номинальная кодировка

Номинальное кодирование является распространенным методом преобразования категорийных данных в числовую форму. Каждой категории присваивается уникальное числовое значение. Однако он не отражает значимой взаимосвязи между категориями, поскольку каждой категории присваивается отдельное числовое значение.

  1. Одно горячее кодирование.

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

Код:

from sklearn.preprocessing import OneHotEncoder
import numpy as np
import pandas as pd

# create some example categorical data
categories = np.array(['red', 'green', 'blue', 'green', 'red'])

# create the one hot encoder
encoder = OneHotEncoder(sparse=False)

# fit the encoder to the data and transform it
one_hot_encoded = encoder.fit_transform(categories.reshape(-1, 1))

# Print the result
print("One-Hot Encoded Data with Feature Names:")
print(pd.DataFrame(one_hot_encoded, columns=encoder.get_feature_names()))

Выход:

One-Hot Encoded Data with Feature Names:
   x0_blue  x0_green  x0_red
0      0.0       0.0     1.0
1      0.0       1.0     0.0
2      1.0       0.0     0.0
3      0.0       1.0     0.0
4      0.0       0.0     1.0

Ловушка для фиктивной переменной: удалить один столбец

2. Одна горячая кодировка с несколькими категориями.

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

Код:

from sklearn.preprocessing import OneHotEncoder
import pandas as pd
import numpy as np

# Define the data array
data = [['red', 'large'], ['green', 'small'], ['blue', 'medium'], ['green', 'medium'], ['red', 'small']]

# Convert the data to a numpy array
data_array = np.array(data)

# Create a one-hot encoder object and fit it to the data
encoder = OneHotEncoder()
encoder.fit(data_array)

# Transform the data using the encoder
one_hot_encoded = encoder.transform(data_array)

# Print the result
print("One-Hot Encoded Data with Feature Names:")
print(pd.DataFrame(one_hot_encoded.toarray(), columns=encoder.get_feature_names()))

Выход:

One-Hot Encoded Data with Feature Names:
   x0_blue  x0_green  x0_red  x1_large  x1_medium  x1_small
0      0.0       0.0     1.0       1.0        0.0       0.0
1      0.0       1.0     0.0       0.0        0.0       1.0
2      1.0       0.0     0.0       0.0        1.0       0.0
3      0.0       1.0     0.0       0.0        1.0       0.0
4      0.0       0.0     1.0       0.0        0.0       1.0

2. Порядковое кодирование

Порядковое кодирование — это метод, используемый для преобразования категорийных данных в числовую форму путем присвоения номеров на основе порядка или ранга категорий. Он фиксирует значимую связь между категориями, поскольку назначенные числовые значения имеют естественный порядок, отражающий связь между категориями. Это делает порядковое кодирование полезным для моделей машинного обучения, которые полагаются на порядок или ранг категорий.

  1. Кодировка ярлыка

Код:

from sklearn.preprocessing import OrdinalEncoder

# create sample data
data = [['BSc'],['BTech'],['MSc'],['MTech'],['PhD']]

# create an instance of the encoder
encoder = OrdinalEncoder()

# fit and transform the data
encoded_data = encoder.fit_transform(data)

# print the encoded data
print(encoded_data)

Выход:

[[0.]
 [1.]
 [2.]
 [3.]
 [4.]]

Заключение:

Однако порядковое кодирование не подходит для номинальных переменных без естественного порядка, так как присвоение произвольных значений может привести к ошибочным результатам. Несмотря на это ограничение, порядковое кодирование является популярным методом предварительной обработки категориальных данных, особенно когда порядок или ранг категорий имеет отношение к проблеме.

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

Не стесняйтесь оставлять свои комментарии.

Подключиться: LinkedIn