np.random.choice не делает выборку как обозначенные вероятности. - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь пересчитать мои выборочные данные для расчета стандартной ошибки начальной загрузки.Но результаты не соответствуют обозначенным вероятностям, которые я сделал.

для 'p' в numpy.random.choice (a, size = None, replace = True, p = None), я составил список вероятностей , который равен

[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']]

Можете ли вы объяснить, почему мои коды не используют указанную мной вероятность?

1 Ответ

0 голосов
/ 02 января 2019

Подпись вызова для numpy.random.choice:

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)
...