我想估算Python中高维形状的体积。如果我在形状内部,我有一个用于查询的oracle。我处于高维度(至少32*32=1024
维度)。理想情况下,我不想自己实施,因为:
有人知道什么是解决这个问题的好方法吗?我应该继续执行我链接的文件中的工具吗?
不确定数学技术限制可能是什么,但是:
现在我只想尝试一下类似的工具:
我发布问题之前的相关链接:
答案 0 :(得分:0)
这是您的问题的答案:您需要多少采样点来估算某些区域的高维量。
假设集合K包含在一些封闭集合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之间。
对于x 1 ,...,x n 在B中随机均匀且独立地绘制,考虑总和S n =( f(x 1 )+ ... + f(x n ))/ n。中心极限定理表明S n 渐近正态分布N(V,var(f(x))/ n),因此S n 的标准差是SQRT(V(1-V)/ N)。因此,如果你想要ε的绝对精度(即| S n -V |≤ε),概率p = 0.999999998027(即6个标准偏差),你应该采用n = 36V(1-V) )/ε 2
特别是当V很小时,您将需要相对容差,即ε=δV。那么,你需要n = 36(1-V)/(Vδ 2 )。
你在这里看到的问题是,当V很小时,很难获得紧张的精确度,但是造成这种不好的是维数的诅咒,大致上说V可能是O(10 < sup> -d )维度d。
例如,如果K是在1侧的立方体B中内接半径1/2的球体,那么V大约是(πe/(2d)) d / 2 / sqrt(dπ ),如果你想要一个小于100%的相对误差,那么你将只需要n = O(d d / 2 )样本。