Проблемы с использованием OneHotEncoder от sklearn - PullRequest
0 голосов
/ 14 июля 2020

Я пытаюсь быстро закодировать какой-нибудь текст, посимвольно. Сначала я сопоставил текст с целочисленными значениями.

with open('data/texts/anna.txt') as data:
    text = data.read()

vocab    = tuple(set(text))
int2char = dict(enumerate(vocab))
char2int = {i: char for char, i in int2char.items()}

encoded    = np.array([char2int[i] for i in text]).reshape(1, -1)
categories = np.array([char2int[i] for i in vocab])

# encoder = OneHotEncoder(categories) 
encoder = OneHotEncoder()
encoder.fit(encoded)

test = encoder.transform(encoded[:10])

Две вещи:

  1. Эта операция невероятно медленная как для подгонки, так и для преобразования, поэтому я должен что-то делать неправильно.
  2. Результат теста - (1, 1985223) ndarray всех единиц. Я ожидал, что будут закодированы только 10 значений, которые я ему передал. Опять же, я делаю что-то не так.

Может, мне стоит рассматривать свой текст как образцы 1985223, а не как функции? Редактировать: Кажется, это так. Теперь мне просто интересно, какая интуиция стоит за этим.

Любая помощь приветствуется!

1 Ответ

0 голосов
/ 14 июля 2020

Я предлагаю вам использовать вместо него CountVectorizer, поскольку он специально разработан для одного словаря горячего кодирования

from sklearn.feature_extraction.text import CountVectorizer

sample = 'this is a sample'

vectorizer = CountVectorizer()
vectorizer.fit(sample.split())

print(vectorizer.transform(['this']).toarray())
...