【问题标题】:np.random.choice doesn't do sampling as designated probabilities.np.random.choice 不会将采样作为指定概率进行。
【发布时间】:2019-01-02 02:20:25
【问题描述】:

我正在尝试重新采样我的样本数据以计算引导标准误差。但结果与我指定的概率不符。

对于 numpy.random.choice(a, size=None, replace=True, p=None) 中的“p”,我分配了一个 概率列表,即

[0.190872103, 0.120820803, 0.115160092, 0.008137272, 0.029541836, 0.0, 0.535467893, 0.0] 分别表示 ['中性'、'快乐'、'悲伤'、'惊喜'、'恐惧'、'厌恶'、'愤怒'、'蔑视']。

data = pd.read_csv(path+'shawshank_FER_entropy.csv', encoding = 'utf-8', delimiter='\t')

emo_list = ['neutral', 'happy', 'sad', 'surprise', 'fear', 'disgust', 'anger','contempt']

pb = data.andy
p = [float(pb.iloc[11]),float(pb.iloc[12]),float(pb.iloc[13]),float(pb.iloc[14]),float(pb.iloc[15]),float(pb.iloc[16]),float(pb.iloc[17]),float(pb.iloc[18])]

print(p)
emo_sample = np.random.choice(emo_list, 1000, p)

print(emo_sample)

unique, counts = np.unique(emo_sample, return_counts=True)
print(np.asarray((unique, counts)).T)

我希望结果是 1000 个情感词按照我指定的概率分布,但结果均匀分布如下。

[['愤怒''128'] ['鄙视''140'] ['厌恶''101'] ['恐惧' '134'] ['快乐' '121'] ['中性' '120'] ['悲伤' '123'] ['惊喜' '133']]

你能解释一下为什么我的代码不使用我指定的概率吗?

【问题讨论】:

  • 根据docs.scipy.org/doc/numpy-1.15.0/reference/generated/…,您指定了replace,而不是概率。
  • @dyukha replace 是可选的布尔参数,所以我跳过了它。我指定的是“p”。
  • 您误解了可选参数。 unutbu 的回答详细解释了这一点。
  • @dyukha 是的,你是对的。我错误地将“p”仅用于第 4 个参数。

标签: python numpy sampling


【解决方案1】:

The call signature 的 numpy.random.choice 是:

numpy.random.choice(a, size=None, replace=True, p=None)

注意p 是第四个参数,而不是第三个。 所以emo_sample = np.random.choice(emo_list, 1000, p)p 分配给replace 参数而不是p 参数:

numpy.random.choice(a, size=None, replace=p, p=None)

解决此问题的一种方法是使用关键字参数:

emo_sample = np.random.choice(emo_list, 1000, p=p)

【讨论】:

  • 谢谢,它成功了。我想我可以跳过第三个参数,只使用“p”作为概率参数。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-07
  • 2013-12-28
  • 2017-09-22
  • 2016-05-21
相关资源
最近更新 更多