记录统计摘要

时间:2010-01-31 00:13:07

标签: c# math statistics

以下是我们正在解决的现实问题。我们有一些相当大的数据集需要实时汇总和汇总,并应用了大量的过滤器和公式。当数据集小于50,000条记录时,它可以实时地将这些应用于每条记录,但是当我们接近100,000,然后是100多万时,对所有记录进行实时数学计算的开销变得太大了。我们花了很多时间在SQL中进行优化,然后假设在ram中抛出整个数据集,我们仍然得出结论,我们需要从数据中“缩小”并总结组。我们需要一种方法将记录组合​​在一起,然后将数学应用于一组“类似记录”。这些记录的结合使我们能够非常快速地进行实时报告。我们当前的解决方案组记录集完全相同。

这是一个示例记录

ID77968 1,43:19.7,43:19.7,TRUE,1,3,0,4,1,1,1,1,1,0,0,0,3,0,0,0,0,14,14 ,79,

因此,如果我们有两个具有完全相同的数据

ID77968 1,43:19.7,43:19.7,TRUE,1,3,0,4,1,1,1,1,1,0,0,0,3,0,0,0,0,14,14 ,79,
ID77969 1,43:19.7,43:19.7,TRUE,1,3,0,4,1,1,1,1,1,0,0,0,3,0,0,0,3,14,79,

然后我们创建一个组。然后我们可以将数学和逻辑应用于单个组,然后将结果乘以2以得到真正的答案。这对我们来说非常有用,并且可以非常有助于解决项目的规模问题。那说我们现在有一个新问题。我们的一些值具有更大的结果范围,这些结果创建了数千条记录的数据集,其中只有几条完全相同。在一些头脑风暴之后,我们想出了一个应用一些“模糊”逻辑来将相似的东西组合在一起的想法。我们现在面临的问题是,我们不知道将记录集减少到不完全相同的组的最佳统计上合理的方法。

这是我们需要做的。 (简单示例,单列)

假设我们有以下数字20个数字

106
0
8
0
1
0
4
0
3474
0
204个
0
75个
0
128个
0
617个
0
20个
0

在上面的集合中,我们有很多0,所以这些很容易组合在一起。但我如何形成让我们再说3组。我认为在外部界限上我们有3474但是如果加权低于该数字,则出站组可能类似于2000,然后将值3474和617组合成一个组。我们的团队会议认为这是一个引力问题或更为人所知的cheerio吸引力。理想情况下,我们会找到一个方程式或方法,让我们看一下整个记录集,然后在X个组中表达。这将允许我们改变数据的分组/聚集。因此,假设我们使用上面的示例20个数字,并希望在15个组中表达这个,而我们能够做到这一点的8个组。现在请记住,在上面的例子中,这只是一个列,但我试图将整个记录分组,如

ID77968 1,43:19.7,43:19.7,TRUE,1,3,0,4,1,1,1,1,1,0,0,0,3,0,0,0,0,14,14 ,79,

ID77969 1,43:19.4,43:19.7,TRUE,1.2,3.2,0,3,2,1,1,1,0,0,0,3,0,0,0,0,14,14 ,179,

感谢您的帮助


这是基于一些评论,问题和答案的更新

我们当前对每条记录进行哈希处理,然后如果记录具有相同的哈希值,我们将其分组。这里哈希的问题是,如果它完全相同,那么它就不会被分组。这对我们来说已经有一段时间了,因为我们在每一栏中的价值观都是相对有限的。我们现在已经介绍了一些具有更大范围的值,这些值使得我们的哈希分组无效。在我们能够获取100mm记录并将它们散列到超过100k组之前,我们现在看到的集合中的neew数据只有70k,所有70k都是唯一的。这里有详细标识的数据:Copy of rv.zip (3,58 MB)

3 个答案:

答案 0 :(得分:1)

我同意我们需要更多信息才能为您提供最佳建议。

如果您需要对大量传入数据进行实时分析,您可能需要查看流式传输算法。许多流式算法实际上并不试图存储所有传入的数据,而是使用每个新的数据点来更新您关心的实时模型。这种算法在网络流量分析等情况下非常有用,其中高级别趋势比每个单独的数据包更重要。

一个例子是在线k-means,它实际上不存储每个新数据点,然后在整个数据集上运行k-means,而是使用新数据点更新当前的均值集,然后丢弃它。

另一件需要考虑的事情是相关记录的某种类型的有损压缩,如矢量量化(VQ)(有许多不同风格的VQ,有监督(LVQ)和无监督)。这将允许您用代表该组的原型记录替换“类似”记录。

答案 1 :(得分:0)

我们需要更多地了解您应用于数据的算法,因为可以通过不断地对新数据求和来计算某些东西(这可能只是Eric D.评论的重写)

否则,请考虑在最近n天或几个月的记录中运行算法,然后在一段时间内绘制结果图表。

答案 2 :(得分:0)

每行基本上是n空间中的向量,“相似”行是 距离低于给定阈值的矢量。我解决的一种方法 过去类似的东西,但规模要小得多,已经到了 使用递归哈希算法。

您首先使用表示整个矢量范围的哈希表。您可以一次向表中添加一个向量,一旦达到每个表的给定限制L个向量,该表将自身划分为跨越向量范围的P个不相交子集。添加到顶级表的新向量将路由到正确的子表,算法将进行递归。在指定范围内,哈希表将停止分割并将其所有子向量分组为单个向量。

当您处理完整个数据库时,最终结果是一个哈希表树,其数据集的密集区域的深度增加。您可以根据密集区域的数量来决定需要哪些组,为自己的组提供异常值并将密集组放入同一组中。

我不确定你处理的行数有多可行,但似乎任何解决方案都需要大量的计算。