我有一个分类系统,我不幸需要为工作原因模糊。假设我们有5个特征来考虑,它基本上是一组规则:聚合自动生成的特征向量
A B C D E Result
1 2 b 5 3 X
1 2 c 5 4 X
1 2 e 5 2 X
我们拍摄对象并获取其值A-E,然后尝试在序列匹配的规则。如果一个匹配,我们返回第一个结果。
C是一个离散的值,它可以是任意的a-e。其余的只是整数。
该规则集已经从我们的旧系统自动生成,并且有大量的规则(约2500万)。旧规则是if语句,例如
result("X") if $A >= 1 && $A <= 10 && $C eq 'A';
正如您所看到的,旧规则通常甚至不使用某些功能或接受范围。有些人更烦人:
result("Y") if ($A == 1 && $B == 2) || ($A == 2 && $B == 4);
规则集需要是因为它是人类维持小很多,所以我想缩小规则集,因此第一个例子将成为:
A B C D E Result
1 2 bce 5 2-4 X
结果是我们可以通过结果列拆分规则集并独立收缩。但是,我想不出一个简单的方法来识别和缩小规则集。我试过聚类算法,但它们因为某些数据是离散的而窒息,并将其视为连续的并不完美。又如:
A B C Result
1 2 a X
1 2 b X
(repeat a few hundred times)
2 4 a X
2 4 b X
(ditto)
在理想情况下,这将是两个规则:
A B C Result
1 2 * X
2 4 * X
即:不仅将所述算法标识A和B之间的关系,而且也将推断是c是噪音(不重要的规则)
有没有人有如何去解决这个问题的想法?任何语言或图书馆都是公平的游戏,因为我认为这是一个大多数一次性的过程。提前致谢。
你确定你的第一个例子是正确的吗?据我所知,“1 2 5 5 4 X”将意味着例如“1 2 b 5 2”意味着X,这不是原始规则集所隐含的。 – Sami 2010-01-19 19:24:37