Чтение:
http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html
в нем говорится, что «кодировать категориальные целочисленные функции с использованием схемы« один из K »».
Означает ли это, что он быстро кодирует список слов?
Из определения Википедии (https://en.wikipedia.org/wiki/One-hot) одного горячего кодирования
"При обработке естественного языка одним горячим вектором является матрица (вектор) 1 × N, используемая для различения каждого слова в словаре от любого другого слова в словаре. Вектор состоит из нулей во всех ячейках, за исключением единственной единицы в ячейке, используемой для однозначной идентификации слова ".
Выполнение приведенного ниже кода кажется LabelEncoder
неправильной реализацией одной горячей кодировки, тогда как OneHotEncoder
- правильной реализацией:
import numpy as np
from sklearn.preprocessing import MultiLabelBinarizer
from numpy import array
from numpy import argmax
from sklearn.preprocessing import LabelEncoder
from sklearn.preprocessing import OneHotEncoder
# define example
data = ['w1 w2 w3', 'w1 w2']
values = array(data)
label_encoder = LabelEncoder()
integer_encoded = label_encoder.fit_transform(values)
# binary encode
onehot_encoder = OneHotEncoder(sparse=False)
integer_encoded = integer_encoded.reshape(len(integer_encoded), 1)
mlb = MultiLabelBinarizer()
print('fit_transform\n' , mlb.fit_transform(data))
print('\none hot\n' , onehot_encoder.fit_transform(integer_encoded))
Печать:
fit_transform
[[1 1 1 1 1]
[1 1 1 0 1]]
one hot
[[0. 1.]
[1. 0.]]
Итак, LabelEncoder
не выполняет горячее кодирование, какой тип кодирования используется LabelEncoder
?
Из приведенных выше выходных данных кажется, что OneHotEncoder
создает более плотный вектор, чем схема кодирования LabelEncoder
.
Обновлять :
Как решить кодировать данные для алгоритмов машинного обучения с помощью LabelEncoder или OneHotEncoder?