Eclat算法

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 利用回归预测数值型数据 线性回归 前面讲的都是监督学习中的分类,训练出可以判断样本类别的模型,而回归的目的是预测数...
    我偏笑_NSNirvana阅读 9,732评论 4 50
  • ML & DM 集成学习 模型融合 ensemble http://wakemeup.space/?p=109 E...
    章鱼哥呀阅读 1,925评论 0 6
  • 会写这篇文字,感触是来源于之前写过的两篇日志。 几年前的文字,看完之后既陌生,又熟悉。 这一篇,没有意外的写的又是...
    豆豆貓阅读 1,281评论 2 95
  • 2017.11.1 好久不曾写字了,好多事情都要忘记了。 最近蓝灵迷上了《上下五千年》,每晚都要缠着我讲上几个故事...
    六月微尘阅读 105评论 1 0
  • 1. 如果我问你,你爱不爱自己?很多人肯定都会说“还用问吗,当然爱自己了”; 如果我再问你,你有没有经营好自己?...
    风信子在简书阅读 674评论 4 2