我必须经常进行非常昂贵的计算。
计算需要一小部分数字(大约20个条目)总和为1(即直方图)并输出一些我可以很容易存储的数据。
我有两件事要做:
因此,我想建立一个离线答案的查找表。然后,当系统运行时,我可以根据输入直方图的“形状”查找近似答案。
准确地说,我计划查找与直方图相对应的预先计算的答案,其中最小的地球 - 移动距离与实际输入直方图相对应。
我只能在我的查找表中存储大约80到100个预先计算的(直方图,计算结果)对。
那么,我如何“展开”我的预先计算的直方图,这样无论输入直方图是什么,我都会有一个“接近”的预先计算结果?
答案 0 :(得分:3)
在 M -space中查找 N 点是最佳展开集,与超球面包装大致相同( 1,2)以及 M > 10的一般答案。虽然已经进行了大量的研究来开发更快的超球填料或近似方法,但它仍然被认为是一个难题。
最好将 principal component analysis 或 factor analysis 这样的技术应用到一组直方图中,方便您生成。任一分析的结果将是一组 M 数,使得由这些数加权的直方图数据元素的线性组合将预测某些目标函数。该功能可能是“你可以很容易存储的东西”数字,或者可能是案例编号。另请考虑开发和培训 neural net 或使用其他 predictive modeling 技术来预测目标函数。
答案 1 :(得分:1)
我是第二个jwpat7的答案,但我非常天真的方法是将每个直方图bin中的项目数量视为y
值,将x
值视为0..1
20个步骤,然后获取将a
描述为三次函数的参数b
,c
,x vs y
。
要获得直方图的“覆盖”,我只是迭代了每个参数的“可能”值。
e.g。得到27个直方图来覆盖我的立方直方图模型的“形状空间”,我通过-1 .. 1
迭代参数,选择3个线性间隔的值。
现在,如果您认为您的数据通常以这种方式表示,或者您认为最具描述性的模型,以及生成许多直方图,您可以将直方图模型更改为四次。我使用了27,因为三个参数的每个参数有三个分区3*3*3=27
。
要获得更全面的内容,例如100
,您必须更仔细地为每个参数选择范围。 100**.3
不是整数,因此简单的num_covers**(1/num_params)
解决方案不起作用,但对于3个参数4*5*5
将会起作用。
由于参数的实际值可能变化很大并且仍然可以获得相同的形状,因此最好存储它们的比率以进行比较,例如,对于我的3个参数b/a
和b/c
。
这是一个81直方图“覆盖”使用四次模型,同样参数选自linspace(-1,1,3)
:
编辑:既然你说你的直方图是由大约20个元素的数组描述的,我认为拟合参数会非常快。
edit2 第二个想法我认为在模型中使用常量是没有意义的,重要的是形状。
答案 2 :(得分:1)
在@jwpat7的答案的基础上,我会将k-means clustering应用于一组随机生成的(并且有希望代表性的)直方图。这将确保您的空间跨越您可以支持的任意数量的样本(预先计算的结果),每个群集的权重大致相等。
当然,诀窍是首先生成代表性数据进行聚类。如果您可以不时重新计算,则可以根据系统中的实际数据进行重新集群,以便您的集群可能会随着时间的推移而变得更好。