找到最小的唯一性标准

时间:2011-12-05 10:10:55

标签: algorithm set unique

我有一组具有属性的对象。我想找到最简单的一组标准,这些标准将恰好指定其中一个对象(我不关心哪一个)。

例如,给定{a = 1,b = 1,c = 1},{a = 1,b = 2,c = 1},{a = 1,b = 1,c = 2},指定b == 2(或c == 2)会给我一个独特的对象。

同样,给定{a = 1,b = 1,c = 1},{a = 1,b = 2,c = 2},{a = 1,b = 2,c = 1},指定b == 2和c == 2(或b == 1&& c == 1或b == 2&& c == 1)会给我一个独特的对象。

这听起来像一个已知的问题,有一个已知的解决方案,但我无法找到问题的正确表述,以允许我使用谷歌。

4 个答案:

答案 0 :(得分:4)

这确实是AI中的已知问题 - 特征选择。有很多算法可以做到这一点只是谷歌“功能选择”“人工智能”。

主要问题是当样本集很大时,您需要使用某种启发式方法才能在合理的时间内找到解决方案。


Feature Selection in Data Mining

  

特征选择的主要思想是选择输入的子集   变量通过消除很少或没有预测的特征   信息。

答案 1 :(得分:2)

选择目标的自由有点不同寻常。如果指定了目标,那么这基本上是set cover problem。这是两个相应的实例并排。

A={1,2,3} B={2,4} C={3,4} D={4,5}

0: {a=0, b=0, c=0, d=0}  # separate 0 from the others
1: {a=1, b=0, c=0, d=0}
2: {a=1, b=1, c=0, d=0}
3: {a=1, b=0, c=1, d=0}
4: {a=0, b=1, c=1, d=1}
5: {a=0, b=0, c=0, d=1}

虽然set cover是NP-hard,但是你的问题有一个O(m log n + O(1) poly(n))算法,其中m是属性数,n是物品的数量(最佳标准组的大小最多为log n),这使得NP硬度证明不太可能即将到来。我想起了Junta problem的情况(基本上是特征选择的理论公式)。

答案 2 :(得分:0)

我不知道这有多么容易被翻译成算法,但是使用已经基于设置的SQL,它可以像这样

  • 构造一个表,其中包含输入表中所有可能的列组合
  • 选择与输入表格中存在的记录数量相等的所有组合作为不同的组合。

SQL脚本

;WITH q (a, b, c) AS (
  SELECT '1', '1', '1'
  UNION ALL SELECT '1', '2', '2'
  UNION ALL SELECT '1', '2', '1'
  UNION ALL SELECT '1', '1', '2'
)
SELECT  col
FROM    (
          SELECT val = a, col = 'a'  FROM q
          UNION ALL SELECT b, 'b' FROM q
          UNION ALL SELECT c, 'c' FROM q
          UNION ALL SELECT a+b, 'a+b' FROM q
          UNION ALL SELECT a+c, 'a+c' FROM q
          UNION ALL SELECT b+c, 'b+c' FROM q
          UNION ALL SELECT a+b+c, 'a+b+c' FROM q
        ) f
GROUP BY
        col        
HAVING
        COUNT(DISTINCT (val)) = (SELECT COUNT(*) FROM q)

答案 3 :(得分:0)

您的问题可以定义如下:

1 1 1 -> A
1 2 1 -> B
1 1 2 -> C
.
.

其中1 1 1称为特征向量,A是对象类。然后,您可以使用decision trees(使用修剪)查找一组规则来对对象进行分类。因此,如果您的目标是自动决定用于标识对象{​​{1}}的标准集,那么您可以在决策树上观察导致A的路径。

如果您有权访问MATLAB,则很容易获得数据的决策树。