我们有很多看起来像
的数据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)
这是算法的粒度。它当然没有被冲洗或测试,也可能不完整。我只是把它扔出去作为一个可能的起点。
似乎最具挑战性的问题是运行算法超过数十亿行所需的时间,其次可能是内存限制。
我还认为解决这个问题所涉及的基本任务在于“将一组数字与另一组数字进行比较”的单一操作来定位共享集。
因此,我可以建议采用以下(粗略)方法,以解决时间,和内存:
(1) Consolidate multiple sets into a single, larger set.
即,连续100集(在您的示例中为23, 67, 34, 23, 54
,23, 54
,78, 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.
只是一个想法。