我如何计算逻辑规则之间的相似性

时间:2017-05-15 15:12:50

标签: machine-learning similarity

我这里有一个相似性问题。我想使用历史数据(过去实施的规则流量)来预测新规则的流量。此处的流量表示规则与Person匹配的次数。以下是规则的示例:

Person.Age<20 and 
(Person.number_of_children==3 or Person.married==True) and 
Person.Work==student and 
Person.Car.isSportCar==False and 
Person.Car.Color in [blue,pink,red]

正如您所看到的,在规则中有许多属性与布尔表达式相关联。如果他和他的车满足某些标准,则该规则与人匹配。为了预测规则的流量,我必须在规则之间找到距离或相似性度量,但我发现很难在列表达式中展平规则。如果我这样做,我将失去信息,这就是为什么: 我的规则的列呈现示例:

Person.Age : 20
Person.number_of_children:3
Person.married:True
Person.work:student
Person.Car.isSportCar:False
Person.Car.Color:[blue,pink,red]

有了这个,我就失去了'OR'和'&lt;'和'in'

压扁我的规则表达是个好主意还是还有另一个?我应该将我的规则转换为另一种数据结构(例如树数据结构)以更好地捕获它们之间的相似性值吗?你有什么建议吗?

2 个答案:

答案 0 :(得分:0)

让我建议另一种方法:

将相似性得分基于两个规则给出相同结果的人的百分比。当然,你需要一个庞大而异质的人群。

如果两个规则对大多数人群都有类似的结果(例如“假”) - 您可以仅将评分基于至少有一个规则结果为“真”的测试用例。

答案 1 :(得分:0)

在这样的情况下我要做的是尝试将规则的规格转换为集合,因此将它们展平是有意义的,然后计算Jaccard距离。 Jaccard距离由集合的交集定义。最后,对不同的属性进行加权(或不对所有内容使用单个集合)。

例如,给定:

  

Person.Age&lt; 20 and(Person.number_of_children == 3或   Person.married == True)和Person.Work ==学生和   Person.Car.isSportCar == False和Person.Car.Color in [blue,pink,red]

  

Person.Age&lt; 15 and(Person.number_of_children == 2或   Person.married == False)和Person.Work ==学生和   Person.Car.isSportCar == False和[Pink,Red,white]中的Person.Car.Color

将它们转换为以下内容:

Person.Age (5,5,5,5)
Person.Relatives (Child,Child,Child,Wife)
Person.CarColor (blue,pink,red)

Person.Age (5,5,5)
Person.Relatives (Child,Child)
Person.CarColor (pink,red,white)

然后你的Jaccard距离会是这样的:

Person.Age = 3/4
Person.Relatives = 2/4
Person.CarColor = 2/4

汇总它们(必要时加权)。