以等概率从 Pandas 组中随机选择——意外行为

2024-02-02

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

    groups  probability
0       a       0.25
1       a       0.25
2       b       0.5

using 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()

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

我无法判断问题是否出在我计算概率的公式上,或者可能是浮点精度问题?有人知道更好的方法来完成此任务,或者解决此示例吗?

提前致谢!


您正在使用hist https://matplotlib.org/devdocs/api/_as_gen/matplotlib.pyplot.hist.html默认为10垃圾箱...

plt.rcParams['hist.bins']

10

pass group_size as the bins范围。

plt.hist(
    np.random.choice(df['groups'], p=df['probability'], size=10000, replace=True),
    bins=group_size)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

以等概率从 Pandas 组中随机选择——意外行为 的相关文章

随机推荐

  • 在 Go 中安装 exp/html

    看起来 Go 还不支持 HTML Web 解析工具 包 尽管它已经通过以下方式提供了 XML 抓取encoding xml 那么我该如何安装exp htmlGo 中的包 据我所知 所有的答案 至少我在网上搜索了10分钟后偶然发现的 都没有返
  • Visual Studio 的评论重花

    是否有内置命令或工具可以在 Visual Studio 中重排 C 注释 有时 一段代码需要多行注释 经过大量编辑后 您必须在适当的位置手动插入换行符 以免它超出编辑器窗口的右边缘 我希望能够通过一个键命令来完成此操作 使用 Visual
  • 使用 ggplot2 在 R 中绘制箱线图

    我是 R 新手 一直在尝试制作箱线图 显示了我正在使用的部分数据 h1 h2 h3 h4 h5 h6 h7 h8 h9 h10 1 0 003719430 0 002975544 0 003049933 0 003421876 0 0034
  • 在 Express / Connect 中配置上下文路径

    我有一个在 Expressconnect Jade Less 上使用 Coffeescript 构建的 Node js 应用程序 该应用程序将部署在几个不同的地方和不同的上下文路径上 例如 http someurl com http som
  • 每个流有多个内核的 CUDA 并发内核执行

    对 CUDA 内核使用不同的流使得并发内核执行成为可能 所以n内核上n如果流适合硬件 理论上它们可以同时运行 对吧 现在我面临以下问题 没有n不同的内核但是n m where m内核需要按顺序执行 例如n 2 and m 3将导致以下带有流
  • 如何查看linux中特定进程每5秒的内存消耗情况

    我只是想知道如何找到特定进程在特定时间 比如5秒 的内存消耗 我是linux新手 因此 详细的步骤将不胜感激 Use top p PID其中 PID 是进程 ID 应显示有关进程的信息 包括使用的系统内存百分比 类型d以及一个以秒为单位的整
  • 条件子句中的赋值是好的 ruby​​ 风格吗?

    为了写得更简洁 而不是这样做 test value method call that might return nil if test value do something with test value end 我一直在条件分配 if t
  • 当我运行 Protractor 时,“Runtime.executionContextCreated 有无效的‘上下文’错误

    当我运行量角器时 我收到以下错误 下面是我的 webstorm 控制台中显示的错误 C Program Files x86 JetBrains WebStorm 2016 2 bin runnerw exe C Program Files
  • 在 PowerShell 脚本中无法通过管道将字符串输入 cmd

    当我直接在 PowerShell 窗口中执行它时 我有以下工作调用 myexe C MyExe exe MyString myexe works Write Output MyString myexe seems to work too 但
  • Visual Studio 2017 - 允许远程用户访问 IIS Express 中的网站

    一直在浏览并尝试我找到的有关该主题的所有指南 但没有运气 我正在使用 HTTPS 运行 MVC 项目 并希望使用一些远程移动设备访问调试站点来测试该网站 我遵循了一个几乎可以工作的指南 我想我已经非常接近让它工作了 以下是我已完成的步骤 关
  • 如何获得可旋转div的四个角旋转手柄?

    我有一个div 用过Jquery UI rotatable旋转 div 的插件 我怎样才能让这个旋转手柄与绿色div的四个角一起旋转 box draggable rotatable 这是示例图像 在黑色圆形标记中我需要放置其他三个可旋转手柄
  • 使用supervisord管理docker容器的最佳方式

    我必须在上面设置 dockerized 环境 集成 质量保证和生产 same服务器 客户端的要求 每个环境的组成如下 rabbitmq celery flower 基于 python 3 的应用程序称为 A 每个特定分支 环境 在它们之上
  • XXX.exe 中发生“System.ExecutionEngineException”类型的未处理异常

    我有一个用 C 编写的 DLL 文件 我尝试在我的 C 代码中使用 C DLL C 方法调用正确 但进程完成后出现错误 异常详细信息 Completed System ExecutionEngineException 未处理 消息 Syst
  • 格式化输出流 ios::left 和 ios::right

    我有这个代码 cout lt lt std setiosflags std ios right cout lt lt setw 3 lt lt 1 lt lt setw 3 lt lt 2 lt lt n Output two values
  • 如何编写 IQueryable 来查询递归数据库表?

    我有一个这样的数据库表 Entity ID int PK ParentID int FK Code varchar Text text The ParentID字段是与同一表中另一条记录的外键 递归 所以该结构代表一棵树 我正在尝试编写一种
  • SetPixel 太慢了。有没有更快的方法来绘制位图?

    我正在开发一个小型绘画程序 我在位图上使用 SetPixel 来绘制线条 当画笔尺寸变大 例如 25 像素 时 性能会明显下降 我想知道是否有更快的方法来绘制位图 以下是该项目的一些背景 我使用位图 这样我就可以利用图层 就像在 Photo
  • typedef 函数指针递归

    我试图声明一个采用相同类型的函数作为参数的函数 void rec void f void void f f 我最终进行了递归尝试 您始终可以从void void rec void f void f f 但它不是类型安全的 我尝试用typed
  • 这是过度拟合吗?

    我有一个 CNN 它在训练数据上表现非常好 96 准确率 1 损失 但在测试数据上表现不佳 50 准确率 3 5 损失 泄密者签名过度拟合是指验证损失开始增加 而训练损失持续减少 即 图片改编自维基百科条目过拟合 https en wiki
  • 在configuration.nix中从nixos-unstable安装virtualbox模块

    可以从 nixos unstable 安装软件包 etc nixos configuration nix使用来自的配置这个答案 https stackoverflow com a 48838322 3040129 这是安装的示例htop来自
  • 以等概率从 Pandas 组中随机选择——意外行为

    我尝试从 12 个独特的组中随机抽样 每个组都有不同数量的观察值 我想从整个群体 数据框 中随机抽样 每个组都有相同的被选择概率 最简单的例子是一个包含 2 个组的数据框 groups probability 0 a 0 25 1 a 0