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

В python мы встроили библиотеки, которые могут помочь нам в выполнении этих задач. В этом примере мы будем использовать модуль sklearn. LabelEncoder - это класс, который присутствует в модуле sklearn для кодирования текстовых меток в числовые значения. Возьмем пример простого набора данных:

S.N Country Hours Salary     House
0   France  34.0  12000.0        No
1    Spain  37.0  49000.0       Yes
2  Germany  20.0  34000.0        No
3    Spain  58.0  41000.0        No
4  Germany  40.0  43333.3       Yes
5   France  45.0  28000.0       Yes
6    Spain  39.8 51000.0        No
7   France  28.0  89000.0       Yes
8  Germany  50.0  53000.0        No
9   France  47.0  33000.0       Yes

Здесь нам нужно закодировать столбцы Country и House. Начнем с импорта часто используемых модулей для науки о данных.

Результат сейчас

array([[0, 0, 34.0, 12000.0],
       [1, 2, 37.0, 49000.0],
       [2, 1, 20.0, 34000.0],
       [3, 2, 58.0, 41000.0],
       [4, 1, 40.0, 43333.3],
       [5, 0, 45.0, 28000.0],
       [6, 2, 39.8, 51000.0],
       [7, 0, 28.0, 89000.0],
       [8, 1, 50.0, 53000.0],
       [9, 0, 47.0, 33000.0]], dtype=object)

Если вы сейчас посмотрите на второй столбец, то второй столбец закодирован в числах 0, 1, 2. Здесь значение варьируется от 0 до количества имеющихся классов. У нас было 3 разных класса, поэтому у нас есть кодировка 0, 1 и 2.

Но ждать! У нас есть небольшая проблема с этим подходом. У нас есть закодированные значения 0, 1 и 2. Алогритм машинного обучения может думать, что класс 2 больше класса 1, а класс один больше класса 0, т.е. Германия больше Испании, а Испания больше Франции. Но в этом нет смысла, не так ли? Здесь нет относительного порядка. Было бы больше смысла, если бы это было что-то вроде размеров футболок, таких как XL, L, M, SM, потому что это относительный порядок.

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

Это достигается с помощью класса OneHotEncoder из sklearn:

array([[1.00000e+00, 0.00000e+00, 0.00000e+00, 0.00000e+00, 3.40000e+01,
        1.20000e+04],
       [0.00000e+00, 0.00000e+00, 1.00000e+00, 1.00000e+00, 3.70000e+01,
        4.90000e+04],
       [0.00000e+00, 1.00000e+00, 0.00000e+00, 2.00000e+00, 2.00000e+01,
        3.40000e+04],
       [0.00000e+00, 0.00000e+00, 1.00000e+00, 3.00000e+00, 5.80000e+01,
        4.10000e+04],
       [0.00000e+00, 1.00000e+00, 0.00000e+00, 4.00000e+00, 4.00000e+01,
        4.33333e+04],
       [1.00000e+00, 0.00000e+00, 0.00000e+00, 5.00000e+00, 4.50000e+01,
        2.80000e+04],
       [0.00000e+00, 0.00000e+00, 1.00000e+00, 6.00000e+00, 3.98000e+01,
        5.10000e+04],
       [1.00000e+00, 0.00000e+00, 0.00000e+00, 7.00000e+00, 2.80000e+01,
        8.90000e+04],
       [0.00000e+00, 1.00000e+00, 0.00000e+00, 8.00000e+00, 5.00000e+01,
        5.30000e+04],
       [1.00000e+00, 0.00000e+00, 0.00000e+00, 9.00000e+00, 4.70000e+01,
        3.30000e+04]])

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

На выходе

array([0, 1, 0, 0, 1, 1, 0, 1, 0, 1])

Вот как кодирование меток выполняется в Python. Если вам понравилась статья, не забудьте аплодировать и подписаться на меня в среде.