作为Data mining 的第一篇 先来讲讲频繁模式
频繁模式是推荐算法的基础
主要解决的是从一堆数据中挖掘出频繁的组合模式
举个简单的例子
可能买了Mac的人,过几天会去买贴膜
可能买考研英语书的人,过几天会去买考研数学书
如何在大量数据中找到可能相关的几个问题,称之为Frequent Pattern
频繁程度通过支持度、置信度两个参数来衡量
A->B support
: 即模式A, B出现频率
A->B configure
: 即模式A发生情况下B发生的概率
Item Sets
Item Sets指的是假设不考虑数据之间的顺序
Apriori
我们可以得出
- 如果一个集合是频繁集,那么它的所有子集都是频繁集
- 如果一个集合不是频繁集,那么它的所有超集都不会是频繁集
根据这一点,Agrawal & Srikant 在94年提出了著名的Apriori算法
主要思想就是从大小1开始遍历可能频繁集k
当满足V所有集合子集都在之前计算过的频繁集k中,且出现次数满足频繁要求
则V为k+1频繁集
伪代码:
Ck: Candidate itemset of size k
Lk : Frequent itemset of size k
L1 = {frequent items};
for (k = 1; Lk !=; k++) do begin
Ck+1 = candidates generated from Lk;
for each transaction t in database do
increment the count of all candidates in Ck+1
that are contained in t
Lk+1 = candidates in Ck+1 with min_support
end
return k Lk;
举个简单的例子
但Apriori也有一些缺点
- 多次读取数据,复杂度高
- n较大,可能的取值较多
Apriori也有一系列改进算法,比如说用hash存储可能的取值,做剪枝等等
FP-tree
仔细想一下上述算法的实现过程
一层层扩展,从大小为1开始,到2,再到k,到k+1
是不是很像BFS
那么我们不免想是不是会有类似DFS的算法
Jiawei Han, Jian Pei 在2000年提出FP-tree算法
通过构造前缀树来实现类似深度搜索的算法
先把所有集合按字母出现频次逆序排列&