我如何计算逻辑规则之间的相似度
How do i compute the Similarity between logical rules
我这里有一个相似性问题。我想使用历史数据(过去实施的规则的流量)来预测新规则的流量。这里的流量是指一条规则匹配一个人的次数。这是规则的示例:
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’和‘<’和‘in’
扁平化我的规则表达式是个好主意还是有其他办法?我是否应该将我的规则转换为另一种数据结构(例如树数据结构)以更好地捕捉它们之间的相似性值?你有什么建议吗?
让我建议另一种方法:
根据两条规则给出相同结果的人数百分比来计算相似度分数。当然,你需要大量的异质人群。
如果两条规则对大多数人的结果相似(例如 "false")- 您可以仅根据其中至少一条规则的结果为 "true" 的测试用例来评分.
在这种情况下,我要做的是尝试将规则的规范转换为集合,以便将它们展平,然后计算 Jaccard 距离。 Jaccard 距离由集合的并集交集定义。最后,对不同的属性进行加权(或者不对所有属性使用一个集合)。
例如,给定:
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<15 and (Person.number_of_children==2 or
Person.married==False) and Person.Work==student and
Person.Car.isSportCar==False and Person.Car.Color in [pink,red,white]
将它们转换成这样:
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
并汇总它们(必要时加权)。
我这里有一个相似性问题。我想使用历史数据(过去实施的规则的流量)来预测新规则的流量。这里的流量是指一条规则匹配一个人的次数。这是规则的示例:
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’和‘<’和‘in’
扁平化我的规则表达式是个好主意还是有其他办法?我是否应该将我的规则转换为另一种数据结构(例如树数据结构)以更好地捕捉它们之间的相似性值?你有什么建议吗?
让我建议另一种方法:
根据两条规则给出相同结果的人数百分比来计算相似度分数。当然,你需要大量的异质人群。
如果两条规则对大多数人的结果相似(例如 "false")- 您可以仅根据其中至少一条规则的结果为 "true" 的测试用例来评分.
在这种情况下,我要做的是尝试将规则的规范转换为集合,以便将它们展平,然后计算 Jaccard 距离。 Jaccard 距离由集合的并集交集定义。最后,对不同的属性进行加权(或者不对所有属性使用一个集合)。
例如,给定:
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<15 and (Person.number_of_children==2 or Person.married==False) and Person.Work==student and Person.Car.isSportCar==False and Person.Car.Color in [pink,red,white]
将它们转换成这样:
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
并汇总它们(必要时加权)。