如何识别描述数据集的最小参数集

时间:2008-10-03 18:56:06

标签: algorithm

我有一堆回归测试数据。每个测试只是一个消息列表(关联数组),将消息字段名称映射到值。这些数据中有很多重复。

例如

   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', ... },
   ]

我想表示字段数据(作为最小深度决策树?),以便可以使用最少数量的参数以编程方式重新生成每个消息。例如,在上面的

  • foo总是'bar',所以我不需要提及它
  • 发件人和客户是相关的,所以我只需要提及一个或另一个
  • 和msg每次都不同

所以我希望能够使用

的程序重新生成这些消息
write_msg( 'client', '123' )
write_msg( 'server', '456' )
write_msg( 'client', '789' )

其中write_msg函数将由嵌套的if语句或使用参数的子函数调用组成。

根据我的原始数据,我如何确定“最重要的”参数集,即能够使用最少数量的参数重新创建数据集的参数?

3 个答案:

答案 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,即我们可能不知道一个有效且强大的解决方案,因此在尝试梦想一个完美的解决方案时不值得失眠。)