一种热编码未观察到的字符列表
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了一种热编码未观察到的字符列表相关的知识,希望对你有一定的参考价值。
我正在尝试为字符列表创建一个热编码(ohe),以允许未观察到的等级。使用Convert array of indices to 1-hot encoded numpy array和Finding the index of an item given a list containing it in Python的答案,以下确实是我想要的:
# example data
# this is the full list including unobserved levels
av = list(map(chr, range(ord('a'), ord('z')+1)))
# this is the vector to apply ohe
v = ['a', 'f', 'u']
# apply one hot encoding
ohe = np.zeros((len(v), len(av)))
for i in range(len(v)): ohe[i, av.index(v[i])] = 1
ohe
是否有更标准/更快的方法来执行此操作,请注意,上面的第二个链接提到了.index()
的瓶颈。
((我的问题的规模:完整向量(av)具有〜1000个水平,并且ohe(v)的值的长度为0.5M。谢谢。
答案
您可以使用查找字典:
# example data
# this is the full list including unobserved levels
av = list(map(chr, range(ord('a'), ord('z')+1)))
lookup = { v : i for i, v in enumerate(av)}
# this is the vector to apply ohe
v = ['a', 'f', 'u']
# apply one hot encoding
ohe = np.zeros((len(v), len(av)))
for i in range(len(v)):
ohe[i, lookup[v[i]]] = 1
.index
的复杂度是O(n)
相对于在O(1)
的字典中查找。
以上是关于一种热编码未观察到的字符列表的主要内容,如果未能解决你的问题,请参考以下文章