我正在尝试对样本数据重新采样以计算引导程序标准错误。但是结果与我确定的概率不符。
对于numpy.random.choice(a,大小=无,replace = True,p =无)中的“ 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个情感词,但是结果均匀分布如下。
[[''anger''128'] ['鄙视''140'] ['厌恶''101'] ['恐惧' '134'] ['happy''121'] ['neutral''120'] ['sad''123'] ['surprise' '133']]
您能解释为什么我的代码不使用我指定的概率吗?
答案 0 :(得分:2)
numpy.random.choice(a, size=None, replace=True, p=None)
请注意,p
是第4个参数,而不是第3个参数。
因此,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)