Algorithm 聚合自动生成的特征向量

Algorithm 聚合自动生成的特征向量,algorithm,cluster-analysis,rules,classification,rule-engine,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

我有一个分类系统,不幸的是,由于工作原因,我需要对它进行模糊描述。假设我们有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';
规则集需要小得多,因为它必须由人工维护,所以我想缩小规则集,以便第一个示例变成:

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

有人知道如何解决这个问题吗?任何语言或库都是公平的游戏,因为我希望这是一个基本上一次性的过程。提前感谢。

您可以尝试一种方法,通过培训,假设您拥有或能够随机生成(基于旧规则集)一组命中所有类的大型数据。使用适当大小的隐藏层将允许您在要素空间中近似使用任意判别函数。这与集群的想法大致相同,但由于训练范式的原因,离散输入应该没有问题


然而,对于您的案例来说,这可能有点太“黑盒”,特别是如果您对误报和漏报的容忍度为零(尽管这是一个一次性过程,您可以通过检查庞大的验证集获得任意程度的置信度)。

2500万条规则?有多少功能?每个功能有多少个值?有可能在实际时间内迭代所有组合吗?如果可以,可以从按结果将规则分成组开始

然后,针对每个结果,执行以下操作。将每个特征视为一个维度,并将特征的允许值视为该维度上的度量,构建一个表示整个规则集的巨大卡诺图

这张地图有两种用途。第一:研究Quine-McCluskey算法的自动化方法。在这方面已经做了很多工作。甚至有一些可用的程序,尽管它们可能都不会处理您将要制作的卡诺图大小

第二:创建最终简化规则集后,再次迭代所有特征的所有值的所有组合,并使用简化规则集构建另一个卡诺图。如果映射匹配,则规则集是等效的


-Al.

请查看。API有点粗糙,但非常有用。总的来说,您似乎想要的是现成的机器学习算法,这正是Weka所包含的。你显然在寻找一些相对容易解释的东西(你提到你想让它推断A和B之间的关系,告诉你C只是噪音)。你可以试试决策树,比如J48,因为它们通常很容易可视化/解释。

你确定你的第一个例子是正确的吗?据我所知,“12 bce 5 2-4 X”意味着,例如,“12 b 5 2”意味着X,这不是原始规则集所暗示的。不幸的是,我们需要能够反思确切的规则,尽管你的想法对于许多其他用例来说都是非常好的。接受-我已经实现了一个简单的分类算法,它利用了我通过使用Weka发现的关系和含义。谢谢
A  B  C  Result
1  2  *  X
2  4  *  X