无法生成随机的分类标签数组

Not able to generate a random array of categorical labels

我有一个带有固定种子的随机状态,我正在使用它来使我的预测结果可复制:

rng = np.random.RandomState(101)
len(finalTestSentences) = 500

我正在尝试使用此种子通过唯一的可能性列表生成一组随机分类变量。这是一个示例(我在训练标签上使用 set 来生成我拥有的唯一标签):

unique_train_labels = set([u'bla', u'blee', u'blu', u'ma'])

然后我做:

categorical_random = np.array[rng.choice(unique_train_labels, len(finalTestSentences))]

但我得到:

categorical_random = np.array[rng.choice(unique_train_labels, len(finalTestSentences))]
  File "mtrand.pyx", line 1072, in mtrand.RandomState.choice (numpy/random/mtrand/mtrand.c:11545)
ValueError: a must be 1-dimensional or an integer

请注意,这是来自此解决方法 here

出了什么问题,我该如何实现我的目标?

如果您查看 np.random.choice 的定义,您会发现人口 a 通过

转换为 numpy 数组
a = np.array(a, copy=False)

如果a是集合,转换有点不同。例如,np.array([1, 2, 3]) 给出了一个包含三个元素的数组:array([1, 2, 3])np.array({1, 2, 3}) 给出了一个包含单个元素的数组,其中该元素是一个集合。由于维数问题,numpy引发了ValueError。

为避免这种情况,您可以将您的集合转换为列表:

rng.choice(list(unique_train_labels), len(finalTestSentences))

或直接使用np.unique获取唯一标签:

rng.choice(np.unique([u'bla', u'blee', u'blu', u'ma']), len(finalTestSentences))