聚合自动生成的特征向量
Posted
技术标签:
【中文标题】聚合自动生成的特征向量【英文标题】:Aggregating automatically-generated feature vectors 【发布时间】:2011-01-06 23:10:31 【问题描述】:我有一个分类系统,很遗憾,出于工作原因,我需要对其进行模糊处理。假设我们有 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是噪声(对规则不重要)
有人知道如何解决这个问题吗?任何语言或库都是公平的游戏,因为我希望这主要是一次性的过程。提前致谢。
【问题讨论】:
你确定你的第一个例子是正确的吗?据我了解,“1 2 bce 5 2-4 X”将意味着例如“1 2 b 5 2”将暗示 X,而原始规则集并未暗示这一点。 【参考方案1】:查看Weka machine learning lib for Java。 API 有点笨拙,但非常有用。总体而言,您似乎想要的是现成的机器学习算法,这正是 Weka 所包含的。您显然正在寻找相对容易解释的东西(您提到您希望它推断出 A 和 B 之间的关系并告诉您 C 只是噪音。)您可以尝试使用决策树,例如 J48,因为这些通常很容易可视化/解释。
【讨论】:
Accepting - 我已经实现了一个简单的分类算法,它利用了我使用 Weka 发现的关系和含义。谢谢。【参考方案2】:2500 万条规则?有多少功能?每个特征有多少个值?是否可以在实际时间内迭代所有组合?如果可以的话,您可以先按结果将规则分成几组。
然后,对于每个结果,执行以下操作。将每个特征视为一个维度,将某个特征的允许值视为沿该维度的度量,构建一个表示整个规则集的巨大卡诺图。
地图有两个用途。一:研究Quine-McCluskey算法的自动化方法。在这方面已经做了很多工作。甚至还有一些程序可用,但可能没有一个程序可以处理您要制作的大小的卡诺图。
二:当您创建了最终的缩减规则集后,再次迭代所有特征的所有值的所有组合,并使用缩减规则集构建另一个卡诺图。如果映射匹配,则您的规则集是等效的。
-阿尔。
【讨论】:
【参考方案3】:您可以尝试通过backpropagation 训练的neural network 方法,假设您拥有或可以随机生成(基于旧规则集)大量数据,这些数据会影响您的所有课程。使用适当大小的隐藏层将允许您在特征空间中逼近任意判别函数。这与聚类的想法或多或少相同,但由于训练范式的原因,您的离散输入应该没有问题。
但是,对于您的情况来说,这可能有点过于“黑匣子”了,特别是如果您对误报和误报零容忍(尽管这是一个一次性的过程,您可以通过以下方式获得任意程度的置信度)检查一个庞大的验证集)。
【讨论】:
不幸的是,我们需要能够反省确切的规则,尽管您的想法对于许多其他用例来说非常棒。以上是关于聚合自动生成的特征向量的主要内容,如果未能解决你的问题,请参考以下文章
python使用pandas通过聚合获取时序数据的最后一个指标数据(例如长度指标时间指标)生成标签并与原表连接(join)进行不同标签特征的可视化分析