one-hot-encode 验证数据
one-hot-encode validation data
我有一个单热编码特征矩阵,其中特征是训练数据的子串。
我只有这个包含 rows = samples, columns = substrings (one-hot-encoded)
的最终数据框。
现在我想对一组新数据进行单热编码。
数据由 rows = samples, columns = String
组成,我需要检查每个样本的字符串是否包含任何子字符串(特征)并对它们进行单热编码。
遍历所有字符串和子字符串的速度不够快,因为我的数据量很大。
什么是快速解决这个问题的方法?
编辑:
例子:
我在列表中有一些字符串,并且有一个带有这些子字符串的单热编码矩阵:
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)
进入 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)
这个returns:
{'foo': [0, 1, 0], 'bar': [1, 1, 0], 'ist': [1, 0, 0], 'sta': [1, 0, 0]}
然后您可以使用 df = pd.DataFrame(new_substrings)
创建数据框。
我有一个单热编码特征矩阵,其中特征是训练数据的子串。
我只有这个包含 rows = samples, columns = substrings (one-hot-encoded)
的最终数据框。
现在我想对一组新数据进行单热编码。
数据由 rows = samples, columns = String
组成,我需要检查每个样本的字符串是否包含任何子字符串(特征)并对它们进行单热编码。
遍历所有字符串和子字符串的速度不够快,因为我的数据量很大。 什么是快速解决这个问题的方法?
编辑: 例子: 我在列表中有一些字符串,并且有一个带有这些子字符串的单热编码矩阵:
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)
进入 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)
这个returns:
{'foo': [0, 1, 0], 'bar': [1, 1, 0], 'ist': [1, 0, 0], 'sta': [1, 0, 0]}
然后您可以使用 df = pd.DataFrame(new_substrings)
创建数据框。