我在处理一个数据集的关联规则挖掘时遇到了困难,该数据集包含大量的二元属性,但也有很多分类属性。理论上可以将分类属性转换为二元属性,但实际上并不实用。我正在寻找一种技术来解决这个问题。
以汽车规格为例,为了执行关联规则挖掘,汽车颜色属性应该为二元属性,而在颜色方面,我们有很多颜色需要转换为二元属性(我的数据集是保险索赔,情况比这个例子还要糟糕)。
回答:
关联规则挖掘并不使用“属性”。它处理的是市场篮子类型的数据。将其预处理为二元属性是没有意义的。因为你需要再次将二元属性转换为项目(在最坏的情况下,你会将“color=blue”项目转换为“color_red=0, color_black=0, … color_blue=1”,如果你也在寻找负规则的话)。
不同的算法——以及理论上相同的算法的不同实现——不幸的是,会有非常不同的扩展性。
APRIORI算法设计用于很好地处理交易数量的扩展,但对于具有最小支持度的不同项目的数量扩展得并不好;特别是如果你期望只有短项目集是频繁的。其他算法如Eclat和FP-Growth在这方面可能表现得更好。但结果可能会有所不同。
首先,尝试将数据集转换为市场篮子格式,以一种你认为每个项目都相关的形式。丢弃其他所有内容。然后从一个较高的最小支持度开始,直到你开始得到结果。使用过低的最小支持度可能会耗尽内存,或者需要很长时间才能完成。
另外,确保获得一个好的实现。很多声称是APRIORI的东西实际上只是它的一个部分,而且速度非常慢。