2012-05-05 117 views
0

让我们看起来像从原始数据获取趋势

chain of digits time 
23 67 34 23 54 | 12:34 
23 54   | 12:42 
78 96 23  | 12:46 
56 93 23 54 | 12:48 

我需要找到很多数据编号链的发展趋势(长,秋天,稳定)。在我的例子中,它可能是23 54或23. 另外我想找到趋势之间的不同关系。数据非常大。它可能是数十亿行。你能建议任何书籍文章或算法?请注意,我只需要关于这种数据类型的趋势和相关性的信息。我不需要基本的数据挖掘书籍。

+0

我认为通常解决这个问题*(即对序列大小,行数,可用内存或执行分析所需的时间没有限制)可能没有用处。问题可能没有*通用*解决方案,效率高(我不确定)。这可能是一个例子,它可以为你提供更广泛的内容来解决问题*的最相关的子集,从而牺牲理想的解决方案,但是总能让人满意。 –

+0

顺序关联分析 –

回答

0

下面是一个算法的粮食。它当然不会被刷新或测试,并且可能不完整。我只是把它放在这里作为一个可能的出发点。

看来最具挑战性的问题是运行算法在数十亿行所需的时间,通过内存限制可能紧随其后。

我也相信参与解决这一问题的根本任务,以“比较一组号码与另一个”单操作可定位一组共享。

因此,我可能会建议以下(粗糙)的办法,以应对时间,内存:

(1) Consolidate multiple sets into a single, larger set. 

即,连续服用100套(在你的榜样,23, 67, 34, 23, 5423, 5478, 96, 23,并将下面的97套),并简单地一起将它们合并成一个单一的(忽略重复)。

(2) Give each *consolidated* set from (1) a label (or index), 
and then map this set (by its label) to the original sets that compose it. 

这样,你就能检索(查找)原单独设置23, 67, 34, 23, 54

(3) The data is now denormalized - there are a much smaller number of sets, and each set is much larger. 

现在,算法移动到一个新的阶段。

(4) Develop an algorithm to look for matching sequences between any two of these larger sets. 

会有很多误报;但是,希望数据的性质是,误报不会“毁掉”这种方法所获得的效率。

我不提供一个算法来在这里执行2个独立的集合之间的匹配;我假设你可以自己想出一个(对这两套进行排序等)。

(5) For every possible matching sequence found in (4), iterate through the individual sets that compose 
the two larger sets being compared, weeding out false positives. 

我怀疑上述步骤可以显着优化,但这是基本思路。

此时,您将拥有构成两个较大集合的所有原始集合之间的所有匹配序列进行比较。

(6) Execute steps (4) and (5) for every pair of large sets constructed in (2). 

现在,您将拥有所有匹配的序列 - 带有重复项。

(7) Remove duplicates from the set of matching sequences. 

只是一个想法。

+0

谢谢丹!但我认为我找到了解决我的问题的关键字。它是顺序模式和时序串行模式。所以这是典型的数据挖掘任务,我可以使用这些领域的算法,如AprioriSome,DynamicSome等。 – Neir0

+0

没有数据挖掘任务是典型的数据挖掘任务。希望它顺利! –

+0

我看到“顺序模式”这个词。如果您对顺序模式挖掘感兴趣,可以查看我的顺序模式挖掘项目:http://www.philippe-fournier-viger.com/spmf/它不会帮助您发现趋势。但它可以帮助您发现几个序列共有的子序列。该项目提供了46种带有用户界面的Java算法。祝你的项目好运! – Phil