美文网首页
Eclat算法

Eclat算法

作者: 曦宝 | 来源:发表于2019-01-24 16:00 被阅读11次
    1、核心思想:倒排序
    2、只能用来发现频繁项集。
    3、只扫描一次数据集

    我发现了一个很好的博客

    http://www.cnblogs.com/infaraway/p/6774521.html

    里面详细对比了三种算法的思想以及python实现。

    代码的实现也是来自那篇博客。

    # -*- coding: utf-8 -*-
    
    
    def eclat(prefix, items, min_support, freq_items):
        while items:
            # 初始遍历单个的元素是否是频繁
            key, item = items.pop()
            key_support = len(item)
            if key_support >= min_support:
                # print frozenset(sorted(prefix+[key]))
                freq_items[frozenset(sorted(prefix+[key]))] = key_support
                suffix = []  # 存储当前长度的项集
                for other_key, other_item in items:
                    new_item = item & other_item  # 求和其他集合求交集
                    if len(new_item) >= min_support:
                        suffix.append((other_key, new_item))
                eclat(prefix+[key], sorted(suffix, key=lambda item: len(item[1]), reverse=True), min_support, freq_items)
        return freq_items
    
    
    def eclat_zc(data_set, min_support=1):
        """
        Eclat方法
        :param data_set:
        :param min_support:
        :return:
        """
        # 将数据倒排
        data = {}
        trans_num = 0
        for trans in data_set:
            trans_num += 1
            for item in trans:
                if item not in data:
                    data[item] = set()
                data[item].add(trans_num)
        freq_items = {}
        freq_items = eclat([], sorted(data.items(), key=lambda item: len(item[1]), reverse=True), min_support, freq_items)
        return freq_items
    
    
    if __name__ == '__main__':
        data_set = [['A', 'B', 'D', 'H'], ['A', 'B', 'E', 'I'], ['A', 'B', 'E', 'J'], ['A', 'C', 'F', 'G']]
        freq_items = eclat_zc(data_set, 2)
        print(freq_items)
    
    

    这里只有一点要唠叨一下,如果你看了三篇文章,你仔细看了代码就会发现,三个实现代码里面对最小支持度的定义不一样。Apriori算法里面计算的是一个比例(在0~1之间,数字越大表示出现越频繁),FP-growth和Eclat算法里最小支持度指的是出现次数(大于等于1,数字越大表示出现次数越多)。
    补充一个网址
    https://blog.csdn.net/sanqima/article/details/51559120

    相关文章

      网友评论

          本文标题:Eclat算法

          本文链接:https://www.haomeiwen.com/subject/eyxujqtx.html