FP-Growth算法理解

FP-Growth算法是一种高效发现频繁项集的算法,它只需遍历数据集两次。算法核心是构建FP树,通过头部链表维护相同项,并在FP树中挖掘频繁项集。条件模式基和条件FP树在挖掘过程中起到关键作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

FP-Growth算法理解

基本概念

FP-Growth 全称: Frequent Pattern Growth—-频繁模式增长
在整个算法执行过程中,只需要遍历数据集2次,就可完成频繁模式的发现

FP-growth算法简介

一种非常好的发现频繁项集的算法那
基于Apriori算法构建但是数据结构不同,使用叫做FP树的数据结构来存储集合

算法核心思想

基于数据构建FP树
从FP树中挖掘频繁项集

FP树介绍—-以树结构存储频繁项集

FP树的节点结构如下:
    节点名称
    节点出现次数
    不同项集的相同项通过nodelink链接在一起
    指向父节点
    存储叶子节点

构建FP树

基于数据构建FP树

  • 步骤1:
    1.遍历所有的数据集集合,计算所有项的支持度
    2.丢弃非频繁项
    3.基于支持度 降序排序所有的项
    4.所有数据集合按照得到的顺序重新整理
    5.重新整理完成后,丢弃每个集合末尾非频繁的项

  • 步骤2:
    6.读取每个集合插入FP树中,同时用一个头部链表数据结构维护不同集合的相同项

  • 步骤3:
    1.对头部链表进行降序排序
    2.对头部链表节点从小到大变量,得到条件模型基,同时获得一个频繁项集

FP树:用于编码数据集的有效方式
FP代表: Frequent Pattern 一个FP树看上去与计算机科学中的其他树节后类似
但是它通过连接(link)来连接相似元素,被连起来的元素项可以看成一个链表

与搜索树不同的是:一个元素项可以在FP树中出现多次,FP树会存储项集的出现频率,
而每个项集会以路径的方式存储在树中,相似元素的集合会共享树的一部分
只有当集合之间完全不同时,树才会分叉,树节点上给出集合中的单个元素及其在序列中
出现次数,路径会给出该序列的出现次数
相似项之间的链接称为节点链接,用于快速发现相似项的位置

核心思想
遍历两次数据集:
第一次:遍历数据集, 创建头指针表
第二次:遍历数据集, 依据头指针表 — 创建FP树(难点)

具体实现
第一次遍历,头部指针,dict{item,count} 单个项集与其支持度
第二次变量,找出每个事物中同项集与其对应的支持度,根据该支持度,逐一对事务进行排序,
然后再进行FP树构建

class tree_node(object):
    def __init__(self, name_value, num_occur, parent_node):
        self.name = name_value      # 节点名称
        self.count = num_occur      # 节点出现次数
        self.node_link = None       # 不同项集的相同项通过node_link连接在一起
        # needs to be updated
        self.parent = parent_node   # 指向父节点
        self.children = {}          # 存储叶子节点

    def increase(self, num_occur):
        """
        increase 对count变量增加给定定值
        :param num_occur:
        :return:
        """
        self.count += num_occur

    def display(self, ind=1):
        """
        display 用于将树以文本形式显示
        :param ind:
        :return:
        """
        print(' '*ind, self.name, ' ', self.count)
        for child in self.children.values():
            child.display(ind+1)


def load_data():

    data_set = [['r', 'z', 'h', 'j', 'p'],
                ['z', 'y', 'x', 'w', 'v', 'u', 't', 's'],
               
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值