问题标签 [probability]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
147 浏览

python - 如何一次针对列表中的 2 个随机元素运行循环?

假设我在 python 中有一个列表,其中包含几个字符串。我不知道大小。如何运行循环对该字符串的 2 个随机元素进行操作?

如果我想在这个随机化中偏爱某个字符串子集,以便更频繁地选择,但仍然有可能不选择它们怎么办?

0 投票
3 回答
8799 浏览

statistics - 确定两个误差值之间的差异是否显着

我正在评估许多不同的算法,它们的工作是预测事件发生的概率。

我正在大型数据集上测试算法。我使用“均方根误差”来衡量它们的有效性,它是((误差之和)平方)的平方根。误差是预测概率(0 到 1 之间的浮点值)与实际结果(0.0 或 1.0)之间的差异。

所以我知道 RMSE,以及算法测试的样本数量。

问题是有时 RMSE 值彼此非常接近,我需要一种方法来确定它们之间的差异是否只是偶然,或者它是否代表了实际的性能差异。

理想情况下,对于给定的 RMSE 值对,我想知道其中一个确实比另一个更好的概率是多少,以便我可以将此概率用作显着性阈值。

0 投票
6 回答
10685 浏览

java - 生成 N 个总和为 1 的数字

给定一个大小的数组,n我想为每个索引生成随机概率,使得Sigma(a[0]..a[n-1])=1

一种可能的结果可能是:

另一个完全合法的结果可能是:

我怎样才能轻松快速地生成这些?任何语言的答案都可以,Java 优先。

0 投票
4 回答
1176 浏览

statistics - 如何评估预测概率的算法的有效性?

我需要评估预测某事发生概率的算法的有效性。

我目前的方法是使用“均方根误差”,即。误差平方均值的平方根,如果事件发生,则误差为1.0 预测,如果事件未发生,则为预测

这些算法没有特定的应用,但一个常见的应用是对各种选项中的每一个发生的事件进行预测,然后选择使该概率最大化的选项。对我们的好处与预期事件在具有最高预测概率的选项中发生的比率成正比。

有人建议 RMSE 可能不是最好的选择,我对其他人的意见感兴趣。

0 投票
5 回答
1034 浏览

language-agnostic - 概率论与项目规划

我正在管理一个必须根据粗略要求和规范进行估算的项目。因此,对特定特征和任务的估计是一组离散值,而不仅仅是一个离散值(例如,在 10 到 20 之间,而不是正好 17)。

我很好奇,如果我想了解在最低估计范围内完成某项任务的近似概率,我应该如何处理?为了讨论,请忽略我的估计技能,使用的平台等因素。

我正在考虑使用泊松分布,λ = (low + high) / 2,假设每个提议值的概率都遵守罕见事件/正态分布的规律。这并不能说明超出我的估计限制的可能性不大,但仍然......

您对此有何看法,您会选择哪种方法进行此类实验?

0 投票
1 回答
2144 浏览

python - 从 numpy 中的联合 pmfs 计算条件概率,太慢了。想法?(python-numpy)

我有一个联合概率质量函数数组,其形状例如 (1,2,3,4,5,6),我想计算概率表,以某些维度的值为条件(导出 cpts) , 用于决策目的。

我现在想出的代码如下(输入是 {'variable_1': value_1, 'variable_2': value_2 ... } 形式的字典“vdict”)

...

所以,我目前做的是:

  1. 我将变量转换为 cpt 中的相应维度。
  2. 我将第零轴与之前找到的轴交换。
  3. 我只用所需的值替换整个 0 轴。

我把维度放回原来的轴。

现在,问题是,为了执行第 2 步,我必须 (a.) 计算一个子数组,并且 (b.) 将其放入一个列表并再次将其转换为数组,这样我就有了我的新数组。

事情是,粗体的东西意味着我创建新对象,而不是只使用对旧对象的引用,如果 d 非常大(这发生在我身上)并且使用 d 的方法被调用多次(再次,发生在我身上)整个结果非常缓慢。

那么,有没有人想出一个想法,可以让这小段代码变得更简单,并且运行得更快?也许可以让我计算适当的条件。

注意:我必须保持原始轴顺序(或者至少要确定在删除轴时如何将变量更新为尺寸字典)。我不想诉诸自定义 dtypes。

0 投票
1 回答
819 浏览

c++ - 选择概率与信任成正比的节点

有谁知道与选择项目相关的算法或数据结构,它们被选择的概率与某些附加值成正比?换句话说:http ://en.wikipedia.org/wiki/Sampling_%28statistics%29#Probability_proportional_to_size_sampling

这里的上下文是一个去中心化的信誉系统,因此附加价值是一个用户对另一个用户的信任价值。在这个系统中,所有节点要么作为完全信任的朋友开始,要么作为完全不信任的未知节点开始。这在大型 P2P 网络中本身并没有用,因为节点数量会比您拥有的朋友多得多,并且您需要知道在不是您直接朋友的大量用户中信任谁,所以我实现了一个动态信任系统,其中未知数可以通过朋友的朋友关系获得信任。

每隔一段时间,每个用户都会选择一个固定数量的目标节点(为了速度和带宽),以根据另一个选定的固定数量的中间节点对他们的信任程度来重新计算他​​们的信任。选择目标节点进行重新计算的概率将与其当前信任成反比,因此未知数很有可能变得更好。中间节点将以相同的方式被选择,除了中间节点的选择概率与其当前信任成正比。

我自己编写了一个简单的解决方案,但是速度很慢,我想找到一个 C++ 库来为我处理这方面的问题。我当然已经完成了自己的搜索,并且我设法找到了我现在正在挖掘的 TRSL。由于这似乎是一个相当简单且可能很常见的问题,我希望有更多的 C++ 库可供我使用,所以我提出这个问题是希望这里有人可以对此有所了解。

0 投票
1 回答
564 浏览

algorithm - Miller-Rabin 方案实现不可预测的输出

我是Scheme的新手。我已经尝试并使用 PLT Scheme 实现了 Rabin-Miller 算法的概率变体。我知道这是概率性的,但我大部分时间都得到错误的结果。我用 C 实现了同样的东西,而且效果很好(从来没有失败过)。我在调试时得到了预期的输出,但是当我运行时,它几乎总是返回错误的结果。我使用了来自Wikipedia的算法。

另外,我是否在 Scheme 中以正确的方式编程?(我不确定我使用的循环部分的中断call/cc。我在某个网站上找到了它,从那以后一直在使用它。)

提前致谢。

0 投票
3 回答
3286 浏览

math - 单场淘汰锦标赛 - 可能组合的数量

8 人参加单场淘汰赛的组合数是多少?比赛总数为 7 场,但我还需要这组比赛的组合数

0 投票
3 回答
1366 浏览

ruby - 这个修改后的二十一点游戏的最佳获胜策略是什么?

问题

是否有最好的价值让我赢得尽可能多的比赛?如果是这样,它是什么?

编辑:对于给定的限制,是否存在可以计算出的确切获胜概率,而与对手的行为无关?(自大学以来我没有做过概率和统计)。我有兴趣将其视为与我的模拟结果进行对比的答案。

编辑:修复了我的算法中的错误,更新了结果表。

背景

我一直在玩一个修改后的二十一点游戏,其中一些相当烦人的规则调整来自标准规则。我将与标准二十一点规则不同的规则用斜体表示,并为不熟悉的人添加了二十一点规则。

修改后的二十一点规则

  1. 正好是两个人类玩家(庄家无关)
  2. 每个玩家发两张牌面朝下
    • 玩家_ever_都不知道对手的_any_张牌的价值
    • 在_双方_都完成手牌之前,两位玩家都不知道对手手牌的价值
  3. 目标是尽可能接近 21 分。结果:
    • 如果玩家的 A 和 B 得分相同,则游戏为平局
    • 如果玩家的 A 和 B 的分数都超过 21(一个失败),则游戏为平局
    • 如果玩家 A 的分数 <= 21 并且玩家 B 已出局,则玩家 A获胜
    • 如果玩家 A 的分数大于玩家 B 的分数,并且两者都没有破坏,则玩家 A获胜
    • 否则,玩家 A 输了(B 赢了)。
  4. 卡片价值:
    • 卡片 2 到 10 值相应数量的积分
    • J、Q、K 牌值 10 分
    • 王牌牌值 1 或 11 点
  5. 每个玩家可以一次申请一张额外的牌,直到:
    • 玩家不再想要(留下)
    • 玩家的得分,任何 A 计为 1,超过 21(失败)
    • 双方玩家都不知道对方在任何时候使用了多少张牌
  6. 一旦两名玩家都留下或出局,则根据上述规则 3 确定获胜者。
  7. 每手牌后,整副牌重新洗牌,所有 52 张牌再次出局

什么是一副纸牌?

一副牌由 52 张牌组成,以下 13 个值各有 4 张:

2、3、4、5、6、7、8、9、10、J、Q、K、A

卡的其他属性不相关。

一个 Ruby 表示是:

算法

我一直在接近这个如下:

  • 如果我的分数是 2 到 11,我会一直想击中,因为不可能爆破
  • 对于 12 到 21 的每一个分数,我将模拟 N 手对抗对手
    • 对于这 N 手,分数将是我的“极限”。一旦我达到极限或更高,我会留下来
    • 我的对手将遵循完全相同的策略
    • 我将为集合 (12..21)、(12..21) 的每个排列模拟 N 手牌
  • 打印每个排列的输赢差以及净赢输差

这是用 Ruby 实现的算法:

用法

该脚本默认为 100,000 次迭代和 4 个卡组。在快速的 macbook pro 上,100,000 大约需要 5 分钟。

输出(N = 100 000)

解释

这就是我挣扎的地方。我不太确定如何解释这些数据。乍一看,似乎总是停留在 16 或 17 是要走的路,但我不确定这是否那么容易。我认为一个真正的人类对手不太可能停留在 12、13 甚至 14,所以我应该扔掉那些反对者限制值吗?另外,我如何修改它以考虑到真实人类对手的可变性?例如,一个真正的人可能仅基于“感觉”而停留在 15 上,也可能基于“感觉”而击中 18