导致找到表格相关性

时间:2011-11-04 12:38:11

标签: algorithm correlation apriori

有这两个表:

TableA
ID  Opt1    Opt2    Type
1   A       Z       10
2   B       Y       20
3   C       Z       30
4   C       K       40

TableB
ID  Opt1    Type
1   Z       57
2   Z       99
3   X       3000
4   Z       3000

在这两个表之间找到任意关系的好算法是什么?在这个例子中,我希望找到TableA中包含Op1 = C和TableB中Type = 3000的记录之间的明显关系。

我能以某种方式想到先验,但似乎不太实际。你们说什么?

感谢。

2 个答案:

答案 0 :(得分:1)

这听起来像关系数据挖掘问题。我建议尝试Ross Quinlan的FOIL:http://www.rulequest.com/Personal/

答案 1 :(得分:1)

在伪代码中,一个天真的实现可能看起来像:

  1. for each column c1 in table1
  2.    for each column c2 in table2
  3.      if approximately_isomorphic(c1, c2) then
  4.         emit (c1, c2)

  approximately_isomorphic(c1, c2)
  1. hmap = hash()
  2. for i = 1 to min(|c1|, |c2|) do
  3.    hmap[c1[i]] = c2[i]
  4. if |hmap| - unique_count(c1) < error_margin then return true
  5. else then return false

这个想法是这样的:对每列的元素与彼此列进行成对比较。对于每对列,构造链接两列的相应元素的哈希映射。如果哈希映射包含与第一列的唯一元素相同数量的链接,那么您将拥有完美的同构;如果你还有一些,你就有一个近同构;如果你有更多,直到第一列中的元素数量,你可能没有代表任何相关性。

输入示例:

  ID & anything  : perfect isomorphism since all of ID are unique

  Opt1 & ID      : 4 mappings and 3 unique values; not a perfect
                  isomorphism, but not too far away.
  Opt1 & Opt1    : ditto above
  Opt1 & Type    : 3 mappings & 3 unique values, perfect isomorphism

  Opt2 & ID      : 4 mappings & 3 unique values, not a perfect
                  isomorphism, but not too far away
  Opt2 & Opt2    : ditto above
  Opt2 & Type    : ditto above

  Type & anything: perfect isomorphism since all of ID are unique

为了获得最佳结果,您可以双向执行此过程 - 即将table1与table2进行比较,然后将table2与table1进行比较 - 以查找双射映射。否则,你可以被琐碎的情况抛弃......第一个中的所有值都是不同的(完美的同构)或者第二个中的所有值都是相同的(完美的同构)。另请注意,此技术提供了一种排序或测量列相似或不相似的方式。

这是朝着正确的方向发展吗?顺便说一下,这是O(ijk),其中table1有i列,表2有j列,每列有k个元素。从理论上讲,如果你能在不进行成对比较的情况下找到相关性,你可以为方法做的最好的是O(ik + jk)。