我有一组具有属性的对象。我想找到最简单的一组标准,这些标准将恰好指定其中一个对象(我不关心哪一个)。
例如,给定{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)会给我一个独特的对象。
这听起来像一个已知的问题,有一个已知的解决方案,但我无法找到问题的正确表述,以允许我使用谷歌。
答案 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,它可以像这样
;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,则很容易获得数据的决策树。