np.random.choice 不按照指定概率进行抽样。
np.random.choice doesn't do sampling as designated probabilities.
我正在尝试对样本数据重新采样以计算 bootstrap 标准误差。但是结果与我指定的概率不符。
for 'p' in numpy.random.choice(a, size=None, replace=True, p=None), 我分配了一个 list概率 即
[0.190872103, 0.120820803, 0.115160092, 0.008137272, 0.029541836, 0.0,
0.535467893, 0.0] 对于 ['neutral', 'happy', 'sad', 'surprise', 'fear', 'disgust', 'anger','contempt'] 每个。
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'] ['contempt' '140'] ['disgust' '101'] ['fear'
'134'] ['happy' '121'] ['neutral' '120'] ['sad' '123'] ['surprise'
'133']]
你能解释一下为什么我的代码没有使用我指定的概率吗?
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)
我正在尝试对样本数据重新采样以计算 bootstrap 标准误差。但是结果与我指定的概率不符。
for 'p' in numpy.random.choice(a, size=None, replace=True, p=None), 我分配了一个 list概率 即
[0.190872103, 0.120820803, 0.115160092, 0.008137272, 0.029541836, 0.0, 0.535467893, 0.0] 对于 ['neutral', 'happy', 'sad', 'surprise', 'fear', 'disgust', 'anger','contempt'] 每个。
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'] ['contempt' '140'] ['disgust' '101'] ['fear' '134'] ['happy' '121'] ['neutral' '120'] ['sad' '123'] ['surprise' '133']]
你能解释一下为什么我的代码没有使用我指定的概率吗?
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)