Одно горячее кодирование обрабатывает выборку как последовательность, где каждый элемент последовательности является индексом в словарь, указывающий, присутствует ли этот элемент (например, слово или буква) в выборке.Например, если ваш словарь представляет собой строчный алфавит, код рабочей кошки в одну горячую строку может выглядеть следующим образом:
[1, 0., 1, 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.,0., 0., 1, 0., 0., 0., 0., 0., 0.]
Указывая, что это слово содержит буквы c
, a
иt
.
Чтобы сделать горячее кодирование, вам понадобится две вещи - поиск словаря со всеми возможными значениями (поэтому при использовании слов матрицы могут быть такими большими, потому что словарь огромный!).Но если кодировать алфавит в нижнем регистре, вам нужно только 26.
Тогда вы, как правило, представляете свои выборки в качестве индексов в словаре.Таким образом, набор слов может выглядеть следующим образом:
#bag, cab, fad
sentences = np.array([[1, 0, 6], [2, 0, 1], [5, 0, 3]])
Когда вы горячо закодируете, вы получите матрицу 3 x 26:
vocab = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
#bag, cab, fad
sentences = np.array([[1, 0, 6], [2, 0, 1], [5, 0, 3]])
def onHot(sequences, dimension=len(vocab)):
results = np.zeros((len(sequences), dimension))
for i, sequence in enumerate(sequences):
results[i, sequence] = 1
return results
onHot(sentences)
Что приводит к вамобразцы в горячем коде с 26-буквенным словарем, готовые для передачи в нейронную сеть:
array([[1., 1., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[1., 1., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
[1., 0., 0., 1., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])