данные валидации с одним горячим кодированием - PullRequest
0 голосов
/ 10 июля 2020

У меня есть матрица функций с горячим кодированием, где функции - это подстроки обучающих данных.

У меня есть только последний фрейм данных, содержащий rows = samples, columns = substrings (one-hot-encoded). Теперь я хочу одним нажатием закодировать новый набор данных. Данные состоят из rows = samples, columns = String, и мне нужно проверить, содержит ли строка каждого образца какие-либо подстроки (функции), и выполнить их горячее кодирование.

Цикл по всем строкам и подстрокам не будет достаточно быстро, так как у меня довольно много данных. Каким будет быстрый способ решить эту проблему?

EDIT: Пример: у меня есть несколько строк в списке и одна матрица с горячим кодированием с подстроками из них:

strings = ['foobarista', 'foobar']

substrings = {'foo' : [1,1] ,
       'bar' : [1,1],
       'ist' : [0,1],
       'sta' : [0,1]}

df_one_hot = pd.DataFrame(substrings)

Скажем, это мои данные для обучения, поэтому у меня есть функции foo, bar, ist, sta.

Теперь у меня есть новые данные:

new_strings = ['barista', 'barfoo', 'house']

И я хочу проверить эти новые строки, если они содержат какие-либо из подстроки из фрейма данных выше.

new_substrings = {'foo' : [0,1,0] ,
       'bar' : [1,1,0],
       'ist' : [1,0,0],
       'sta' : [1,0,0]}


new_df = pd.DataFrame(new_substrings)

1 Ответ

1 голос
/ 13 июля 2020

Добраться до new_substrings можно с помощью двойного понимания списка. Внутреннее понимание проходит через все записи в new_string, а внешнее создает словарь для всех sub_strings:

import re

new_strings = ['barista', 'barfoo', 'house']
sub_strings = ['foo', 'bar', 'ist', 'sta']
new_substrings= {sub_s: [ (re.search(sub_s, s) is not None)*1 for s in new_strings] for sub_s in sub_strings}
print(new_substrings)

Это возвращает:

{'foo': [0, 1, 0], 'bar': [1, 1, 0], 'ist': [1, 0, 0], 'sta': [1, 0, 0]}

Затем вы можете создать свой фрейм данных с df = pd.DataFrame(new_substrings).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...