我这里有一个相似性问题。我想使用历史数据(过去实施的规则流量)来预测新规则的流量。此处的流量表示规则与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'
压扁我的规则表达是个好主意还是还有另一个?我应该将我的规则转换为另一种数据结构(例如树数据结构)以更好地捕获它们之间的相似性值吗?你有什么建议吗?
答案 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
汇总它们(必要时加权)。