Модели машинного обучения основаны на числовых уравнениях и вычислении числовых переменных. Но в большинстве случаев в нашем наборе данных есть нечисловые столбцы, такие как страны, названия, города и т. Д. В таком состоянии нам необходимо преобразовать эти столбцы в числовые значения, которые можно использовать для дальнейшей обработки.
В 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. Если вам понравилась статья, не забудьте аплодировать и подписаться на меня в среде.