聚合自动生成的特征向量

时间:2010-01-19 19:11:02

标签: algorithm cluster-analysis rules classification rule-engine

我有一个分类系统,不幸的是,出于工作原因我不得不模糊不清。假设我们有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

结果是我们可以通过Result列拆分规则集并单独收缩每个规则集。但是,我想不出一种简单的方法来识别和缩小规则集。我已经尝试过聚类算法,但是因为一些数据是离散的,所以它们会窒息,并将其视为连续算法并不完美。另一个例子:

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是噪声(对规则不重要)

有没有人知道如何解决这个问题?任何语言或图书馆都是公平的游戏,因为我认为这是一个大致一次性的过程。提前谢谢。

3 个答案:

答案 0 :(得分:1)

二千五百万条规则?有多少功能?每个功能有多少个值?是否有可能在实际时间内迭代所有组合?如果可以,您可以从按结果将规则分成组开始。

然后,对于每个结果,请执行以下操作。将每个要素视为一个维度,并将要素的允许值作为该维度的度量标准,构建一个代表整个规则集的巨大卡诺图。

地图有两种用途。一:研究Quine-McCluskey算法的自动化方法。在这方面已经做了很多工作。甚至有一些程序可用,但可能没有一个可以处理你将要制作的卡诺图。

二:当您创建最终缩小的规则集时,再次迭代所有要素的所有值的所有组合,并使用缩小的规则集构建另一个卡诺图。如果地图匹配,则您的规则集是等效的。

-Al。

答案 1 :(得分:1)

查看Weka machine learning lib for Java。 API有点夸张但它非常有用。总的来说,你似乎想要的是一种现成的机器学习算法,这正是Weka所包含的。你显然正在寻找一些相对容易理解的东西(你提到你希望它推断出A和B之间的关系,并告诉你C只是噪音。)你可以尝试一个决策树,比如J48,就像这些通常很容易想象/解释。

答案 2 :(得分:0)

您可以尝试neural network方法,通过backpropagation进行培训,假设您已经或可以随机生成(基于旧规则集)大量数据,这些数据会打到您的所有课程。使用适当大小的隐藏层将允许您在要素空间中近似任意判别函数。这与集群或多或少的想法相同,但由于培训范式应该对离散输入没有任何问题。

然而,对于你的情况,这可能有点过于“黑匣子”,特别是如果你对误报和否定的零容忍(尽管,这是一次性过程,你可以获得任意程度的信任检查庞大的验证集。)