数据挖掘相对于机器学习范围更广泛
Hadoop是一种频繁读取的方式,是一种需要不断读写的过程。
Apriori算法时间复杂度和空间复杂度都相对较高
电商推荐:协同过滤
根据用户行为相似性推荐商品
learing to rate
1、关联规则简介
-
数据挖掘是一项从大量的记录数据中提取有价值的、人们感兴趣的知识,这些知识是隐含的、事先未知的有用信息,提取的知识一般可
表示为概念(Concepts)、规则(Rules)、规律(Regular ides)、模式(Patterns)等形式。 -
关联规则是当前数据挖掘研究的主要算法之一,它反映一个事物与其他事物之间的相互依存性和关联性。如果两个或者多个事物之间存在一定的关联关系,那么,其中一个事物就能够通过其他事物预测到。
-
典型的关联规则发现问题是对超市中的货篮数据(Market Basket)进行分析。通过发现顾客放货篮中的不同商品之间的关系来分析顾客的购买习惯。
关联规则:发现数据中的规律
- 超市中什么产品会一起购买?(组合推荐)
- 顾客在买了一台PC之后下一步会购买?(搭配推荐)
- 哪种DNA对这种药物敏感?
- 我们如何自动对Web文档进行分类?
- 论文查重?
2、关联规则的基本概念
-
设I={i1, i2,…, im}为所有项目的集合,D为事务数据库,事务T是一个项目子集(T⊆I)。每一个事务具有唯一的事务标识TID。设A是一个由项目构成的集合,称为项集。事务T包含项集A,当且仅当A⊆T。如果项集A中包含k个项目,则称其为k项集。
-
项集A在事务数据库D中出现的次数占D中总事务的百分比叫做项集的支持度。如果项集的支持度超过用户给定的最小支持度阈值,就称该项集是频繁项集(或频集)。
-
关联规则是形如X⇒Y的逻辑蕴含式,其中X⊂I,Y⊂I,且X∩Y=∅
-
如果事务数据库D中有s%的事务包含X∪Y,则称关联规则X⇒Y的支持度为s%
-
关联规则的信任度为support (X∪Y)/support (X)
也就是:
support (X⇒Y)=P (X ∪Y)
confidence (X⇒Y)=P (Y | X)
强关联规则
- ID 购买的商品
- 2000 A,B,C
- 1000 A,C
- 4000 A,D
- 5000 B,E,F
例:设最小支持度为50%, 最小可信度为 50%, 则可得到
- 支持度:{X,Y}同时出现的概率
- 置信度:购买X的人,同时购买Y的概率
- A ⇒ C (50%, 66.6%)
- C ⇒ A (50%, 100%)
3、关联规则挖掘算法
- Agrawal等人提出的AIS,Apriori和AprioriTid
- Cumulate和Stratify,Houstsma等⼈提出的SETM
- Park等人提出的DHP
- Savasere等人的PARTITION
- Han等人提出的不生成候选集直接生成频繁模式FPGrowth
- 其中最有效和有影响的算法为Apriori,DHP和PARTITION,FPGrowth。
Apriori算法
- Apriori算法命名源于算法使用了频繁项集性质的先验(Prior)知识。
- Apriori算法将发现关联规则的过程分为两个步骤:
- 通过迭代,检索出事务数据库中的所有频繁项集,即支持度不低于用户设定的阈值的项集;
- 利用频繁项集构造出满组用户最小信任度的规则。
- 挖掘或识别出所有频繁项集是该算法的核心,占整个计算量的大部分。
Apriori的性质:
- 2条性质
- 性质1:频繁项集的所有非空子集必为频繁项集。
- 性质2:非频繁项集的超集一定是非频繁的。
Apriori的步骤:
- 连接步:为找Lk ,通过将Lk-1与自身连接产生候选k项集的集合
- 剪枝步:Ck是Lk 的超集,也就是说,Ck的成员可以是也可以不是频繁的,但所有的频繁k项集都包含在Ck中。任何非频繁的(k-1)项集都不是频繁k项集的子集。
Apriori算法实例
现有A、B、C、D、E五种商品的交易记录表,试找出三种商品关联销售情况(k=3),最小支持度=50%
Apriori算法的不足
- Ck中的项集是用来产生频集的候选集.
- 最后的频集Lk必须是Ck的一个子集。
- Ck中的每个元素需在交易数据库中进行验证来决定其是否加入Lk
- 验证过程是性能瓶颈
- 交易数据库可能非常大
- 比如频集最多包含10个项,那么就需要扫描交易数据库10遍
- 需要很大的I/O负载。
4、FP-tree算法(不用生成候选集)
- 2000年,Han等提出了一个称为FP-tree的算法。FP-tree算法只进行2次数据库扫描。
- no候选集
- 直接压缩数据库成一个频繁模式树
- 通过这棵树生成关联规则。
- FP-tree两个主要步骤
- ①利用事务数据库中的数据构造FP-tree;
- ②从FP-tree中挖掘频繁模式。
步骤1:构造 FP-tree树
具体过程:
-
扫描数据库一次,得到频繁1-项集
-
把项按支持度递减排序
-
再一次扫描数据库,建立FP-tree
FP-tree 结构的好处
- 完备
- 不会打破交易中的任何模式
- 包含了频繁模式挖掘所需的全部信息
- 紧密
- 去除不相关信息—不包含⾮频繁项
- 支持度降序排列: ⽀持度⾼的项在FP-tree中共享的机会也高
- 决不会比原数据库大(如果不计算树节点的额外开销)
FP-tree算法的一个例子
事物数据库 :
第一步、构造FP-tree
扫描事务数据库得到频繁1-项目集F
定义minsup=20%,即最小支持度为2
重新排列F,把项按支持度递减排序:
重新调整事务数据库
创建根结点和频繁项目表
一直加到第九个事务
第二步、FP-growth
- 首先考虑I5,得到条件模式基
- <(I2,I1:1)>、<I2,I1,I3:1>
- 构造条件FP-tree
得到I5频繁项集:{{I2,I5:2},{I1,I5:2},{I2,I1,I5:2}}
-
接着考虑I4,得到条件模式基
-
<(I2,I1:1)> <(I2:1)>
-
构造条件FP-tree
-
得到I4频繁项集:{{I2,I4:2}}
-
然后考虑I3,得到条件模式基
-
<(I2,I1:2)>、<(I2:2)>、 <(I1:2)>
-
构造条件FP-tree
-
由于此树不是单一路径,因此需要递归挖掘I3
-
递归考虑I3,此时得到I1条件模式基
-
<(I2:2)>,即I1I3的条件模式基为<(I2:2)>
-
构造条件FP-tree
-
得到I3的频繁项目集{{I2,I3:4},{I1,I3:4},{I2,I1,I3:2}}
-
最后考虑I1,得到条件模式基
-
<(I2:4)>
-
构造条件FP-tree
-
得到I1的频繁项目集{{I2,I1:4}
FP - tree 算法的优缺点
- 优点
- FP-tree 算法只需对事务数据库进行二次扫描
- 避免产生的大量候选集.
- 缺点
- 要递归生成条件数据库和条件FP-tree,所以内存开销⼤
- 只能用于挖掘单维的布尔关联规则.