gpt4 book ai didi

python - 以相等的概率从 Pandas 组中随机选择——意想不到的行为

转载 作者:太空宇宙 更新时间:2023-11-03 14:52:24 26 4
gpt4 key购买 nike

我尝试从 12 个独特的组中随机抽样,每个组都有不同数量的观察值。我想从整个人口(数据框)中随机抽样,每组被选中的概率相同。最简单的示例是包含 2 个组的数据框。

    groups  probability
0 a 0.25
1 a 0.25
2 b 0.5

使用 np.random.choice(df['groups'], p=df['probability'], size=100) 现在每次迭代都有 50% 的机会选择 group a 并且有 50% 的机会选择 group b

为了得出概率,我使用了以下公式:

(1. / num_groups) / size_of_groups

或在 Python 中:

num_groups = len(df['groups'].unique())  # 2
size_of_groups = df.groupby('label').size() # {a: 2, b: 1}
(1. / num_groups) / size_of_groups

哪个返回

    groups
a 0.25
b 0.50

在我超过 10 个独特的组之前,这一直很有效,之后我开始得到奇怪的分布。这是一个小例子:

np.random.seed(1234)

group_size = 12
groups = np.arange(group_size)

probs = np.random.uniform(size=group_size)
probs = probs / probs.sum()

g = np.random.choice(groups, size=10000, p=probs)
df = pd.DataFrame({'groups': g})

prob_map = ((1. / len(df['groups'].unique())) / df.groupby('groups').size()).to_dict()

df['probability'] = df['groups'].map(prob_map)

plt.hist(np.random.choice(df['groups'], p=df['probability'], size=10000, replace=True))
plt.xticks(np.arange(group_size))
plt.show()

Histogram

我希望样本量足够大,分布相当均匀,但当组数超过 11 时,我得到了这些翅膀。如果我将 group_size 变量更改为 10 或更低,我确实会得到所需的均匀分布。

我不知道问题是出在我计算概率的公式上,还是出在浮点精度问题上?任何人都知道完成此操作的更好方法或此示例的修复方法?

提前致谢!

最佳答案

您正在使用 hist默认为 10 bins...

enter image description here

plt.rcParams['hist.bins']

10

group_size 作为 bins 参数传递。

plt.hist(
np.random.choice(df['groups'], p=df['probability'], size=10000, replace=True),
bins=group_size)

enter image description here

关于python - 以相等的概率从 Pandas 组中随机选择——意想不到的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44979788/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com