我有一个大的csv文件从一些关联规则挖掘。其中两列是规则和置信度
“规则”列包含长度不同的项目列表,例如
[[Dog],[Dog,Cat],[Dog,Cat,Hamster],[Dog,Cat,Hamster,Goldfish]]
置信度得分列包含0到1之间的数字列表,例如
[0.1, 0.5, 0.1, 0.5]
我想根据规则值是否是其他规则值的子集来删除冗余行,但我只想删除具有相似置信度分数(在置信窗口内,比如5%)的行
在上面的示例中,将保留的行是[Dog]和[Dog,Cat]
[Dog
将保留,因为[Dog]
和[Dog,Cat,Hamster]
将由于其置信度得分为0.1而分组在一起,然后[Dog,Cat,Hamster]
将被删除,因为[Dog]
是[Dog,Cat,Hamster]
的子集,因此[Dog,Cat,Hamster]
规则是冗余的
类似地,[Dog,Cat]
和[Dog,Cat,Hamster,Goldfish]
都有0.5的置信度,并且[Dog,Cat,Hamster,Goldfish]
将被删除,因为[狗,猫]是[狗,猫,仓鼠,金鱼]的子集
我知道我需要做的第一件事是查看最小规则的置信度得分,将该得分的置信窗口内的所有规则组合在一起,然后删除所有较小规则的超集规则。然后我需要移动到下一个最小的规则并执行相同的操作,直到所有规则都被缩减/删除
我想知道在Python/Pandas中有没有一种简单的方法可以做到这一点
我对编码很陌生,所以我不知道这是否可行
谢谢
您可以根据置信值和规则长度对两列中的成对值进行排序。然后我们将首先得到最低的conf分数,在具有相同conf分数的规则中,最短的列表将首先出现。我们使用“两个手指”的方法遍历这个排序规则/conf对。第一个指针是当前的rule/conf对。第二个手指移动,直到我们找到第一个规则,它要么是不相等的conf分数(例如,如果我们的第一个手指在0.1上,则为0.5),要么是规则不是子集(例如,如果我们的第一个手指在['Dog']上,则为['仓鼠'])。当我们找到这样的rule/conf对时,我们附加第一个手指的rule/conf对,并将第一个手指前进到我们刚刚处理的那一对。我们继续迭代,跳过属于我们要删除的条件的对,当我们发现不符合“删除”条件的对时,追加并前进。希望这有意义
输出:
相关问题 更多 >
编程相关推荐