【问题标题】:What are good implementations of high dimensional volume estimation in Python?Python中高维体积估计的好的实现是什么?
【发布时间】:2018-08-10 06:59:27
【问题描述】:

我想在 Python 中估计一个高维形状的体积。我有一个预言机来查询我是否在形状内。我处于高维度(至少32*32=1024 维度)。理想情况下,我不想自己实现它,因为:

  1. https://arxiv.org/pdf/1401.0120.pdf 范围内的论文似乎技术含量很高,而且似乎非专家很容易出错
  2. 这似乎是一道标准数学问题(估计高亮度下的体积),因此假设存在比我可以在 python 中破解的代码更好的优化代码似乎是明智的。

有人知道解决这个问题的好方法吗?我应该继续实施我链接的论文中的那个吗?


不确定数学技术限制可能是什么,但是:

  1. 我可以访问显示 +1 或 -1 的预言机,具体取决于我是否在形状内。
  2. 我想估计凸形的形状

现在我只是想继续执行类似的实现:

  1. 决定一个最有可能包含我想要估计的形状的真正出价范围
  2. 采样许多点(很高兴知道我需要采样多少能够很好地估计我的形状)

但是,由于这似乎是一个微妙的技术领域,如果我可以避免它,我宁愿不要太老套(特别是如果我可以得到样本数量的理论保证)


我发布问题之前的相关链接:

【问题讨论】:

  • 我怀疑普通抽样是否可行。作为一个简单的例子,假设你的形状是一个边 L 的 1024 维立方体,并且你从边 1 的包含立方体中均匀采样。如果 L 是 0.99,那么小立方体的体积大约是 3.4e-5,所以如果你画100000 个样本你可能会得到 10% 的体积。但如果 L 为 0.9,则体积约为 1.4e-47,您将永远采样...
  • @AlexisOlson dam,这似乎需要(1024^4)/(60*60*24*365)=34.865K 年。好吧,我想我需要一种不同于建议的方法。
  • 你试图解决这个问题的应用是什么?也许不同的攻击角度会更好。
  • @AlexisOlson 我正在解决的问题在我相信的问题中有所描述,但要点是我想通过查询一个告诉我我是否是的预言机来估计(未知)形状的体积是否在形状内。
  • 让我再试一次@AlexisOlson 的问题:人们通常不会醒来说“今天,我需要通过查询预言机来估计未知形状的体积”。更有可能是“我需要通过赢得比赛来估算这本书可以获得 30 美元,这样我才能购买这本自传”,在这种情况下,我们可以提出更简单的方法来赚取 30 美元,或者二手书店,或者我们可以警告你这本书是自私的,有许多明显的遗漏。如果你只是想让音量令人赞叹,没有什么可做的,但知道你想要它的原因可以帮助你找到通往最终目标的新途径。

标签: python math


【解决方案1】:

这就是你的问题的答案:你需要多少个样本点来估计一些高维区域的体积。

假设集合 K 包含在某个封闭集合 B 中,该集合 B 的体积已知为 1,但不失一般性。用 V 表示 K 的未知体积。令 f(x) 表示 K 的指示函数:如果 x 在 K 中,则 f(x) = 1,如果 x 不在 K 中,则 f(x) = 0。(抱歉, stackoverflow 上没有 LaTeX)。

显然,V正是期望E[f(x)],也就是概率P[f(x)=1],其中随机变量x在B中均匀随机抽取。此外,方差var(f(x)) 正好是 V(1-V),介​​于 0 和 0.25 之间。

对于x1,...,xn在B中均匀且独立地随机绘制,考虑和Sn = ( f(x1) + ... + f(xn))/n。中心极限定理说 Sn 是渐近正态分布 N(V,var(f(x))/n),所以 Sn 的标准差为sqrt(V(1-V)/n)。因此,如果您想要概率 p = 0.999999998027(即 6 个标准差)的 ε 绝对精度(即 |Sn-V|≤ε),则应取 n = 36V(1-V )/ε2.

特别是当 V 很小时,您将需要一个相对容差,即 ε = δV。然后,你需要 n = 36(1-V)/(Vδ2)。

您在这里看到的问题是,在 V 很小的情况下很难获得严格的准确度,但造成这种情况的糟糕之处在于维度诅咒,它粗略地说 V 可能是 O(10-d) 尺寸为 d。

例如,如果 K 是半径为 1/2 的球体,内接在边 1 的立方体 B 中,则 V 近似为 (πe/(2d))d/2/sqrt(dπ ),如果你想要一个小于 100% 的相对误差,那么你只需要 n = O(dd/2) 个样本。

【讨论】:

  • 所以d>1024 基本上不可能只用一个预言机来做到这一点?
  • 我证明了直接的蒙特卡罗方法是行不通的。如果您进行更多假设,例如使用您在问题中引用的论文,那就是另一回事了。
猜你喜欢
  • 1970-01-01
  • 2022-07-01
  • 1970-01-01
  • 2010-10-17
  • 2020-07-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多