面向目标的关联规则挖掘的一个FP增长算法

合集下载

fp-growth算法例子

fp-growth算法例子

fp-growth算法例子FP-Growth(频繁模式增长)是一种在频繁项集挖掘中找出项集(itemsets)之间有趣的关联规则的算法。

其目的是寻找大型数据集中的频繁项集,并使用这些频繁项集来生成关联规则。

以下是一个简单的FP-Growth算法的Python实现示例:```pythonimport numpy as npfrom apriori import gen_候选项集, FPGrowth_Prefix_Frequent# 构造事务数据库data = [['苹果', '香蕉', '橙子'],['香蕉', '橙子', '葡萄'],['苹果', '香蕉', '葡萄'],['苹果', '橙子', '葡萄'],['橙子', '葡萄']]# 初始化FP-Growth算法参数min_support = 0.5 # 最小支持度阈值min_confidence = 0.7 # 最小置信度阈值num_transactions = len(data) # 事务数据库中事务数量database = data # 存储整个事务数据库num_patterns = 10 # 最大模式数量patterns = [] # 存储所有模式# 执行FP-Growth算法,找到频繁项集frequent_itemsets = FPGrowth_Prefix_Frequent(num_transactions, database, min_support)# 从频繁项集中生成关联规则,并过滤出满足最小置信度的规则rules = []for itemset in frequent_itemsets:for i in range(1, len(itemset)):left = [tuple(x) for x in zip(itemset[:i], itemset[i:])]right = itemset[i:]confidence = len(left) / num_transactionsif confidence >= min_confidence:rules.append((left, right, confidence))print('关联规则:', left, '->', right, '置信度:', confidence)print('支持度:', left + right, '/', num_transactions)print()```在这个例子中,我们首先定义了一个事务数据库,其中包含了一些水果的购买记录。

关联规则挖掘方法

关联规则挖掘方法

关联规则挖掘方法一、前言关联规则挖掘是数据挖掘中的一个重要领域,它可以帮助我们发现数据中隐藏的规律和关系,从而为商业决策和市场营销提供支持。

本文将介绍关联规则挖掘的方法和步骤,包括数据预处理、频繁项集生成、关联规则生成和评估等。

二、数据预处理在进行关联规则挖掘之前,我们需要对原始数据进行预处理。

首先,我们需要去除无用的属性和记录,并对缺失值进行处理。

其次,我们需要将离散型数据转换为数值型数据,并对连续型数据进行离散化。

最后,我们需要对异常值进行检测和处理。

三、频繁项集生成频繁项集是指在数据集中经常出现的一组物品集合。

频繁项集生成是关联规则挖掘的第一步,其目的是找到所有满足最小支持度阈值的频繁项集。

1. Apriori算法Apriori算法是最常用的频繁项集生成算法之一。

它基于两个重要性质:单调性和自由子集性质。

Apriori算法分为两个阶段:候选项集生成和剪枝。

2. FP-growth算法FP-growth算法是一种基于树结构的频繁项集生成算法。

它通过构建一棵FP树来发现频繁项集。

FP-growth算法相对于Apriori算法具有更快的速度和更小的空间复杂度。

四、关联规则生成在找到所有频繁项集之后,我们需要从中挖掘出有意义的关联规则。

关联规则是指形如X->Y的规则,其中X和Y都是物品集合,且X∩Y=∅。

1. 关联规则挖掘关联规则挖掘是指从频繁项集中挖掘出满足最小置信度阈值的关联规则。

置信度是指在条件X下出现Y的概率。

2. 关联规则评估关联规则评估是指对挖掘出来的关联规则进行评估和选择。

常用的评价指标包括支持度、置信度、提升度和全置信度等。

五、总结本文介绍了关联规则挖掘的方法和步骤,包括数据预处理、频繁项集生成、关联规则生成和评估等。

在实际应用中,我们需要根据具体情况选择不同的算法和参数,并进行优化和调整。

数据挖掘中的关联规则算法使用方法教程

数据挖掘中的关联规则算法使用方法教程

数据挖掘中的关联规则算法使用方法教程数据挖掘是一门通过从大量数据中发现隐藏模式、关系和信息的技术。

关联规则算法是数据挖掘中的重要工具,用于发现数据集中的关联关系和规律。

本教程将介绍关联规则算法的基本概念、使用方法和常见问题。

一、关联规则算法概述关联规则算法主要用于发现数据集中的关联关系和规律,它可以帮助我们了解事物之间的相互关系,并通过这些关系进行预测和推断。

常见的应用场景包括购物篮分析、市场篮子分析、推荐系统等。

关联规则算法通过分析频繁项集和支持度,找到频繁项集之间的关联规则。

频繁项集是指在数据集中频繁出现的组合项集,支持度是指某个项集在数据集中出现的频率。

通过计算支持度和置信度,可以找到具有较高置信度的关联规则。

常用的关联规则算法包括Apriori算法、FP-Growth算法和Eclat算法。

接下来将逐一介绍这些算法的使用方法。

二、Apriori算法1. Apriori算法基本原理Apriori算法是关联规则算法中最常用的一种算法。

它通过迭代的方式逐步生成频繁项集,然后根据频繁项集生成关联规则。

Apriori算法的基本原理如下:- 生成频繁1项集;- 循环生成候选k项集,并计算支持度;- 剪枝:删除支持度低于阈值的项集,得到k频繁项集;- 生成关联规则,并计算置信度。

2. Apriori算法使用步骤使用Apriori算法进行关联规则挖掘的步骤如下:- 输入数据集:准备一份包含项集的数据集;- 设置支持度和置信度的阈值;- 生成频繁1项集;- 根据频繁1项集生成2频繁项集;- 通过剪枝操作得到k频繁项集;- 根据频繁项集生成关联规则,并计算置信度;- 输出频繁项集和关联规则。

三、FP-Growth算法1. FP-Growth算法基本原理FP-Growth算法是一种高效的关联规则挖掘算法,它通过构建频繁模式树来快速发现频繁项集和关联规则。

FP-Growth算法的基本原理如下:- 构建FP树:将数据集构造成FP树,每个节点表示一个项,每个路径表示一条事务;- 构建条件模式基:从FP树中抽取频繁1项集,并构建条件模式基;- 通过条件模式基递归构建FP树;- 根据FP树生成关联规则。

基于FPGrowth算法的关联规则挖掘技术在市场调研中的应用

基于FPGrowth算法的关联规则挖掘技术在市场调研中的应用

基于FPGrowth算法的关联规则挖掘技术在市场调研中的应用随着互联网的快速发展和大数据时代的到来,市场调研逐渐从传统的手工处理转向数据驱动的方式。

关联规则挖掘技术作为数据挖掘领域的重要方法之一,能够发现数据中隐藏的规律和关联性,对市场调研具有重要的应用价值。

本文将对基于FPGrowth算法的关联规则挖掘技术在市场调研中的应用进行探讨和总结。

一、概述关联规则挖掘是一种通过分析数据集中的频繁项集,发现数据项之间的关联关系的技术。

该技术通过计算项集之间的支持度和置信度等指标,得出频繁项集和关联规则,并利用这些规则进行市场调研分析和推荐。

FPGrowth算法作为一种高效的关联规则挖掘算法,能够有效地挖掘出频繁项集和关联规则,被广泛应用于市场调研领域。

二、FPGrowth算法的原理FPGrowth算法是一种基于频繁模式树的关联规则挖掘算法。

其核心思想是通过压缩数据集,构建FP树,并根据FP树挖掘频繁项集和关联规则。

该算法相比传统的Apriori算法具有更高的效率和更好的性能,在大规模数据集上有较好的表现。

三、FPGrowth算法在市场调研中的应用1. 相关性分析:通过FPGrowth算法挖掘出的关联规则,可以揭示出数据集中项之间的相关性。

市场调研人员可以通过分析这些关联规则,了解产品之间的相关性、顾客购买偏好等,为市场推广和销售策略提供依据。

2. 交叉销售推荐:基于FPGrowth算法的关联规则挖掘技术,可以帮助企业发现产品之间的内在关联性,进而进行交叉销售推荐。

例如,当一位顾客购买了手机时,可以根据关联规则挖掘出的结果,向顾客推荐手机壳、耳机等相关产品,从而提升销售额。

3. 用户分群:FPGrowth算法可以根据挖掘出的频繁项集和关联规则,对顾客进行分群分析。

通过识别出具有共同购买特征的顾客群体,可以为不同群体制定个性化的市场营销策略,提高营销效果。

4. 促销策略优化:通过分析关联规则,市场调研人员可以了解到哪些产品经常同时被购买,可以结合时间、地点等因素,制定更科学有效的促销策略。

fpgrowth算法代码

fpgrowth算法代码

fpgrowth算法代码FP-Growth算法是一种高效的关联规则挖掘算法,其主要原理是将数据集转换为频繁模式的树形结构来进行挖掘。

以下是FP-Growth 算法的Python代码实现:首先,我们需要定义一个类来表示FP树的节点:class TreeNode:def __init__(self, name_value, num_count, parent_node): = name_valueself.count = num_countself.parent = parent_nodeself.children = {}self.next = None其中,name表示节点的名称,count表示节点的计数值,parent表示节点的父节点,children表示节点的子节点,next表示指向相同元素项的不同节点。

然后,我们需要定义一个类来实现FP-Growth算法:class FPGrowth:def __init__(self, min_sup=1):self.min_sup = min_supself.freq_items = {}self.head_table = {}self.tree = Nonedef fit(self, data_set):self.build_head_table(data_set)self.build_FP_tree(data_set)self.mine_freq_items()def build_head_table(self, data_set):for trans in data_set:for item in trans:self.head_table[item] =self.head_table.get(item, 0) + data_set[trans]for item in self.head_table.copy():if self.head_table[item] < self.min_sup:del(self.head_table[item])for item in self.head_table:self.freq_items[frozenset([item])] =self.head_table[item]def build_FP_tree(self, data_set):self.tree = TreeNode('Null Set', 1, None)for trans, count in data_set.items():sorted_items = [item for item in trans if item in self.head_table]sorted_items.sort(key=lambda x:self.head_table[x], reverse=True)if len(sorted_items) > 0:self.insert_tree(sorted_items, count,self.tree)def insert_tree(self, items, count, cur_node):first_item = items[0]if first_item in cur_node.children:cur_node.children[first_item].count += countelse:cur_node.children[first_item] =TreeNode(first_item, count, cur_node)if self.head_table[first_item] is None:self.head_table[first_item] =cur_node.children[first_item]else:self.update_headtable(cur_node.children[first_item], self.head_table[first_item])if len(items) > 1:self.insert_tree(items[1:], count,cur_node.children[first_item])def update_headtable(self, target_node, next_node): while (next_node.next is not None):next_node = next_node.nextnext_node.next = target_nodedef mine_freq_items(self):freq_item_set = set(self.freq_items.keys())if len(freq_item_set) == 0:return Nonesorted_items = sorted(self.freq_items.items(), key=lambda x: x[1])for item in sorted_items:base_set = set(item[0])freq_set = frozenset(base_set)self.freq_items[freq_set] = item[1]conditional_tree =self.get_conditional_tree(base_set)if conditional_tree is not None:conditional_fpg = FPGrowth(self.min_sup)conditional_fpg.tree = conditional_treeconditional_fpg.build_head_table(self.create_conditional_db(b ase_set))conditional_fpg.mine_freq_items()for freq_item_set, count inconditional_fpg.freq_items.items():full_freq_set = freq_item_set | freq_set self.freq_items[full_freq_set] =self.freq_items.get(full_freq_set, 0) + countdef get_conditional_tree(self, base_set):if base_set is None or len(base_set) == 0:return Noneitem_count = {}for trans in self.head_table:item_set = set()cur_node = self.head_table[trans]while (cur_node is not None):iflen(base_set.intersection(set(cur_))) > 0:item_set.add(cur_)cur_node = cur_node.nextif len(item_set) > 0:item_count[trans] = item_setif len(item_count) == 0:return Noneconditional_tree = TreeNode('Null Set', 1, None)for trans, item_set in item_count.items():sorted_items = [item for item in list(item_set)if item in self.head_table]if len(sorted_items) > 0:self.insert_tree(sorted_items,data_set[trans], conditional_tree)return conditional_treedef create_conditional_db(self, base_set):new_db = {}for trans, count in data_set.items():base_set_list = [item for item in trans if itemin base_set]if len(base_set_list) > 0:base_set_list.sort(key=lambda x:self.head_table[x], reverse=True)new_db[frozenset(base_set_list)] = countreturn new_dbdef get_freq_items(self):return self.freq_items在FP-Growth类中,fit函数用于对数据集进行频繁模式挖掘,其中分别调用了build_head_table、build_FP_tree和mine_freq_items三个函数。

fpgrowth算法计算过程

fpgrowth算法计算过程

fpgrowth算法计算过程FPGrowth算法是一种用于频繁项集挖掘的算法,它使用一种称为FP树(Frequent Pattern Tree)的数据结构来表示事务数据库中的频繁项集。

FP树是一种压缩的数据结构,它通过合并相同的项来减少存储空间。

本文将详细介绍FPGrowth算法的计算过程。

1. 构建FP树FPGrowth算法的第一步是构建FP树。

首先扫描事务数据库,统计每个项的频次,并按照频次从高到低对项进行排序。

然后对于每个事务,根据项的排序顺序构建FP树。

从根节点开始,依次将事务中的项添加到树中。

如果树中已经存在该项,则增加该项的频次;否则,创建一个新的节点并添加到树中。

最终构建得到的FP树可以表示事务数据库中的频繁项集。

2. 构建条件模式基在构建FP树的过程中,对于每个项,除了保存频次外,还需要保存它在FP树中的出现路径,称为条件模式基。

条件模式基是以该项为结尾的路径集合,用于后续的递归挖掘。

3. 递归挖掘频繁项集构建完FP树和条件模式基后,可以通过递归的方式挖掘频繁项集。

对于每个项,以它为前缀的频繁项集可以通过以下步骤获取:- 对于该项,计算它的条件模式基;- 对于条件模式基,构建对应的条件FP树;- 对于条件FP树,重复步骤1和步骤2,直到无法构建出更多的频繁项集为止。

4. 生成关联规则在挖掘出频繁项集后,可以根据支持度和置信度的阈值设置,生成关联规则。

关联规则表示项集之间的关系,可以帮助人们理解数据的内在规律。

关联规则的生成可以通过以下步骤进行:- 对于每个频繁项集,生成该项集的所有非空子集;- 对于每个子集,计算其支持度和置信度;- 根据支持度和置信度的阈值,筛选出满足条件的关联规则。

FPGrowth算法的特点是不需要生成候选项集,而是通过FP树和条件模式基的构建,直接挖掘出频繁项集。

相比于传统的Apriori算法,FPGrowth算法具有更高的效率和更少的存储空间需求。

这使得FPGrowth算法成为频繁项集挖掘领域的一种重要算法。

机器学习中的关联规则挖掘方法简介

机器学习中的关联规则挖掘方法简介

机器学习中的关联规则挖掘方法简介机器学习中的关联规则挖掘是一种用于发现数据集中不同属性之间的关联关系的方法。

这些关联关系可以帮助我们理解属性之间的相互作用,从而能够更好地进行数据分析和决策制定。

在本文中,我们将介绍机器学习中常用的关联规则挖掘方法,包括Apriori算法和FP-growth算法。

1. Apriori算法Apriori算法是一种用于发现频繁项集的经典算法。

频繁项集是指在数据集中经常同时出现的一组项的集合。

Apriori算法基于“先验原理”,即如果一个项集是频繁的,那么它的所有子集也是频繁的。

该算法采用一种逐层的方式,从$k$-项集生成$k+1$-项集,直到不能再生成新的项集为止。

Apriori算法的时间复杂度较高,因为需要多次扫描数据集进行计数。

2. FP-growth算法FP-growth算法是一种用于发现频繁项集的高效算法。

该算法通过构建一个称为FP树的数据结构来实现。

FP树具有压缩数据集的能力,从而减少了扫描数据集的次数。

FP-growth算法的关键步骤包括:构建FP树、挖掘频繁项集和生成条件模式基。

首先,根据事务的频率对数据集进行排序,然后构建FP树,最后通过递归遍历FP树来挖掘频繁项集。

相比于Apriori算法,FP-growth算法的时间复杂度更低。

3. 频繁项集和关联规则在关联规则挖掘中,频繁项集是指在给定最小支持度阈值下出现频率很高的项集。

而关联规则是从频繁项集中通过设置最小置信度阈值而获得的一种形式化表示。

关联规则通常具有“A ⇒ B”的形式,其中A和B都是项集。

关联规则的置信度表示当项集A出现时,项集B同时出现的概率。

4. 关联规则挖掘的应用关联规则挖掘在实际应用中有着广泛的应用。

例如,在市场篮子分析中,关联规则可以帮助商家了解购物者的购买习惯,从而进行商品定价和促销策略的制定。

此外,关联规则挖掘还可以应用于网络流量分析、医学诊断、检测新闻事件等领域。

5. 关联规则挖掘的局限性和挑战尽管关联规则挖掘是一种有用的方法,但也存在一些局限性和挑战。

fp-growth算法原理

fp-growth算法原理

fp-growth算法原理fp-growth算法是一种用于频繁项集挖掘的算法,它是基于一种称为FP树的数据结构来实现的。

该算法可以高效地挖掘事务数据集中的频繁项集,因此广泛应用于数据挖掘和机器学习领域。

一、FP树FP树是一种基于前缀树的数据结构,可以用来存储事务数据集中各个事务的项集。

它通过将项集按照出现次数从高到低进行排序,并进行压缩,从而大大减小了数据的存储空间。

FP树由一个根节点开始,每个节点存储一个项和该项出现的次数。

FP树上的每一个路径都代表一个项集,而每个路径上的叶节点都包含了相同的项集,而仅仅是出现的次数不同。

假设我们有以下事务数据集:{| class="wikitable" style="text-align:center" |+ style="font-size:larger;" |事务数据集 |- ! style="padding:0.2em 1em;text-align:left;" | 事务编号 ! style="padding:0.2em 1em;text-align:left;" | 项集 |- | 1 | A, B, C |- | 2 | B, D |- | 3 | C, D |- | 4 | A, B, D |- |}我们需要扫描整个事务数据集,计算每个项的出现次数,并按照出现次数从高到低进行排序,得到如下表格:{| class="wikitable" style="text-align:center" |+ style="font-size:larger;" |频繁项集 |- ! style="padding:0.2em 1em;text-align:left;" | 项 !style="padding:0.2em 1em;text-align:left;" | 支持度 |- | B | 3 |- | C | 2 |- | A | 2 |- | D | 2 |-}然后,我们可以通过FP树来表示整个事务数据集。

fpgrowth函数

fpgrowth函数

fpgrowth函数fpgrowth函数是一种用于频繁模式挖掘的算法,它是一种高效的数据挖掘方法,用于发现数据集中的频繁模式或关联规则。

在本文中,我们将详细介绍fpgrowth函数的原理、应用场景以及使用方法。

一、原理fpgrowth函数是基于FP树(Frequent Pattern Tree)的一种频繁模式挖掘算法。

它通过构建一个特殊的数据结构FP树来存储数据集,然后利用FP树来快速发现频繁项集。

FP树是一种紧凑的数据结构,它通过节点链接的方式表示数据集中的频繁项集,可以避免昂贵的模式枚举过程。

具体来说,fpgrowth函数的工作流程如下:1. 构建FP树:遍历数据集,统计每个项的频次,并根据频次排序生成频繁项集。

然后根据频繁项集构建FP树,将数据集映射到FP 树上。

2. 挖掘频繁项集:从FP树的根节点开始,递归地遍历每个节点,找到以当前节点为末尾的路径(即频繁项集),将其加入结果列表中。

3. 生成关联规则:根据频繁项集,使用置信度等指标来生成关联规则,可以通过设置最小支持度和置信度的阈值来控制规则的生成。

二、应用场景fpgrowth函数在很多领域都有广泛的应用,特别适用于:1. 市场篮子分析:可以挖掘顾客购买商品的频繁组合,从而进行交叉销售和推荐。

2. 网络流量分析:可以挖掘网络流量中的异常行为和攻击模式,用于网络安全监测和预警。

3. 社交网络分析:可以挖掘用户之间的关系和行为模式,用于社交网络推荐和社区发现。

4. 生物信息学:可以挖掘基因序列中的频繁模式,用于寻找基因间的关联和功能预测。

三、使用方法fpgrowth函数通常通过调用相应的库或软件包来实现,例如Python 中的mlxtend库、R语言中的arules包等。

以Python为例,使用mlxtend库的fpgrowth函数可以按照以下步骤进行:1. 导入库:首先导入mlxtend库。

2. 准备数据集:将数据集整理成列表或数组的形式。

面向目标的关联规则挖掘的一个FP增长算法

面向目标的关联规则挖掘的一个FP增长算法

维普资讯

18 ・ 1
集美大学学报 (自然科学版 )
第 1 卷 1
定 义 l 目标 O j b 为一 个 逻辑公 式 , 由 , 中项 目组成 的 目标关 系 式构 成. o 设 c/ 某事 务 中 的任 意 项集 ,若 中 的全 部项 目都 分 别 使 目标 O j .为 o b 为真 ( 立 ) 成 ,则 称 支持 u { b}= { O j . 在事 务 数据库 中 ,对 于某 条事务 ,若 目标 O j Oj X, b } b 为真 ,则 称该 事务 支 持 目标 O j 用 C u t D 记 录 D 中支 持项 集 的事务 数 ,用 C u t U { b }D )表 示 b. on( B) , B on( O j ,B
u ,b,其 中 / b o j  ̄i o为非 目标 项 目 ( 性 ) 集 ,r 目标项 目集. 属 。为
[ 收稿 日期 ]2 0 0 5—1 3 0- 1 [ 基金项 目]福建省 自然科学基金资助项 目 ( 0 10 1 ;福建省科技 三项重 点项 目 ( 0 0 5 A 30 1) K40 ) [ 作者 简介 ]石明兰 ( 9 7一) 16 ,女 ,讲 师 ,硕士生 ,从事数据挖掘研究.
[ 要]将 F .rwh算法应用于面 向 目标 的关 联规则 ( O 摘 P Go t O A) 挖掘 ,对 F .re的结 点进 行 了修改 , PTe 增 加了 目标 支持度计数 和效用度 累计两个 字段 ,对 F - rwh算法进 行 了改进 .实验 结果 表明 ,改进后 的 PG o t 方 法比基于 A r r算法和基于 Dre pi i o f 算法 的 O A挖掘效率更高 . e O [ 关键词 ]数据挖掘 ;关联规则 ;O A;效用度 ;F ・re PG o t O PTe ;F - r h w [ 图分类号 ]T 0 . 中 P3 16 [ 文献标识码 ]A

fpgrowth算法sql代码

fpgrowth算法sql代码

fpgrowth算法是一种常用的频繁模式挖掘算法,它能够快速有效地发现数据集中的频繁模式和关联规则。

而在实际应用中,我们常常需要将该算法应用到SQL数据库中,以便更好地对数据进行分析和挖掘。

本文将介绍fpgrowth算法的原理和SQL代码实现,以帮助读者更好地理解和应用该算法。

一、fpgrowth算法原理fpgrowth算法是一种基于频繁模式树(FP-tree)结构的频繁模式挖掘算法。

它通过两次遍历数据集,首先构建FP树,然后通过递归方式挖掘FP树中的频繁模式。

具体步骤如下:1. 构建FP树(1) 遍历数据集,统计每个项的频数,然后根据频数降序排序得到频繁1项集;(2) 再次遍历数据集,根据频繁1项集和频数构建FP树,每个项在FP树上对应一条路径。

2. 挖掘频繁模式(1) 从FP树的底部开始,递归向上回溯每个项的前缀路径,得到条件模式基;(2) 对于每个条件模式基,构建条件FP树,然后递归挖掘得到频繁模式。

二、fpgrowth算法SQL代码实现在SQL数据库中,我们可以通过使用递归查询和临时表来实现fpgrowth算法。

下面是一个简单的示例,假设我们有一个名为transaction_table的交易表,表中包含了交易ID和对应的商品项集。

```sql-- 创建临时表存储频繁1项集CREATE TEMPORARY TABLE frequent_item1 ASSELECT item, COUNT(*) AS countFROM transaction_tableGROUP BY itemHAVING count >= min_support;-- 构建FP树WITH RECURSIVE fp_tree(item, count, parent) AS (SELECT item, SUM(count) AS count, NULL AS parentFROM frequent_item1GROUP BY itemUNION ALLSELECT t.item, SUM(t.count), f.idFROM transaction_table tJOIN fp_tree f ON t.item = f.itemGROUP BY t.item, f.idSELECT * FROM fp_tree;```上述SQL代码中,我们首先创建一个临时表frequent_item1来存储频繁1项集,然后使用递归查询构建FP树。

fp-growth关联规则

fp-growth关联规则

fp-growth关联规则
FP-growth算法是一种常用的关联规则挖掘算法,它可以用于发现不同项之间的相关性。

在FP-growth算法中,首先通过构建一颗FP 树来表示数据,然后通过树的遍历来挖掘出频繁项集和关联规则。

具体来说,FP-growth算法的过程如下:
(1)首先扫描数据集,将所有的数据存储到一个项头表中,并按照出现频率从高到低进行排序。

(2)然后根据项头表中的顺序重新对数据集进行排序,并将一个事务的所有项按照项头表中的顺序进行排列,同时删除不满足最小支持度的项。

(3)基于新的数据集构建一颗FP树,节点包括一个项ID和计数值。

每条数据按照项头表中的顺序在树上进行插入,如果已经存在该项,则相应节点的计数值加1,否则创建新的节点并计数值为1。

(4)构建完FP树后,可以通过遍历树来找出频繁项集。

具体来说,从叶子节点开始,向上遍历直到根节点,每个遍历路径都形成一个频繁项集。

如果路径上的节点和它的后代节点构成的集合大于或等于最小支持度,那么该路径对应的频繁项集就是满足要求的。

(5)通过频繁模式树可以直接得出所有的频繁项,如果还需要进一步挖掘出它们之间的关联规则,可以采用递归的方式来完成。

具体来说,从一个频繁项集中任选一个项作为前件,然后根据置信度来筛选满足要求的关联规则。

总的来说,FP-growth算法是一种高效的关联规则挖掘算法,它不仅可以减少 I/O 的消耗,也可以根据 FP 树很快地计算出支持度和置信度等指标。

关联规则的四种算法

关联规则的四种算法

关联规则的四种算法关联规则是数据挖掘领域中的一个基础方法,其主要用于寻找一个数据集中不同属性之间的关系和规律。

在实际的应用场景中,关联规则算法被广泛应用于市场营销、电商推荐、客户分析等领域。

本文将介绍关联规则的四种经典算法:Apriori算法、FP-growth算法、ECLAT算法和SPMF算法,并分别从算法原理、实现过程、优缺点等多个方面进行详细的介绍。

一、Apriori算法Apriori算法是关联规则中的一种基础算法,它是R. Agrawal和R. Srikanth于1994年提出的。

该算法的主要思想是:如果某个项集是频繁的,那么它的所有子集也应该是频繁的。

这意味着如果一个项集没有达到最小支持度的要求,那么包含这个项集的项集必定不能达到最小支持度要求。

Apriori算法的实现过程主要分为两个步骤。

第一步是生成候选项集,即根据原始数据集生成所有可能出现的项集,包括单项、双项、三项等。

第二步是计算每个项集的支持度,并根据最小支持度对项集进行筛选,得到频繁项集。

Apriori算法的优点是它的思想简单易懂,容易实现。

然而,由于该算法需要生成大量的候选项集,因此它的计算复杂度比较高,而且在处理大规模数据时不够高效。

二、FP-growth算法FP-growth算法是一种基于树结构的关联规则算法,它最早是由Han J.和Kamber M.在2000年提出的。

该算法主要采用基于前缀树的方法,先将原始数据集转换为一棵FP树(频繁模式树),然后通过对FP树的递归遍历,得到所有的频繁项集。

FP-growth算法的实现过程主要分为两个步骤。

第一步是构建FP树,即对原始数据集进行一个预处理,生成一棵FP树。

第二步是遍历FP树,根据FP树的头指针表和条件模式基,递归地生成频繁项集。

FP-growth算法的优点是它不需要生成大量的候选项集,可以减少计算复杂度,同时也具有较高的效率和准确率。

同时,该算法也具有较好的扩展性和灵活性,可以通过实现不同的优化方式来适应不同的数据集。

关联规则挖掘的经典算法与应用

关联规则挖掘的经典算法与应用

关联规则挖掘的经典算法与应用关联规则挖掘是数据挖掘领域的重要技术之一,它能够从大规模数据集中发现出现频率较高的项集,并进一步挖掘出这些项集之间的关联规则。

通过挖掘关联规则,我们可以发现项集之间的隐藏规律,帮助人们做出更明智的决策。

本文将介绍关联规则挖掘的经典算法,包括Apriori算法和FP-growth算法,并探讨其在实际应用中的应用场景和效果。

一、Apriori算法Apriori算法是关联规则挖掘中最具代表性的算法之一。

它的核心思想是通过迭代的方式逐步发现频繁项集和关联规则。

Apriori算法的步骤如下:1. 初始化,生成所有频繁1项集;2. 迭代生成候选项集,并通过剪枝策略去除不满足最小支持度要求的候选项集;3. 重复步骤2直到无法生成新的候选项集;4. 根据频繁项集生成关联规则,并通过最小置信度要求进行筛选。

Apriori算法的优点是简单易懂,容易实现。

然而,由于其需要多次迭代和大量的候选项集生成操作,对于规模较大的数据集来说,效率较低。

二、FP-growth算法为了克服Apriori算法的低效问题,FP-growth算法应运而生。

FP-growth算法采用了FP树(Frequent Pattern tree)的数据结构来高效地挖掘频繁项集和关联规则,其主要步骤如下:1. 构建FP树,首先对事务数据库中的项进行统计排序,然后基于排序后的项构建FP树;2. 通过FP树的挖掘路径,得到频繁项集;3. 基于频繁项集生成关联规则,并通过最小置信度要求进行筛选。

FP-growth算法的优点是减少了候选项集的生成过程,大大提高了算法的效率。

同时,由于使用了FP树的结构,它也减少了算法所需占用的内存空间。

三、关联规则挖掘的应用场景关联规则挖掘在各个领域都有广泛的应用,下面我将介绍几个典型的应用场景。

1. 零售市场分析:通过挖掘购物篮中的关联规则,可以发现商品之间的关联性,帮助零售商制定促销策略,提高销售额。

fp-growth算法公式

fp-growth算法公式

fp-growth算法公式FP-growth算法是一种用于频繁项集挖掘的数据挖掘算法。

它通过构建一种称为FP树的数据结构来高效地发现频繁项集。

本文将介绍FP-growth算法的原理和步骤,并解释如何利用该算法进行频繁项集挖掘。

一、FP-growth算法原理FP-growth算法的核心思想是利用数据压缩和递归技术来高效地挖掘频繁项集。

它首先通过扫描事务数据库,统计每个项的频率,并根据频率降序排序。

然后,构建FP树,其中每个节点代表一个项,节点上的计数表示该项的频率。

最后,通过递归地挖掘FP树,找出频繁项集。

二、FP-growth算法步骤1. 构建频繁1项集:对事务数据库进行扫描,统计每个项的频率,并根据频率降序排序,得到频繁1项集。

2. 构建FP树:对于每个事务,按照频繁1项集的顺序,将事务中的项插入FP树中。

如果树中已经存在相同的项,则增加其计数;否则,在树中新增一个节点。

构建FP树的过程可以通过递归实现。

3. 构建条件模式基:对于每个频繁1项集,找出其对应的条件模式基。

条件模式基是指以频繁1项集为后缀的路径集合。

4. 递归挖掘FP树:对于每个频繁1项集,依次构建条件FP树,然后递归地挖掘该树,找出频繁项集。

递归的停止条件是树为空或只含有一个节点。

三、FP-growth算法实例假设有如下事务数据库:T1:{A, B, C, E}T2:{B, C}T3:{A, B, D}T4:{A, C, D, E}T5:{A, C, E}1. 构建频繁1项集:统计每个项的频率得到 {A: 4, B: 3, C: 4, D: 2, E: 3},根据频率降序排序得到 {A, C, B, E, D}。

2. 构建FP树:依次将事务插入FP树中,得到如下树结构:- 根节点- A (4)- C (3)- E (2)- B (1)- C (1)- E (1)- D (1)- C (1)- E (1)3. 构建条件模式基:对于每个频繁1项集,找出其对应的条件模式基。

数据挖掘中的关联规则挖掘方法总结

数据挖掘中的关联规则挖掘方法总结

数据挖掘中的关联规则挖掘方法总结数据挖掘是一种从大量数据中发现隐藏模式、关联规则和有用信息的过程。

在数据挖掘的众多任务中,关联规则挖掘是其中一项重要的技术。

关联规则挖掘是一种用于发现数据集中项之间相互关联的方法,它可以帮助我们了解数据之间的关联性,从而做出更好的决策。

在数据挖掘中,关联规则挖掘的目标是通过发现频繁项集和关联规则,揭示数据之间的关联性。

频繁项集是在数据集中经常出现的项集,而关联规则则是描述这些项集之间的关联关系。

关联规则通常具有形如“A->B”的形式,表示A与B之间存在关联。

为了完成关联规则挖掘的任务,有许多方法被提出并得到了广泛应用。

下面将对其中的三种经典方法进行介绍和总结。

1. Apriori算法Apriori算法是一种经典的关联规则挖掘方法。

它的基本思想是通过逐步构建更大的频繁项集,然后生成关联规则。

Apriori算法的核心概念是“先验原则”,即如果一个项集不频繁,那么它的超集也一定是不频繁的。

Apriori算法的过程分为两个主要步骤:频繁项集的生成和关联规则的生成。

频繁项集的生成通过扫描数据集来计算每个项集的支持度,并根据设定的最小支持度阈值来筛选出频繁项集。

关联规则的生成通过对频繁项集进行相应的操作和筛选,以获得具有足够置信度的关联规则。

2. FP-growth算法FP-growth算法是另一种常用的关联规则挖掘方法。

相比于Apriori算法,FP-growth算法具有更高的效率。

FP-growth算法的核心数据结构是FP树,该树的节点表示项集中的某项以及它的计数。

FP-growth算法首先通过建立FP树来表示数据集,并通过压缩和剪枝来减少树的规模。

然后,通过递归遍历FP树来生成频繁项集和关联规则。

FP-growth算法的关键优势在于只需对数据集进行两次扫描,大大提高了挖掘效率。

3. ECLAT算法ECLAT算法是一种基于垂直数据表示的关联规则挖掘方法。

与Apriori算法和FP-growth算法不同,ECLAT算法使用的数据表示方式不是水平数据集,而是垂直数据集。

数据挖掘中的关联规则挖掘方法

数据挖掘中的关联规则挖掘方法

数据挖掘中的关联规则挖掘方法数据挖掘作为一种从大量数据中发现潜在模式、关系和规律的技术,已经在各个领域得到了广泛应用。

其中,关联规则挖掘是数据挖掘的重要任务之一,旨在从数据集中挖掘出物品之间的频繁关联关系。

本文将介绍数据挖掘中常用的关联规则挖掘方法,包括Apriori算法、FP-Growth算法以及关联规则评估方法。

一、Apriori算法Apriori算法是一种经典的关联规则挖掘算法,其基本思想是通过逐层搜索的方式,从含有k个项的频繁模式集构建含有k+1个项的频繁模式集,直至无法继续生长为止。

具体而言,Apriori算法包括以下步骤:1. 初始化:扫描数据集,统计每个项的支持度,并根据最小支持度阈值过滤掉不满足条件的项。

2. 生成候选集:根据频繁项集构建候选集,即通过组合频繁项集生成含有k+1个项的候选集。

3. 剪枝:剪枝操作用于去除候选集中不满足Apriori性质的项,即如果一个候选项的子集不是频繁项集,则该候选项也不可能成为频繁项集。

4. 计算支持度:扫描数据集,统计候选项集的支持度,并根据最小支持度阈值过滤掉不满足条件的候选项。

5. 迭代生成频繁项集:根据支持度筛选后的候选项集作为新的频繁项集,继续进行候选集生成、剪枝和支持度计算的过程,直到无法继续生成新的频繁项集为止。

二、FP-Growth算法FP-Growth算法是一种基于数据结构FP树的关联规则挖掘算法,相比于Apriori算法,FP-Growth算法在构建频繁项集时能够避免候选集的生成和扫描数据集的过程,从而提高了挖掘效率。

具体而言,FP-Growth算法包括以下步骤:1. 构建FP树:通过扫描数据集,构建一颗FP树,其中每个节点表示一个项,并记录该项在数据集中的支持度。

2. 构建条件模式基:对于每个项,构建其对应的条件模式基,即以该项为后缀的所有路径。

3. 递归挖掘频繁模式:对于每个项,通过递归的方式挖掘其条件模式基,得到频繁模式集。

fpgrowth算法例题

fpgrowth算法例题

fpgrowth算法例题
(原创版)
目录
1.FPGrowth 算法简介
2.FPGrowth 算法例题概述
3.FPGrowth 算法例题解答过程
4.FPGrowth 算法例题结论
正文
【1.FPGrowth 算法简介】
FPGrowth 算法是一种挖掘频繁项集的算法,由 Philippe
Fournier-Viger 在 1998 年提出。

该算法主要应用于数据挖掘、关联规则挖掘等领域,可以帮助我们找出数据集中频繁出现的项集,从而发现数据背后的规律。

【2.FPGrowth 算法例题概述】
假设有一个数据集,包含以下五个事务:
事务 1:{牛奶,面包,黄油}
事务 2:{啤酒,牛奶,黄油}
事务 3:{啤酒,可乐}
事务 4:{牛奶,面包,可乐}
事务 5:{啤酒,可乐}
现在需要找出支持度大于 0.1 的频繁项集。

【3.FPGrowth 算法例题解答过程】
FPGrowth 算法主要包括两个步骤:生成候选项集和扫描事务数据库。

(1) 生成候选项集:
首先,将所有单个项作为候选项集的头部,然后依次将候选项集的头部扩展为长度为 2、3、4...的项集,将这些项集添加到候选项集库中。

候选项集库:
{牛奶,面包,黄油,啤酒,可乐}
(2) 扫描事务数据库:
依次扫描事务数据库中的每个事务,计算每个候选项集在当前事务中的支持度,如果支持度大于 0.1,则将该候选项集加入到频繁项集库中。

频繁项集库:
{牛奶,面包}
【4.FPGrowth 算法例题结论】
通过 FPGrowth 算法,我们找到了支持度大于 0.1 的频繁项集:{牛奶,面包}。

fpgrowth算法例题

fpgrowth算法例题

fpgrowth算法例题FP-Growth算法例题FP-Growth算法是一种频繁模式挖掘算法,用于发现数据集中的频繁项集和关联规则。

该算法通过构建一棵FP树来高效地挖掘频繁模式,相比较传统的基于Apriori算法的频繁模式挖掘方法,FP-Growth算法具有更高的效率和更好的性能。

在本例中,我们将使用一个具体的数据集来说明FP-Growth算法的实际应用。

假设我们有一批顾客购买商品的交易记录,其中每条记录代表一次顾客购买行为,记录中包含的商品为该顾客一次购买的所有商品。

我们的目标是从这些交易记录中挖掘出频繁项集和关联规则,以便为商家提供营销策略和推荐系统。

首先,我们需要将交易记录整理成FP-Growth算法输入的数据格式,即将每条交易记录转化成一组商品集合。

例如,假设我们有以下三条交易记录:交易记录1:{牛奶, 糖, 面包}交易记录2:{咖啡, 糖, 茶}交易记录3:{牛奶, 茶, 面包}我们将这些交易记录转化为如下的商品集合形式:{牛奶, 糖, 面包}{咖啡, 糖, 茶}{牛奶, 茶, 面包}接下来,我们使用FP-Growth算法对这些商品集合进行频繁模式挖掘。

FP-Growth算法主要包括两个步骤:构建FP树和抽取频繁项集。

首先,我们需要构建FP树。

FP树是一种前缀树的数据结构,用于存储频繁项集的信息和挖掘频繁项集的过程。

构建FP树的步骤如下:1. 第一次遍历数据集,统计每个商品的支持度,并按照支持度从大到小对商品进行排序。

支持度定义为某个商品在数据集中出现的次数占所有交易记录数的比例。

经过第一次遍历,商品的支持度如下:牛奶: 2糖: 2面包: 2茶: 2咖啡: 1排序后的商品顺序为:[牛奶, 糖, 面包, 茶, 咖啡]2. 第二次遍历数据集,根据商品排序后的顺序,构建FP树。

首先,创建一个空的根节点。

然后,按照第一次遍历中的商品顺序,依次处理每个交易记录。

对于交易记录{牛奶, 糖, 面包},从根节点开始,先检查根节点是否有子节点牛奶,如果有则数量加1,否则创建一个牛奶的子节点并将数量置为1。

fp-growth算法过程

fp-growth算法过程

fp-growth算法过程FP-growth算法是一种用于频繁项集挖掘的快速算法。

它通过构建一个FP树来表示事务数据库,并利用树结构的特点来高效地发现频繁项集。

本文将介绍FP-growth算法的具体过程。

1. 构建FP树首先,遍历事务数据库,统计每个项的出现次数,得到项头表。

然后,按照项头表的出现次数从大到小对数据库进行排序。

接着,按照排序后的顺序,对每个事务进行处理,构建FP树。

从根节点开始,依次插入事务中的每个项,如果当前节点的子节点中已经存在相同的项,则将计数加一;否则,创建一个新的子节点。

重复该过程,直到处理完所有事务。

2. 构建条件模式基构建完FP树后,从根节点开始,依次遍历每个项头表中的项,在每次遍历中,找到该项在FP树中的所有路径,即条件模式基。

条件模式基是由该项的所有路径上的非叶子节点组成的。

3. 递归挖掘频繁项集对于每个项头表中的项,以该项为末尾,构建一个条件模式树。

然后,对条件模式树进行递归处理,重复步骤1和步骤2,直到条件模式树为空。

递归处理的结果是得到了以该项为末尾的所有频繁项集。

4. 合并频繁项集将递归挖掘得到的所有频繁项集进行合并,得到最终的频繁项集。

通过以上四个步骤,就可以使用FP-growth算法快速地挖掘出频繁项集。

相比于传统的Apriori算法,FP-growth算法具有以下几个优点:1. 减少了扫描数据库的次数。

在构建FP树时,只需要扫描一遍数据库,而不需要多次扫描。

2. 利用了树结构的特点,避免了生成候选项集的过程。

FP树的每个路径都对应着一个频繁项集,通过递归处理条件模式树,可以快速得到频繁项集。

3. 减少了内存的占用。

FP树只需要存储每个节点的计数和指向子节点的指针,相对于存储整个事务数据库,所占内存较小。

FP-growth算法是一种高效的频繁项集挖掘算法。

通过构建FP树和递归处理条件模式树,可以快速地发现频繁项集。

相比于传统的Apriori算法,FP-growth算法具有更高的效率和更小的内存占用。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第11卷 第2期集美大学学报(自然科学版)Vol .11 No .2 2006年6月Journal of J i m ei University (Natural Science )Jun .2006 [收稿日期]2005-10-31[基金项目]福建省自然科学基金资助项目(A0310011);福建省科技三项重点项目(K04005)[作者简介]石明兰(1967-),女,讲师,硕士生,从事数据挖掘研究.[文章编号]1007-7405(2006)02-0117-05面向目标的关联规则挖掘的一个FP 增长算法石明兰1,3,杨 晖2,叶东毅3(1.福州大学土木工程学院,福建福州350002;2.福州大学至诚学院,福建福州350002;3.福州大学数学与计算机科学学院,福建福州350002)[摘要]将FP 2Gr owth 算法应用于面向目标的关联规则(OOA )挖掘,对FP 2Tree 的结点进行了修改,增加了目标支持度计数和效用度累计两个字段,对FP 2Gr owth 算法进行了改进.实验结果表明,改进后的方法比基于Ap ri ori 算法和基于Dfree 算法的OOA 挖掘效率更高.[关键词]数据挖掘;关联规则;OOA;效用度;FP 2Tree;FP 2Gr owth [中图分类号]TP 30116[文献标识码]A0 引言传统的关联规则挖掘的是项集之间的关联规则[1],即项目之间的关联性,而在某些应用领域希望找出项集对特定目标的支持程度,即希望挖掘满足该目标的关联规则,这些规则除应满足给定的支持度、置信度外,还应该满足用户给定的效用度[2].如在医疗数据库中,医生不仅希望知道哪些处方可以治疗病人,还希望知道其确切的疗效,在此背景下Shen Y 1D 1等提出了“基于效用度的面向目标的关联规则(OOA )挖掘的方法[2,3]”.目前挖掘OOA 的方法有基于Ap ri ori 算法[1]及基于D isjunctive 2free 的算法[4].Ap ri ori 算法及其改进形式在挖掘OOA 规则的过程中需要反复扫描数据库,并产生大量的候选集,严重影响算法的效率.DFree 算法要先计算代表集,再通过代表集来计算频繁集.基于FP 2Tree 的FP 2Gr owth 算法[5]只需要扫描数据库两次,由此构造的FP 2tree 上包含了全部的频繁项集,频繁项集的挖掘只需在FP 2Tree 上进行,其挖掘速度比改进的Ap ri ori 算法快一个数量级[5].但FP 2Gr o wth 算法在挖掘时需要递归地生成条件FP 2Tree,需要很大的时间和空间,文献[6]对FP 2Tree 进行了改进,在挖掘频繁模式时不生成条件模式树,从而大大提高规则的挖掘速度.针对OOA 挖掘的特点,笔者在文献[6]工作的基础上对FP 2Tree 的结点结构进行了扩充,增加了目标支持度计数和效用度累计两个字段,使之适用于OOA 挖掘.1 问题的描述设D ={T 1,T 2,…,T n }为一有限事务数据库DB ,其中每个事务T i (i ∈[1,…,n ]都有惟一的标识I D ,I ={I 1,I 2,…,I m }为项目(或属性)的全集,项目集I 可以划分成两个不相交的非空子集,I =In Obj∪IObj,其中In O bj为非目标项目(属性)集,I n O bj为目标项目集.集美大学学报(自然科学版)第11卷定义1 目标Obj 为一个逻辑公式,由I O bj中项目组成的目标关系式构成.设X <I n O bj为某事务T 中的任意项集,若T 中X 的全部项目都分别使目标Obj 为真(成立),则称T 支持X ∪{Obj }={X,O bj }.在事务数据库中,对于某条事务T,若目标Obj 为真,则称该事务T 支持目标Obj .用Count (X,DB )记录DB 中支持项集X 的事务数,用Count (X ∪{O bj },DB )表示事务数据库DB 中支持X ∪{Obj }的事务数,|D |为事务数据库中总的事务数.定义2 设X ΑIn O bj,X →O bj (os %,oc %,u )为面向目标数据挖掘中的一条关联规则,os %和oc %分别为该规则的目标支持度和目标可信度,则它们分别定义如下:os %=Count (X ∪{Obj },DB )|D |×100%, oc %=Count (X ∪{O bj },DB )Count (X,DB )×100%. 设项目A 为目标属性,值域为V,对任意的v ∈V,当A =v 时,由领域专家给定一个效用度与之对应,即U:f (A =v )→R ,R 为实数集.则一条记录(事务)的效用度为:其对应的目标属性值所对应的效用度的和,即U r =∑A ∈I Obj ∧A =v ∈rf (A =v )例1 表1为某目标事务数据库,I D 为区分记录的记录号.表1中ite m set 为非目标属性,而Obj 1及Obj 2为目标属性.目标Obj 可设定为Obj 1=1并且Obj 2=1,则目标由两个目标关系式用逻辑运算符构成,即Obj 1=1∧Obj 2=1.设表2为领域专家给定的目标项目属性的不同取值所对应的效用度表,则表1中事务1所对应的效用度为:015+015=1;事务4所对应的效用度为:-0.5+(-0.5)=-1.表1 一个简化的目标事务数据库DBTa b 11 A si m p l ed o b j e c ti ve bu s i ne s s da ta ba se I D ite m set Obj 1Obj 2I D ite m set Obj 1Obj 21I 1,I 2,I 3112I 2,I 4113I 2,I 3114I 1,I 2,I 4005I 1,I 3116I 2,I 3007I 1,I 3118I 1,I 2,I 3,I 5119I 1,I 2,I 311表2 目标属性不同取值所对应的效用度表(由业内专家给定)Ta b.2 Each dom a i n va l ue of obj ecti vea ttri bu te co rre spo nd i ng u tility (sp ec i fi e d by dom a i n exp e rts )目标属性效用度015-015Obj 111Obj 2定义3 任意项集X ΑI n O bj为OOA 项集.若X ∪{Obj }的支持度不小于预先指定的最小目标支持度阈值m in_os %,则X 为OOA 频繁项集.定义4 设项集X ΑIn Obj,则X →Obj 的效用度为包含X 的记录的效用度的平均值.即,u =(∑r ∈DB ∧X <ru r )/|X |,其中|X |为DB 中支持X 的记录数.定义5 若对于预先指定的最小目标支持度阈值m in_os %、最小目标可信度阈值m in_oc %和最小效用度阈值m in_u,分别有os %不小于m in_os %、oc %不小于m in_oc %及u 不小于m in_u,则X →Obj (os %,oc %,u )是OOA 规则.关于OOA 挖掘有如下结论:定理1[2] 若项集X (X ΑI n Obj)是OOA 频繁项集,则ΠY ΑX,Y ≠ ,Y 是OOA 频繁的.定理2[2] 若项集X (X ΑIn Obj)不是OOA 频繁项集,则ΠY =X,Y ΑIn O bj,Y 也不是OOA 频繁项集合.2 基于FP 2Gr owth 算法的OOA 挖掘211 构造OOA FP 2TreeOOA FP 2Tree 的结点包含6个字段:项的序号(order )、支持度计数(count )、结点的目标支持・811・ 第2期石明兰等:面向目标的关联规则挖掘的一个FP 增长算法度计数o_count 、结点的效用度累计iu 、指向最左子女结点或父结点的指针(ahead )及指向兄弟结点或结点链中下一结点的指针(next ).构造OOA FP 2Tree 的步骤:1)扫描数据库DB ,得到每个项的支持度计数和目标支持度计数.2)将项按目标支持度计数降序排列,从1开始按升序为已排序的项目编号,得到项目-序号表.3)扫描数据库DB ,对每个事务:①删除事务中目标支持度计数小于预先给定值的项,剩下的项转换成序号并排序,得到orderlist;②将orderlist 插入到OOA FP 2Tree 中,插入方法与构造FP 2tree [4]的方法相同.4)以先根次序遍历OOA FP 2Tree,生成结点链,统计具有相同序号的结点的目标支持度的计数和及效用度的累加和,并翻转ahead 指针.例2 如表1所示.设目标为Ob j 1=1∧Obj 2=1,项目I 1,I 2,I 3,I 4,I 5所对应的目标支持度计数为:5,5,6,1,1,其对应的序号分别为2,3,1,4,5,设最小目标支持度计数为1,则生成的OOA FP 2Tree 如图1所示.引理1[5] 设项集X ={I 1,I 2,…,I k }ΑIn O bj,I 1,I 2,…,I k 对应的序号分别为O 1,O 2,…,O K (设O 1,O 2,…,O K 已经按照从小到大排序).则项集X 的目标支持度计数为:在OOA FP 2Tree 中所有以根为起点,O K 为终点,包含O 1,O 2,…,O K 的路径上,以O k 为标记的结点的计数的和.由OOA FP 2Tree 的构造过程及项集的长度归纳不难证明引理1.引理1表明,OOA FP 2Tree 中包含了数据库DB 中所有OOA 频繁项集.212 基于OOA FP 2Tree 构造被约束子树定义6 设k i ,…,k 2,k 1为项目的序号,其对应的项目分别为I k ,…,I 2,I 1,L 为OOA FP 2Tree 树中从根结点到结点P 的一条子路径.L 被项集{I k ,…,I 2,I 1}约束:表示有P 的子孙结点M ,使得序号k i ,…,k 2,k 1出现在从P 到M 的路径上,并且结点M 对应的项目序号为k 1,P 的紧邻子结点对应的项目序号为k i ,结点P 称为子路径L 的端点.结点M 的目标支持度计数c 称为被约束子路径L 的目标支持度计数.OOA FP 2Tree 中所有被{k i ,…,k 2,k 1}约束的子路径组成的子树,称为被{k i ,…,k 2,k 1}约束的子树,记为S td (k 1,k 2,…,k i ).设结点N 为S td (k 1,k 2,…,k i )的结点,则所有经过结点N 被{k i ,…,k 2,k 1}约束的子路径的目标支持度计数和,称为结点N 的目标支持度计数.任意序号为k 的结点,从k 的结点链中的每个结点出发,自底向上搜索OOA FP 2Tree 即可以构造S td (k ).设指针数组branch[],每个指针指向一条被约束子路径的端点;整型数组o _b _count []、b _count[]及b_iu_count[]分别记录各个被约束子路径的目标支持度计数、支持度计数及效用度累加和;整型数组S td{k 1,k 2,…,k i }_o_count[]、S td (k 1,k 2,…,k i )_count[]及S td (k 1,k 2,…,k i )_iu_count[],记录S td (k 1,k 2,…,k i )中具有相同序号的结点的目标支持度计数、支持度计数及效用度累加和.例3 图1所示的OOA FP 2Tree 中,序号为3的结点的被约束子树如图2所示.设序号k 和j 对应的项目分别为I k 和I j ,由引理1和构造被约束子树的过程可以得到引理2.引理2[5] 若序号为j 的结点在S td (k )中出现,则项集I k ,I j 的目标支持度计数为S td (k )_o_count[j].被约束子树S td (k 1,K 2,…,k m -1,k m ),可以由S td (k 1,k 2,…,k m -1)构造,构造过程与构造S td (k )类似.并得到如下引理.引理3[6] 若序号为j 的结点在S td (k 1,k 2,…,k m )中出现,则项集{I k 1,I k 2,…,K k m ,I j }的目标支持度计数为S td (k 1,k 2,…,k m )_o_count [j].213 基于OOA FP 2Tree 的被约束子树的OOA 算法使用全程数组变量O_FP [],用于存放OOA 频繁项集(项目用对应的序号表示),len 表示该频・911・集美大学学报(自然科学版)第11卷繁项集的长度.对每个序号i ,主程序通过序号-项目表将序号i 转换成对应的项目,存入O 2FP []中,输出OOA 频繁1-项集及其目标支持度.构造OOA FP 2Tree 的被约束子树S td (i ),然后应用过程m ine (),挖掘更长的OOA 频繁项集,算法如下: Procedure OOA_FP (OOAFP_Tree ){L en =0;For i =Max_order downt o 1do {/3Max_O rder 为最大的项目序号3/O_FP [++len ]=ite m (i );输出OOA 频繁1-项集及其目标支持度计数、支持度计数及效用度累加和;基于OOA FP 2Tree 构造S td (i );I f (S td (i )中存在非根结点)M ine (S td (i ));L en 22;}}基于S td (i )挖掘更长OOA 频繁项集的算法M ine ()如下:Procedure m ine (S td (k 1,k 2,…,k m )){For i =k m -1downt o 1do{I f (S td (k 1,k 2,…,k m )_o_count[i]大于等于最小目标支持度)O_FP[++len ]=ite m (i );输出O_FP 中的OOA 频繁项集及其目标支持度计数、支持度计数及效用度累加和;基于S td (k 1,k 2,…,k m ),构造S td (k 1,k 2,…,k m ,i );I f (S td (k 1,k 2,…,k m ,i )中存在非根结点)M ine (S td (k 1,k 2,…,k m ,i ));L en 22;}}} 定理3[6] 对于给定的事务数据库DB 和最小目标支持度阈值,基于被约束子树的挖掘算法能够正确产生所有的OOA 频繁项集.证明 1)由引理2和引理3可以证明本文算法产生的项集都是频繁的;2)设任意项集X ={I 1,…,I k },其目标支持度计数为o_count ,I 1,…,I k ,对应的序号分别为o 1,…,o k .由引理2和引理3,对项集X 的长度进行归纳证明,当k >1时,S td (o 1,…,o k -1)将由算法构造,且S td (o 1,…,o k -1)_o_count (o k )=c ;再对项集X 的长度进行归纳,可以证明X 由本文的OOA 2FP 算法生成.在挖掘出所有频繁集后,再根据计算公式,计算出规则的目标可信度和效用度,以及根据预先给定的目标可信度阈值和效用度阈值,判断该规则是否符合设定的要求.例4 根据挖掘OOA 频繁项集算法,可知项集X ={I 1,I 2,I 3}是OOA 频繁的,且X →Obj 的支持度计数、目标支持度计数、效用度累加和分别为3,3,3.则该规则的目标可信度和效用度分别为:3÷3=1,3÷3=1.设目标可信度和效用度阈值分别为50%、50%;则{I 1,I 2,I 3}→Obj 为OOA 规则.・021・ 第2期石明兰等:面向目标的关联规则挖掘的一个FP增长算法3 性能分析笔者所采用的实验环境为:I ntel Pentium 4pu 2140GHz 、2142MHz,512MB 内存;编程语言Del phi 710.测试数据库为Mushr oom ,实验结果如图3所示,从图3可以看出:基于OOA FP 2Tree 的OOA 挖掘算法比基于Ap ri ori 算法的OOA挖掘算法[2,3]的速度有很大的提高,也比基于Dfree 的OOA 挖掘[6]算法速度更快.4 小结笔者将基于改进的FP 的算法应用于OOA 挖掘中,理论分析和实验结果表明,该方法在时间效率上比基于Ap ri ori 的OOA 挖掘[2,3]方法有较大幅度的提高,也比基于Dfree 算法的OOA 挖掘[7]方法有所提高.[参考文献][1]Agrawal R,Srikant R.Fast algorith m s for m ining ass ociati on rules in large database [C ]//I N T L.Pr oc of the 20th I N T Lconf on Very Large Databases .San Francisco:Morgan Kauf mann,1994:4872499.[2]Shen Yi 2Dong,Zhong Zhang,Q iang Yang .Objective 2O riented U tility 2Based A ss ociati on M ining [C ]//I EEE .Pr oceed 2ings of the 2002I EEE I nternati onal Conference on Data M ining (I C DM π02).W ashingt on:I EEE Computer Society,2002:4262433.[3]Ray mond Chan,Q iang Yang,Yi 2Dong Shen .M ining H igh U tility Ite m set [C ]//I EEE .Pr oceedings of the Third I EEEI nternati onal Conference on Data M ining .W ashingt on:I EEE Computer Society,2003:19226.[4]Bykowski A,R igotti C .A condensed rep resentati on t o find frequent patterns [C ]//AC M.Pr oceedings of the T wen 2teenth AC M SI G ACT 2SI G MOD 2SI G ART Sy mposiu m on Princi p les of Database System s .Santa Barbara:AC M p ress,2001:2672273.[5]Han J ia wei,Pei J ian,Yin Yi w en .M ining frequent patterns without candidate generati on [C ]//AC M.Pr oceedings ofthe 2000AC M SI G MOD internati onal conference on Management of data .Dallas:AC M p ress,2000:1212.[6]范明,李川.在FP 2树中挖掘频繁模式而不生成条件FP 2树[J ].计算机研究与发展,2003,40(8):121621222.[7]杨晖,叶东毅.D isjunctive 2free 模式算法在OOA 挖掘中的应用[J ].计算机科学,2005,32(8A ):1672170.A FP 2Growth A lgor ith m for O bjecti ve 2or i en ted A ssoc i a ti on Rules M i n i n gSH IM ing 2lan1,3,Y ANG Hui 2,YE Dong 2yi3(1.College of Civil Engineering,Fuzhou University,Fuzhou 350002,China;2.Zhi Cheng College,Fuzhou University,Fuzhou 350002,China;3.College of Mathe matics and Computer Science,Fuzhou University,Fuzhou 350002,China )Abstract:This paper app lies FP 2Gr owth algorith m t o objective 2oriented ass ociati on rules (OOA )m in 2ing .For the sake of adap tability,FP 2Gr owth algorithm is i m p r oved by modifying FP 2tree πs nodes and adding t w o fields of objective support counting and utility counting for each node .Experi m ental results show that thep resented app r oach is more efficient than the algorith m s based on Ap ri ori or D isjunctive 2free patterns .Key words:data m ining;ass ociati on rules;OOA;utility;FP 2Tree;FP 2Gr owth(责任编辑 陈 敏)・121・。

相关文档
最新文档