十九、FPGrowth算法介绍

1. Apriori和FPGrowht算法的特点

FP-Growth算法概述

  • FpGrowth算法通过构造一个树结构来压缩数据记录,使得挖掘频繁项集只需要扫描两次数据记录,而且该算法不需要生成候选集合,所以效率会比较高。

FP-Growth算法的特点

  • 相比Apriori算法需要多次扫描数据库,FPGrowth只需要对数据库扫描2次。
  • 第1次扫描事务数据库获得频繁1项集。
  • 第2次扫描建立一颗FP-Tree树。

FP-Growth算法的原理

  • 发现频繁项集
    在这里插入图片描述

  • 统计频次和降序排序
    在这里插入图片描述

  • 重新排序
    Step2:对每一条数据记录,按照F1重新排序。
    在这里插入图片描述

  • 建立FP树
    Step3:把第二步重新排序后的记录,插入到fp-tree中
    Step3.1:插入第一条(第一步有一个虚的根节点
    在这里插入图片描述
    Step3.2:插入第二条。根结点不管,然后插入薯片,
    在step3.1的基础上+1,则记为2;同理鸡蛋记为2;啤酒在step3.1的树上是没有的,那么就开一个分支.
    在这里插入图片描述
    Step3.3:插入第三条,
    在这里插入图片描述
    同理,剩余记录依次插入FP-tree
    在这里插入图片描述
    图中左边的一列叫做头指针表,树中相同名称的节点要链接起来,链表的第一个元素就是头指针表里的元素。
    虚线连接起来的表示同一个商品,各个连接的数字加起来就是该商品出现的总次数。
    在这里插入图片描述
    Step4:从FP-Tree中找出频繁项集
    在这里插入图片描述
    对于每一条路径上的节点,其count都设置为牛奶的count(路径中最末尾的商品数)。
    在这里插入图片描述
    因为每一项末尾都是牛奶,可以把牛奶去掉,得到条件模式基,此时的后缀模式是:牛奶。
    在这里插入图片描述
    `

2 代码

# *-* coding:utf-8 *-*

import pandas as pd
from mlxtend.preprocessing import TransactionEncoder
from mlxtend.frequent_patterns import fpgrowth
from mlxtend.frequent_patterns import association_rules

data_test = [['A', 'C', 'D'], ['B', 'C', 'E'], ['A', 'B', 'C', 'E'], ['B', 'E']]

def create_data():
    dataset = [['Milk', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
               ['Dill', 'Onion', 'Nutmeg', 'Kidney Beans', 'Eggs', 'Yogurt'],
               ['Milk', 'Apple', 'Kidney Beans', 'Eggs'],
               ['Milk', 'Unicorn', 'Corn', 'Kidney Beans', 'Yogurt'],
               ['Corn', 'Onion', 'Onion', 'Kidney Beans', 'Ice cream', 'Eggs']]
    return dataset

def main():
    dataset = create_data()
    te = TransactionEncoder()
    te_ary = te.fit(dataset).transform(dataset)
    df = pd.DataFrame(te_ary, columns=te.columns_)
    frequent_itemsets = fpgrowth(df, min_support=0.7, use_colnames=True)

    print(frequent_itemsets)  # 频繁项集

    rules = association_rules(frequent_itemsets, metric="confidence", min_threshold=0.7)  # 关联规则
    print(rules)

if __name__ == '__main__':
    main()
  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值