我有一堆回归测试数据。每个测试只是一个消息列表(关联数组),将消息字段名称映射到值。这些数据中有很多重复。
例如
test1 = [
{ sender => 'client', msg => '123', arg => '900', foo => 'bar', ... },
{ sender => 'server', msg => '456', arg => '800', foo => 'bar', ... },
{ sender => 'client', msg => '789', arg => '900', foo => 'bar', ... },
]
我想表示字段数据(作为最小深度决策树?),以便可以使用最少数量的参数以编程方式重新生成每个消息。例如,在上面的
中所以我希望能够使用
的程序重新生成这些消息write_msg( 'client', '123' )
write_msg( 'server', '456' )
write_msg( 'client', '789' )
其中write_msg函数将由嵌套的if语句或使用参数的子函数调用组成。
根据我的原始数据,我如何确定“最重要的”参数集,即能够使用最少数量的参数重新创建数据集的参数?
答案 0 :(得分:3)
以下论文描述了用于发现功能依赖性的算法:
ÿ。 Huhtala,J.Kärkkäinen,P。Porkka, 和H. Toivonen。 TANE:高效率 发现功能的算法 和近似的依赖关系。 的 计算机杂志,42(2):100-111, 1999年,doi:10.1093/comjnl/42.2.100。
予。 Savnik和P. A. Flach。自下而上 诱导功能依赖 来自关系。在Proc。 AAAI-93研讨会: 数据库中的知识发现, 第174-185页,华盛顿特区,美国, 1993年。
℃。 Wyss,C。Giannella和E. 罗伯逊。 FastFD:A 启发式驱动,深度优先 挖掘功能的算法 来自关系实例的依赖关系。 在 Proc。数据仓库和知识发现,第101-110页,慕尼黑, 德国,2001年,doi:10.1007/3-540-44801-2。
Hong Yao和Howard J. Hamilton。 “从数据挖掘功能依赖性。” 数据挖掘和知识发现,2008,doi:10.1007/s10618-007-0083-9。
还有一些关于发现多值依赖关系的工作:
予。 Savnik和P. A. Flach。 “发现 of Mutival的依赖关系 关系。“智能数据分析 期刊,4(3):195-211,IOS Press,2000。
答案 1 :(得分:1)
这与Database Normalization非常相似。
你有一个关系(你的测试数据集)和一些已知的功能依赖关系({sender} => arg,{} => foo和可能{msg} => sender。如果测试的顺序是重要的是添加{testNr} => msg。),你想要消除冗余。
将您的测试集视为数据库表,应用规范化规则并为每个连接创建等效函数(getArgFromSender(sender)等)。
答案 2 :(得分:1)
如果字段和记录的数量很少:
通过循环遍历每个字段组合来强制它,并且对于每个组合,检测列表中是否有多个映射到相同值的项目。
如果你能选择相当不错的领域:
假设您需要所有字段,请先开始。然后,随机选择一个字段,看看它是否可以消除;如果可以的话,将它从田野中移开。否则,随机选择另一个字段,然后重试。如果您发现没有字段可以消除,那么您已经找到了一组合理的字段。如果您先选择其他领域,您可能会找到更好的解决方案。您可以重复整个过程几次,如果您愿意,可以选择最佳解决方案。这种方法称为hill climbing。
(我怀疑这个问题是NP complete,即我们可能不知道一个有效且强大的解决方案,因此在尝试梦想一个完美的解决方案时不值得失眠。)