Это горячо - PullRequest
       41

Это горячо

0 голосов
/ 29 мая 2018

Чтение:

http://scikit -learn.org / stable / modules / generate / sklearn.preprocessing.LabelEncoder.html

это состояния "кодировать категориальное целое числофункции, использующие схему one-of-ka one-of-K. "

Означает ли это, что комбинация one-hot кодирует список слов?

Из определения Википедии (https://en.wikipedia.org/wiki/One-hot) одного горячего кодирования
"При обработке естественного языка вектор с одним горячим кодом представляет собой матрицу 1 × N (вектор), используемую для различения каждого слова в словаре от любого другого слова в словаре. Вектор состоит из 0 сво всех ячейках, за исключением единственной 1 в ячейке, используемой уникальным образом для идентификации слова. "

Запуск кода под ним, по-видимому, 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?

1 Ответ

0 голосов
/ 29 мая 2018

Я думаю, что ваш вопрос недостаточно ясен ...

Во-первых, LabelEncoder кодирует метки со значениями от 0 до n_classes-1, в то время как OneHotEncoder кодирует категориальные целочисленные функции с помощью горячих клавиш.ака схема одного из К.Они разные.

Во-вторых, да OneHotEncoder кодирует список слов.В определении Википедии написано a one-hot vector is a 1 × N matrix.Но что такое N?На самом деле, N - это размер вашего словарного запаса.

Например, если у вас есть пять слов a, b, c, d, e.Затем горячо закодируйте их:

a -> [1, 0, 0, 0, 0]  # a one-hot 1 x 5 vector
b -> [0, 1, 0, 0, 0]  # a one-hot 1 x 5 vector
c -> [0, 0, 1, 0, 0]  # a one-hot 1 x 5 vector
d -> [0, 0, 0, 1, 0]  # a one-hot 1 x 5 vector
e -> [0, 0, 0, 0, 1]  # a one-hot 1 x 5 vector
# total five one-hot 1 x 5 vectors which can be expressed in a 5 x 5 matrix.

В-третьих, на самом деле я не на 100% уверен в том, что вы спрашиваете ...

Наконец, чтобы ответить на ваш обновленный вопрос.Большую часть времени вам следует выбирать кодировку в одну горячую строку или встраивание слов .Причина в том, что векторы, генерируемые LabelEncoder, слишком похожи, что означает, что между ними нет большой разницы.Поскольку подобный вход более вероятно приведет к подобному выходу.Это затрудняет установку вашей модели.

...