关联规则挖掘
-
概述
- 相关性检验:检验数据特征之间线性相关性的统计量,取值范围[-1,1],绝对值越大特征之间的相关性越强
- 衡量指标
- 重要性:用关联规则中包含的所有特征(X=A∪B)的支持度(support)S(X)来衡量【即为关联规则被多少比例的数据覆盖】
- 置信度:衡量规则可信程度
- 重要性:用关联规则中包含的所有特征(X=A∪B)的支持度(support)S(X)来衡量【即为关联规则被多少比例的数据覆盖】
- 定量描述规则:给定数据集,找出所有不小于预先设置的支持度阈值min_suppt 和置信度阈值min_conf规则的集合
- 强关联规则:在支持度和置信度两个方面满足最小的条件
- 步骤:
- 找到所有不小于支持度阈值的规则【频繁规则】
- 从所有频繁规则中进行筛选,过滤掉小于置信度阈值的规则
- 关联规则学习的核心问题:找出数据中的频繁项集的问题
- 关联规则学习步骤:
- 找出所有频繁项集【样本的每一个特征Xi被称为项,每个样本可以看作是项的集合即项集】
- 根据频繁项集生成频繁规则
- 根据置信度等指标进一步过滤筛选规则
- 关联规则学习一般只能处理布尔型数据
- 连续型/多类型数据,需进行离散化和数据编码等预处理
-
Apriori算法
- 使用项集的支持度性质,避免穷举所有候选集,提高计算效率【频繁k项集的发现基于频繁(k-1)项集,避免产生无用的候选项集】
- 算法性质
- 频繁项集性质:如果一个项集不是频繁项集,那么它的所有超集都不可能是频繁项集
- 由此,对于某一个(k+1)项集,只要存在一个k项集子集不是频繁的,那么在不需要计算其支持度的情况下就可以直接判断该项集不是频繁的
- 算法步骤
- 从k=1开始不断迭代,第k步时发现所有频繁k项集
- 生成候选集Ck
- 将两个k项集求并集,得到一个大小不小于k的项集{x1,x2},{x2,x4}→{x1,x2,x4}
- 为提高效率,将项集中的特征按照特征名进行排序
- 过滤候选集,获得频繁项集Lk
- 生成候选集后,重新遍历数据集,计算候选集中每个项集的支持度
- 根据预设的支持度阈值,过滤实际支持度达不到阈值的项集,获得频繁(k+1)项集
- 生成候选集Ck
- 从k=1开始不断迭代,第k步时发现所有频繁k项集
-
FP-Growth算法
- 依靠一种能够压缩原始数据的频繁模式树
- 采用分治的思想,对构造的条件FP-tree进行递归挖掘
- FP-tree特点
- 由于建树过程中,数据记录共享前缀节点,树的大小远小于原始数据集
- FP-tree的节点存储了支持度技术的信息,有利于挖掘频繁项集
- 使用FP-tree进行频繁项集挖掘,避免频繁访问遍历数据集【遍历两次数据集,将原始数据集压缩成树形结构FP-tree】
- 与Apriori算法一样,输出结果是频繁项集而不是关联规则
- 不产生无用的候选项集
- 算法过程分为两步
- FP-tree的构建
- 将数据集以树结构的方式进行存储
- 根节点为null
- 其他节点包含特征项和支持度信息
- 快速高效进行频繁项集挖掘
- 引入频繁项表,包含特征项和链表
- 频繁项表中的记录按照特征项支持度将序排列
- 链表链接树中含相同特征项的节点
- 步骤
- 遍历数据集,计算特征项的支持度并降序排列,通过支持度阈值α淘汰不频繁的项,获得频繁项集L1
- 创建FP-tree和对应的频繁项表,并按照如下方法遍历数据集
- 对于D中样本
- 按照L1生成样本中的频繁项并排序
- 将排序过的频繁项集插入到树中,更新节点的支持度计数
- 更新频繁项表中的链表内容
- 对于D中样本
- 引入频繁项表,包含特征项和链表
- 将数据集以树结构的方式进行存储
- 基于FP-tree进行递归挖掘频繁项集
- 将FP-tree划分为多个条件模式库【CPB】
- 依据每个CPB,构建条件频繁模式树
- 与特定后缀结尾的项集有关联
- 以递归方式对条件FP-tree 独立挖掘频繁项集
- 将挖掘频繁项集的任务拆分为一些子频繁项集挖掘任务
- 关联规则生成
- 根据频繁项集生成关联规则
- 根据预置的置信度指标,过滤第一步的关联规则,生成强关联规则
- FP-tree的构建